mirror of
https://github.com/waku-org/go-multiaddr.git
synced 2025-02-23 19:48:18 +00:00
147 lines
3.0 KiB
Plaintext
147 lines
3.0 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
die() {
|
||
|
echo "$@" >&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
have_binary() {
|
||
|
type "$1" > /dev/null 2> /dev/null
|
||
|
}
|
||
|
|
||
|
check_writeable() {
|
||
|
printf "" > "$1" && rm "$1"
|
||
|
}
|
||
|
|
||
|
download() {
|
||
|
local url="$1"
|
||
|
local output="$2"
|
||
|
|
||
|
if [ -z "$url" ] || [ -z "$output" ]; then
|
||
|
die "download takes exactly two arguments. was given '$@'"
|
||
|
fi
|
||
|
|
||
|
if ! check_writeable "$output"; then
|
||
|
die "download error: cannot write to $output"
|
||
|
fi
|
||
|
|
||
|
if have_binary wget; then
|
||
|
printf 'Using wget to download "%s" to "%s"\n' "$url" "$output"
|
||
|
wget "$url" -O "$output"
|
||
|
elif have_binary curl; then
|
||
|
printf 'Using curl to download "%s" to "%s"\n' "$url" "$output"
|
||
|
curl --silent "$url" > "$output"
|
||
|
elif have_binary fetch; then
|
||
|
printf 'Using fetch to download "%s" to "%s"\n' "$url" "$output"
|
||
|
fetch "$url" -o "$output"
|
||
|
else
|
||
|
die "no binary found to download $url. exiting."
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
unarchive() {
|
||
|
local archivetype="$1"
|
||
|
local infile="$2"
|
||
|
local outfile="$3"
|
||
|
local distname="$4"
|
||
|
|
||
|
if ! check_writeable "$outfile"; then
|
||
|
die "unarchive error: cannot write to $outfile"
|
||
|
fi
|
||
|
|
||
|
case $archivetype in
|
||
|
tar.gz)
|
||
|
if have_binary tar; then
|
||
|
echo "==> using 'tar' to extract binary from archive"
|
||
|
cat "$infile" | tar -O -z -x "$distname/$distname" > "$outfile"
|
||
|
else
|
||
|
die "no binary on system for extracting tar files"
|
||
|
fi
|
||
|
;;
|
||
|
zip)
|
||
|
if have_binary unzip; then
|
||
|
echo "==> using 'unzip' to extract binary from archive"
|
||
|
unzip -p "$infile" "$distname/$distname" > "$outfile"
|
||
|
else
|
||
|
die "no installed method for extracting .zip archives"
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
die "unrecognized archive type '$archivetype'"
|
||
|
esac
|
||
|
|
||
|
chmod +x "$outfile"
|
||
|
}
|
||
|
|
||
|
get_go_vars() {
|
||
|
if [ ! -z "$GOOS" ] && [ ! -z "$GOARCH" ]; then
|
||
|
printf "%s-%s" "$GOOS" "$GOARCH"
|
||
|
fi
|
||
|
|
||
|
if have_binary go; then
|
||
|
printf "%s-%s" "$(go env GOOS)" "$(go env GOARCH)"
|
||
|
else
|
||
|
die "no way of determining system GOOS and GOARCH\nPlease manually set GOOS and GOARCH then retry."
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
mkurl() {
|
||
|
local name="$1"
|
||
|
local vers="$2"
|
||
|
local archive="$3"
|
||
|
|
||
|
local govars=$(get_go_vars)
|
||
|
|
||
|
echo "http://dist.ipfs.io/$name/$vers/${name}_${vers}_$govars.$archive"
|
||
|
}
|
||
|
|
||
|
distname="$1"
|
||
|
outpath="$2"
|
||
|
version="$3"
|
||
|
|
||
|
if [ -z "$distname" ] || [ -z "$outpath" ] || [ -z "$version" ]; then
|
||
|
die "usage: dist_get <distname> <outpath> <version>"
|
||
|
fi
|
||
|
|
||
|
if [ ${version:0:1} != "v" ]; then
|
||
|
echo "invalid version '$version'" >&2
|
||
|
die "versions must begin with 'v', for example: v0.4.0"
|
||
|
fi
|
||
|
|
||
|
# TODO: don't depend on the go tool being installed to detect this
|
||
|
goenv=$(get_go_vars)
|
||
|
|
||
|
case $goenv in
|
||
|
linux-*)
|
||
|
archive="tar.gz"
|
||
|
;;
|
||
|
darwin-*)
|
||
|
archive="tar.gz"
|
||
|
;;
|
||
|
windows-*)
|
||
|
archive="zip"
|
||
|
;;
|
||
|
freebsd-*)
|
||
|
archive="tar.gz"
|
||
|
;;
|
||
|
*)
|
||
|
echo "unrecognized system environment: $goenv" >&2
|
||
|
die "currently only linux, darwin, windows and freebsd are supported by this script"
|
||
|
esac
|
||
|
|
||
|
|
||
|
mkdir -p bin/tmp
|
||
|
|
||
|
url=$(mkurl "$distname" "$version" "$archive")
|
||
|
tmpfi="bin/tmp/$distname.$archive"
|
||
|
|
||
|
download "$url" "$tmpfi"
|
||
|
if [ $? -ne 0 ]; then
|
||
|
die "failed to download $url to $tmpfi"
|
||
|
fi
|
||
|
|
||
|
unarchive "$archive" "$tmpfi" "$outpath" "$distname"
|
||
|
if [ $? -ne 0 ]; then
|
||
|
die "failed to exract archive $tmpfi"
|
||
|
fi
|