56 lines
1.5 KiB
Bash
Executable File
56 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
found() {
|
|
echo "$@"
|
|
exit
|
|
}
|
|
|
|
arch=
|
|
if command -v apk > /dev/null && tryArch="$(apk --print-arch)"; then
|
|
arch="$tryArch"
|
|
elif command -v dpkg > /dev/null && tryArch="$(dpkg --print-architecture)"; then
|
|
arch="${tryArch##*-}"
|
|
elif command -v uname > /dev/null && tryArch="$(uname -m)"; then
|
|
echo >&2 "warning: neither of 'dpkg' or 'apk' found, falling back to 'uname'"
|
|
arch="$tryArch"
|
|
|
|
os="$(uname -o 2>/dev/null || :)"
|
|
case "$os" in
|
|
Cygwin | Msys)
|
|
# TODO support non-amd64 Windows
|
|
found 'windows-amd64'
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case "$arch" in
|
|
amd64 | x86_64) found 'amd64' ;;
|
|
arm64 | aarch64) found 'arm64v8' ;;
|
|
armel) found 'arm32v5' ;;
|
|
armv7) found 'arm32v7' ;;
|
|
i[3456]86 | x86) found 'i386' ;;
|
|
mips64el) found 'mips64le' ;; # TODO "uname -m" is just "mips64" (which is also "apk --print-arch" on big-endian MIPS) so we ought to disambiguate that somehow
|
|
ppc64el | ppc64le) found 'ppc64le' ;;
|
|
riscv64) found 'riscv64' ;;
|
|
s390x) found 's390x' ;;
|
|
|
|
armhf)
|
|
if [ -s /etc/os-release ] && id="$(grep -Em1 '^ID=[^[:space:]]+$' /etc/os-release)"; then
|
|
eval "$id"
|
|
case "${ID:-}" in
|
|
alpine | raspbian) found 'arm32v6' ;;
|
|
*) found 'arm32v7' ;;
|
|
esac
|
|
else
|
|
echo >&2 "warning: '$arch' is ambiguous (and '/etc/os-release' is missing 'ID=xxx'), assuming 'arm32v6' for safety"
|
|
found 'arm32v6'
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
echo >&2 "error: unknown architecture: '$arch'"
|
|
exit 1
|
|
;;
|
|
esac
|