| | #!/bin/sh |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | if [ "$KSH_VERSION" = 'Version JM 93t+ 2010-03-05' ]; then |
| | |
| | |
| | |
| | echo 'this installer does not work with this ksh93 version; please try bash!' >&2 |
| | exit 1 |
| | fi |
| |
|
| | set -u |
| |
|
| | APP_NAME="uv" |
| | APP_VERSION="0.5.0" |
| | |
| | if [ -n "${UV_INSTALLER_GHE_BASE_URL:-}" ]; then |
| | INSTALLER_BASE_URL="$UV_INSTALLER_GHE_BASE_URL" |
| | else |
| | INSTALLER_BASE_URL="${UV_INSTALLER_GITHUB_BASE_URL:-https://github.com}" |
| | fi |
| | if [ -n "${INSTALLER_DOWNLOAD_URL:-}" ]; then |
| | ARTIFACT_DOWNLOAD_URL="$INSTALLER_DOWNLOAD_URL" |
| | else |
| | ARTIFACT_DOWNLOAD_URL="${INSTALLER_BASE_URL}/astral-sh/uv/releases/download/0.5.0" |
| | fi |
| | PRINT_VERBOSE=${INSTALLER_PRINT_VERBOSE:-0} |
| | PRINT_QUIET=${INSTALLER_PRINT_QUIET:-0} |
| | if [ -n "${UV_NO_MODIFY_PATH:-}" ]; then |
| | NO_MODIFY_PATH="$UV_NO_MODIFY_PATH" |
| | else |
| | NO_MODIFY_PATH=${INSTALLER_NO_MODIFY_PATH:-0} |
| | fi |
| | if [ "${UV_DISABLE_UPDATE:-0}" = "1" ]; then |
| | INSTALL_UPDATER=0 |
| | else |
| | INSTALL_UPDATER=1 |
| | fi |
| | UNMANAGED_INSTALL="${UV_UNMANAGED_INSTALL:-}" |
| | if [ -n "${UNMANAGED_INSTALL}" ]; then |
| | NO_MODIFY_PATH=1 |
| | INSTALL_UPDATER=0 |
| | fi |
| |
|
| | read -r RECEIPT <<EORECEIPT |
| | {"binaries":["CARGO_DIST_BINS"],"binary_aliases":{},"cdylibs":["CARGO_DIST_DYLIBS"],"cstaticlibs":["CARGO_DIST_STATICLIBS"],"install_layout":"unspecified","install_prefix":"AXO_INSTALL_PREFIX","modify_path":true,"provider":{"source":"cargo-dist","version":"0.25.1"},"source":{"app_name":"uv","name":"uv","owner":"astral-sh","release_type":"github"},"version":"0.5.0"} |
| | EORECEIPT |
| | RECEIPT_HOME="${HOME}/.config/uv" |
| |
|
| | usage() { |
| | |
| | cat <<EOF |
| | uv-installer.sh |
| | |
| | The installer for uv 0.5.0 |
| | |
| | This script detects what platform you're on and fetches an appropriate archive from |
| | https://github.com/astral-sh/uv/releases/download/0.5.0 |
| | then unpacks the binaries and installs them to the first of the following locations |
| | |
| | \$XDG_BIN_HOME |
| | \$XDG_DATA_HOME/../bin |
| | \$HOME/.local/bin |
| | |
| | It will then add that dir to PATH by adding the appropriate line to your shell profiles. |
| | |
| | USAGE: |
| | uv-installer.sh [OPTIONS] |
| | |
| | OPTIONS: |
| | -v, --verbose |
| | Enable verbose output |
| | |
| | -q, --quiet |
| | Disable progress output |
| | |
| | --no-modify-path |
| | Don't configure the PATH environment variable |
| | |
| | -h, --help |
| | Print help information |
| | EOF |
| | } |
| |
|
| | download_binary_and_run_installer() { |
| | downloader --check |
| | need_cmd uname |
| | need_cmd mktemp |
| | need_cmd chmod |
| | need_cmd mkdir |
| | need_cmd rm |
| | need_cmd tar |
| | need_cmd grep |
| | need_cmd cat |
| |
|
| | for arg in "$@"; do |
| | case "$arg" in |
| | --help) |
| | usage |
| | exit 0 |
| | ;; |
| | --quiet) |
| | PRINT_QUIET=1 |
| | ;; |
| | --verbose) |
| | PRINT_VERBOSE=1 |
| | ;; |
| | --no-modify-path) |
| | say "--no-modify-path has been deprecated; please set UV_NO_MODIFY_PATH=1 in the environment" |
| | NO_MODIFY_PATH=1 |
| | ;; |
| | *) |
| | OPTIND=1 |
| | if [ "${arg%%--*}" = "" ]; then |
| | err "unknown option $arg" |
| | fi |
| | while getopts :hvq sub_arg "$arg"; do |
| | case "$sub_arg" in |
| | h) |
| | usage |
| | exit 0 |
| | ;; |
| | v) |
| | |
| | |
| | PRINT_VERBOSE=1 |
| | ;; |
| | q) |
| | |
| | |
| | PRINT_QUIET=1 |
| | ;; |
| | *) |
| | err "unknown option -$OPTARG" |
| | ;; |
| | esac |
| | done |
| | ;; |
| | esac |
| | done |
| |
|
| | get_architecture || return 1 |
| | local _true_arch="$RETVAL" |
| | assert_nz "$_true_arch" "arch" |
| | local _cur_arch="$_true_arch" |
| |
|
| | |
| | local _artifact_name |
| | _artifact_name="$(select_archive_for_arch "$_true_arch")" || return 1 |
| | local _bins |
| | local _zip_ext |
| | local _arch |
| |
|
| | |
| | |
| | case "$_artifact_name" in |
| | "uv-aarch64-apple-darwin.tar.gz") |
| | _arch="aarch64-apple-darwin" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-aarch64-unknown-linux-gnu.tar.gz") |
| | _arch="aarch64-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-aarch64-unknown-linux-musl.tar.gz") |
| | _arch="aarch64-unknown-linux-musl-static" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-arm-unknown-linux-musleabihf.tar.gz") |
| | _arch="arm-unknown-linux-musl-staticeabihf" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-armv7-unknown-linux-gnueabihf.tar.gz") |
| | _arch="armv7-unknown-linux-gnueabihf" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-armv7-unknown-linux-musleabihf.tar.gz") |
| | _arch="armv7-unknown-linux-musl-staticeabihf" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-i686-pc-windows-msvc.zip") |
| | _arch="i686-pc-windows-msvc" |
| | _zip_ext=".zip" |
| | _bins="uv.exe uvx.exe" |
| | _bins_js_array='"uv.exe","uvx.exe"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-i686-unknown-linux-gnu.tar.gz") |
| | _arch="i686-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-i686-unknown-linux-musl.tar.gz") |
| | _arch="i686-unknown-linux-musl-static" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-powerpc64-unknown-linux-gnu.tar.gz") |
| | _arch="powerpc64-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-powerpc64le-unknown-linux-gnu.tar.gz") |
| | _arch="powerpc64le-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-s390x-unknown-linux-gnu.tar.gz") |
| | _arch="s390x-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-x86_64-apple-darwin.tar.gz") |
| | _arch="x86_64-apple-darwin" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-x86_64-pc-windows-msvc.zip") |
| | _arch="x86_64-pc-windows-msvc" |
| | _zip_ext=".zip" |
| | _bins="uv.exe uvx.exe" |
| | _bins_js_array='"uv.exe","uvx.exe"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-x86_64-unknown-linux-gnu.tar.gz") |
| | _arch="x86_64-unknown-linux-gnu" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | "uv-x86_64-unknown-linux-musl.tar.gz") |
| | _arch="x86_64-unknown-linux-musl-static" |
| | _zip_ext=".tar.gz" |
| | _bins="uv uvx" |
| | _bins_js_array='"uv","uvx"' |
| | _libs="" |
| | _libs_js_array="" |
| | _staticlibs="" |
| | _staticlibs_js_array="" |
| | _updater_name="" |
| | _updater_bin="" |
| | ;; |
| | *) |
| | err "internal installer error: selected download $_artifact_name doesn't exist!?" |
| | ;; |
| | esac |
| |
|
| |
|
| | |
| | RECEIPT="$(echo "$RECEIPT" | sed s/'"CARGO_DIST_BINS"'/"$_bins_js_array"/)" |
| | RECEIPT="$(echo "$RECEIPT" | sed s/'"CARGO_DIST_DYLIBS"'/"$_libs_js_array"/)" |
| | RECEIPT="$(echo "$RECEIPT" | sed s/'"CARGO_DIST_STATICLIBS"'/"$_staticlibs_js_array"/)" |
| |
|
| | |
| | local _url="$ARTIFACT_DOWNLOAD_URL/$_artifact_name" |
| | local _dir |
| | _dir="$(ensure mktemp -d)" || return 1 |
| | local _file="$_dir/input$_zip_ext" |
| |
|
| | say "downloading $APP_NAME $APP_VERSION ${_arch}" 1>&2 |
| | say_verbose " from $_url" 1>&2 |
| | say_verbose " to $_file" 1>&2 |
| |
|
| | ensure mkdir -p "$_dir" |
| |
|
| | if ! downloader "$_url" "$_file"; then |
| | say "failed to download $_url" |
| | say "this may be a standard network error, but it may also indicate" |
| | say "that $APP_NAME's release process is not working. When in doubt" |
| | say "please feel free to open an issue!" |
| | exit 1 |
| | fi |
| |
|
| | |
| | if [ -n "$_updater_name" ] && [ "$INSTALL_UPDATER" = "1" ]; then |
| | local _updater_url="$ARTIFACT_DOWNLOAD_URL/$_updater_name" |
| | |
| | |
| | local _updater_file="$_dir/$APP_NAME-update" |
| |
|
| | if ! downloader "$_updater_url" "$_updater_file"; then |
| | say "failed to download $_updater_url" |
| | say "this may be a standard network error, but it may also indicate" |
| | say "that $APP_NAME's release process is not working. When in doubt" |
| | say "please feel free to open an issue!" |
| | exit 1 |
| | fi |
| |
|
| | |
| | _bins="$_bins $APP_NAME-update" |
| | fi |
| |
|
| | |
| | case "$_zip_ext" in |
| | ".zip") |
| | ensure unzip -q "$_file" -d "$_dir" |
| | ;; |
| |
|
| | ".tar."*) |
| | ensure tar xf "$_file" --strip-components 1 -C "$_dir" |
| | ;; |
| | *) |
| | err "unknown archive format: $_zip_ext" |
| | ;; |
| | esac |
| |
|
| | install "$_dir" "$_bins" "$_libs" "$_staticlibs" "$_arch" "$@" |
| | local _retval=$? |
| | if [ "$_retval" != 0 ]; then |
| | return "$_retval" |
| | fi |
| |
|
| | ignore rm -rf "$_dir" |
| |
|
| | |
| | if [ "$INSTALL_UPDATER" = "1" ]; then |
| | if ! mkdir -p "$RECEIPT_HOME"; then |
| | err "unable to create receipt directory at $RECEIPT_HOME" |
| | else |
| | echo "$RECEIPT" > "$RECEIPT_HOME/$APP_NAME-receipt.json" |
| | |
| | local _retval=$? |
| | fi |
| | else |
| | local _retval=0 |
| | fi |
| |
|
| | return "$_retval" |
| | } |
| |
|
| | |
| | |
| | replace_home() { |
| | local _str="$1" |
| |
|
| | if [ -n "${HOME:-}" ]; then |
| | echo "$_str" | sed "s,$HOME,\$HOME," |
| | else |
| | echo "$_str" |
| | fi |
| | } |
| |
|
| | json_binary_aliases() { |
| | local _arch="$1" |
| |
|
| | case "$_arch" in |
| | "aarch64-apple-darwin") |
| | echo '{}' |
| | ;; |
| | "aarch64-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "aarch64-unknown-linux-musl-dynamic") |
| | echo '{}' |
| | ;; |
| | "aarch64-unknown-linux-musl-static") |
| | echo '{}' |
| | ;; |
| | "arm-unknown-linux-gnueabihf") |
| | echo '{}' |
| | ;; |
| | "arm-unknown-linux-musl-dynamiceabihf") |
| | echo '{}' |
| | ;; |
| | "arm-unknown-linux-musl-staticeabihf") |
| | echo '{}' |
| | ;; |
| | "armv7-unknown-linux-gnueabihf") |
| | echo '{}' |
| | ;; |
| | "armv7-unknown-linux-musl-dynamiceabihf") |
| | echo '{}' |
| | ;; |
| | "armv7-unknown-linux-musl-staticeabihf") |
| | echo '{}' |
| | ;; |
| | "i686-pc-windows-gnu") |
| | echo '{}' |
| | ;; |
| | "i686-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "i686-unknown-linux-musl-dynamic") |
| | echo '{}' |
| | ;; |
| | "i686-unknown-linux-musl-static") |
| | echo '{}' |
| | ;; |
| | "powerpc64-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "powerpc64le-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "s390x-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "x86_64-apple-darwin") |
| | echo '{}' |
| | ;; |
| | "x86_64-pc-windows-gnu") |
| | echo '{}' |
| | ;; |
| | "x86_64-unknown-linux-gnu") |
| | echo '{}' |
| | ;; |
| | "x86_64-unknown-linux-musl-dynamic") |
| | echo '{}' |
| | ;; |
| | "x86_64-unknown-linux-musl-static") |
| | echo '{}' |
| | ;; |
| | *) |
| | echo '{}' |
| | ;; |
| | esac |
| | } |
| |
|
| | aliases_for_binary() { |
| | local _bin="$1" |
| | local _arch="$2" |
| |
|
| | case "$_arch" in |
| | "aarch64-apple-darwin") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "aarch64-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "aarch64-unknown-linux-musl-dynamic") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "aarch64-unknown-linux-musl-static") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "arm-unknown-linux-gnueabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "arm-unknown-linux-musl-dynamiceabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "arm-unknown-linux-musl-staticeabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "armv7-unknown-linux-gnueabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "armv7-unknown-linux-musl-dynamiceabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "armv7-unknown-linux-musl-staticeabihf") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "i686-pc-windows-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "i686-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "i686-unknown-linux-musl-dynamic") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "i686-unknown-linux-musl-static") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "powerpc64-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "powerpc64le-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "s390x-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "x86_64-apple-darwin") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "x86_64-pc-windows-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "x86_64-unknown-linux-gnu") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "x86_64-unknown-linux-musl-dynamic") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | "x86_64-unknown-linux-musl-static") |
| | case "$_bin" in |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | ;; |
| | *) |
| | echo "" |
| | ;; |
| | esac |
| | } |
| |
|
| | select_archive_for_arch() { |
| | local _true_arch="$1" |
| | local _archive |
| | case "$_true_arch" in |
| | "aarch64-apple-darwin") |
| | _archive="uv-aarch64-apple-darwin.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-x86_64-apple-darwin.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "aarch64-pc-windows-msvc") |
| | _archive="uv-x86_64-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-i686-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "aarch64-unknown-linux-gnu") |
| | _archive="uv-aarch64-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-aarch64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "aarch64-unknown-linux-musl-dynamic") |
| | _archive="uv-aarch64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "aarch64-unknown-linux-musl-static") |
| | _archive="uv-aarch64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "arm-unknown-linux-gnueabihf") |
| | _archive="uv-arm-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "arm-unknown-linux-musl-dynamiceabihf") |
| | _archive="uv-arm-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "arm-unknown-linux-musl-staticeabihf") |
| | _archive="uv-arm-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "armv7-unknown-linux-gnueabihf") |
| | _archive="uv-armv7-unknown-linux-gnueabihf.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-armv7-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "armv7-unknown-linux-musl-dynamiceabihf") |
| | _archive="uv-armv7-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "armv7-unknown-linux-musl-staticeabihf") |
| | _archive="uv-armv7-unknown-linux-musleabihf.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "i686-pc-windows-gnu") |
| | _archive="uv-i686-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "i686-pc-windows-msvc") |
| | _archive="uv-i686-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "i686-unknown-linux-gnu") |
| | _archive="uv-i686-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-i686-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "i686-unknown-linux-musl-dynamic") |
| | _archive="uv-i686-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "i686-unknown-linux-musl-static") |
| | _archive="uv-i686-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "powerpc64-unknown-linux-gnu") |
| | _archive="uv-powerpc64-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "powerpc64le-unknown-linux-gnu") |
| | _archive="uv-powerpc64le-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "s390x-unknown-linux-gnu") |
| | _archive="uv-s390x-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-apple-darwin") |
| | _archive="uv-x86_64-apple-darwin.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-pc-windows-gnu") |
| | _archive="uv-x86_64-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-pc-windows-msvc") |
| | _archive="uv-x86_64-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-i686-pc-windows-msvc.zip" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-unknown-linux-gnu") |
| | _archive="uv-x86_64-unknown-linux-gnu.tar.gz" |
| | if ! check_glibc "2" "31"; then |
| | _archive="" |
| | fi |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | _archive="uv-x86_64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-unknown-linux-musl-dynamic") |
| | _archive="uv-x86_64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | "x86_64-unknown-linux-musl-static") |
| | _archive="uv-x86_64-unknown-linux-musl.tar.gz" |
| | if [ -n "$_archive" ]; then |
| | echo "$_archive" |
| | return 0 |
| | fi |
| | ;; |
| | *) |
| | err "there isn't a download for your platform $_true_arch" |
| | ;; |
| | esac |
| | err "no compatible downloads were found for your platform $_true_arch" |
| | } |
| |
|
| | check_glibc() { |
| | local _min_glibc_major="$1" |
| | local _min_glibc_series="$2" |
| |
|
| | |
| | |
| | _local_glibc="$(ldd --version | awk -F' ' '{ if (FNR<=1) print $NF }')" |
| |
|
| | if [ "$(echo "${_local_glibc}" | awk -F. '{ print $1 }')" = "$_min_glibc_major" ] && [ "$(echo "${_local_glibc}" | awk -F. '{ print $2 }')" -ge "$_min_glibc_series" ]; then |
| | return 0 |
| | else |
| | say "System glibc version (\`${_local_glibc}') is too old; checking alternatives" >&2 |
| | return 1 |
| | fi |
| | } |
| |
|
| | |
| | |
| | install() { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | local _install_dir |
| | |
| | local _lib_install_dir |
| | |
| | |
| | |
| | |
| | local _receipt_install_dir |
| | |
| | local _env_script_path |
| | |
| | local _install_dir_expr |
| | |
| | local _env_script_path_expr |
| | |
| | local _force_install_dir |
| | |
| | local _install_layout="unspecified" |
| |
|
| | |
| | |
| | if [ -n "${UV_INSTALL_DIR:-}" ]; then |
| | _force_install_dir="$UV_INSTALL_DIR" |
| | _install_layout="flat" |
| | elif [ -n "${CARGO_DIST_FORCE_INSTALL_DIR:-}" ]; then |
| | _force_install_dir="$CARGO_DIST_FORCE_INSTALL_DIR" |
| | _install_layout="flat" |
| | elif [ -n "$UNMANAGED_INSTALL" ]; then |
| | _force_install_dir="$UNMANAGED_INSTALL" |
| | _install_layout="flat" |
| | fi |
| |
|
| | |
| | |
| | if [ -n "${_force_install_dir:-}" ]; then |
| | if [ "$_force_install_dir" = "${HOME:-}/.cargo" ] || [ "$_force_install_dir" = "${CARGO_HOME:-}" ]; then |
| | _install_layout="cargo-home" |
| | else |
| | _install_layout="flat" |
| | fi |
| | fi |
| |
|
| | |
| | |
| | if [ -n "${_force_install_dir:-}" ]; then |
| | case "$_install_layout" in |
| | "hierarchical") |
| | _install_dir="$_force_install_dir/bin" |
| | _lib_install_dir="$_force_install_dir/lib" |
| | _receipt_install_dir="$_force_install_dir" |
| | _env_script_path="$_force_install_dir/env" |
| | _install_dir_expr="$(replace_home "$_force_install_dir/bin")" |
| | _env_script_path_expr="$(replace_home "$_force_install_dir/env")" |
| | ;; |
| | "cargo-home") |
| | _install_dir="$_force_install_dir/bin" |
| | _lib_install_dir="$_force_install_dir/bin" |
| | _receipt_install_dir="$_force_install_dir" |
| | _env_script_path="$_force_install_dir/env" |
| | _install_dir_expr="$(replace_home "$_force_install_dir/bin")" |
| | _env_script_path_expr="$(replace_home "$_force_install_dir/env")" |
| | ;; |
| | "flat") |
| | _install_dir="$_force_install_dir" |
| | _lib_install_dir="$_force_install_dir" |
| | _receipt_install_dir="$_install_dir" |
| | _env_script_path="$_force_install_dir/env" |
| | _install_dir_expr="$(replace_home "$_force_install_dir")" |
| | _env_script_path_expr="$(replace_home "$_force_install_dir/env")" |
| | ;; |
| | *) |
| | err "Unrecognized install layout: $_install_layout" |
| | ;; |
| | esac |
| | fi |
| | if [ -z "${_install_dir:-}" ]; then |
| | _install_layout="flat" |
| | |
| | if [ -n "${XDG_BIN_HOME:-}" ]; then |
| | _install_dir="$XDG_BIN_HOME" |
| | _lib_install_dir="$_install_dir" |
| | _receipt_install_dir="$_install_dir" |
| | _env_script_path="$XDG_BIN_HOME/env" |
| | _install_dir_expr="$(replace_home "$_install_dir")" |
| | _env_script_path_expr="$(replace_home "$_env_script_path")" |
| | fi |
| | fi |
| | if [ -z "${_install_dir:-}" ]; then |
| | _install_layout="flat" |
| | |
| | if [ -n "${XDG_DATA_HOME:-}" ]; then |
| | _install_dir="$XDG_DATA_HOME/../bin" |
| | _lib_install_dir="$_install_dir" |
| | _receipt_install_dir="$_install_dir" |
| | _env_script_path="$XDG_DATA_HOME/../bin/env" |
| | _install_dir_expr="$(replace_home "$_install_dir")" |
| | _env_script_path_expr="$(replace_home "$_env_script_path")" |
| | fi |
| | fi |
| | if [ -z "${_install_dir:-}" ]; then |
| | _install_layout="flat" |
| | |
| | if [ -n "${HOME:-}" ]; then |
| | _install_dir="$HOME/.local/bin" |
| | _lib_install_dir="$HOME/.local/bin" |
| | _receipt_install_dir="$_install_dir" |
| | _env_script_path="$HOME/.local/bin/env" |
| | _install_dir_expr='$HOME/.local/bin' |
| | _env_script_path_expr='$HOME/.local/bin/env' |
| | fi |
| | fi |
| |
|
| | if [ -z "$_install_dir_expr" ]; then |
| | err "could not find a valid path to install to!" |
| | fi |
| |
|
| | |
| | |
| | |
| | _fish_env_script_path="${_env_script_path}.fish" |
| | _fish_env_script_path_expr="${_env_script_path_expr}.fish" |
| |
|
| | |
| | RECEIPT=$(echo "$RECEIPT" | sed "s,AXO_INSTALL_PREFIX,$_receipt_install_dir,") |
| | |
| | RECEIPT=$(echo "$RECEIPT" | sed "s'\"binary_aliases\":{}'\"binary_aliases\":$(json_binary_aliases "$_arch")'") |
| | |
| | RECEIPT=$(echo "$RECEIPT" | sed "s'\"install_layout\":\"unspecified\"'\"install_layout\":\"$_install_layout\"'") |
| | if [ "$NO_MODIFY_PATH" = "1" ]; then |
| | RECEIPT=$(echo "$RECEIPT" | sed "s'\"modify_path\":true'\"modify_path\":false'") |
| | fi |
| |
|
| | say "installing to $_install_dir" |
| | ensure mkdir -p "$_install_dir" |
| | ensure mkdir -p "$_lib_install_dir" |
| |
|
| | |
| | local _src_dir="$1" |
| | local _bins="$2" |
| | local _libs="$3" |
| | local _staticlibs="$4" |
| | local _arch="$5" |
| | for _bin_name in $_bins; do |
| | local _bin="$_src_dir/$_bin_name" |
| | ensure mv "$_bin" "$_install_dir" |
| | |
| | ensure chmod +x "$_install_dir/$_bin_name" |
| | for _dest in $(aliases_for_binary "$_bin_name" "$_arch"); do |
| | ln -sf "$_install_dir/$_bin_name" "$_install_dir/$_dest" |
| | done |
| | say " $_bin_name" |
| | done |
| | |
| | for _lib_name in $_libs; do |
| | local _lib="$_src_dir/$_lib_name" |
| | ensure mv "$_lib" "$_lib_install_dir" |
| | |
| | ensure chmod +x "$_lib_install_dir/$_lib_name" |
| | say " $_lib_name" |
| | done |
| | for _lib_name in $_staticlibs; do |
| | local _lib="$_src_dir/$_lib_name" |
| | ensure mv "$_lib" "$_lib_install_dir" |
| | |
| | ensure chmod +x "$_lib_install_dir/$_lib_name" |
| | say " $_lib_name" |
| | done |
| |
|
| | say "everything's installed!" |
| |
|
| | |
| | case :$PATH: |
| | in *:$_install_dir:*) NO_MODIFY_PATH=1 ;; |
| | *) ;; |
| | esac |
| |
|
| | if [ "0" = "$NO_MODIFY_PATH" ]; then |
| | add_install_dir_to_ci_path "$_install_dir" |
| | add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".profile" "sh" |
| | exit1=$? |
| | shotgun_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".profile .bashrc .bash_profile .bash_login" "sh" |
| | exit2=$? |
| | add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".zshrc .zshenv" "sh" |
| | exit3=$? |
| | |
| | ensure mkdir -p "$HOME/.config/fish/conf.d" |
| | exit4=$? |
| | add_install_dir_to_path "$_install_dir_expr" "$_fish_env_script_path" "$_fish_env_script_path_expr" ".config/fish/conf.d/$APP_NAME.env.fish" "fish" |
| | exit5=$? |
| |
|
| | if [ "${exit1:-0}" = 1 ] || [ "${exit2:-0}" = 1 ] || [ "${exit3:-0}" = 1 ] || [ "${exit4:-0}" = 1 ] || [ "${exit5:-0}" = 1 ]; then |
| | say "" |
| | say "To add $_install_dir_expr to your PATH, either restart your shell or run:" |
| | say "" |
| | say " source $_env_script_path_expr (sh, bash, zsh)" |
| | say " source $_fish_env_script_path_expr (fish)" |
| | fi |
| | fi |
| | } |
| |
|
| | print_home_for_script() { |
| | local script="$1" |
| |
|
| | local _home |
| | case "$script" in |
| | |
| | |
| | .zsh*) |
| | if [ -n "${ZDOTDIR:-}" ]; then |
| | _home="$ZDOTDIR" |
| | else |
| | _home="$HOME" |
| | fi |
| | ;; |
| | *) |
| | _home="$HOME" |
| | ;; |
| | esac |
| |
|
| | echo "$_home" |
| | } |
| |
|
| | add_install_dir_to_ci_path() { |
| | |
| | local _install_dir="$1" |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | if [ -n "${GITHUB_PATH:-}" ]; then |
| | ensure echo "$_install_dir" >> "$GITHUB_PATH" |
| | fi |
| | } |
| |
|
| | add_install_dir_to_path() { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | local _install_dir_expr="$1" |
| | local _env_script_path="$2" |
| | local _env_script_path_expr="$3" |
| | local _rcfiles="$4" |
| | local _shell="$5" |
| |
|
| | if [ -n "${HOME:-}" ]; then |
| | local _target |
| | local _home |
| |
|
| | |
| | |
| | for _rcfile_relative in $_rcfiles; do |
| | _home="$(print_home_for_script "$_rcfile_relative")" |
| | local _rcfile="$_home/$_rcfile_relative" |
| |
|
| | if [ -f "$_rcfile" ]; then |
| | _target="$_rcfile" |
| | break |
| | fi |
| | done |
| |
|
| | |
| | |
| | if [ -z "${_target:-}" ]; then |
| | local _rcfile_relative |
| | _rcfile_relative="$(echo "$_rcfiles" | awk '{ print $1 }')" |
| | _home="$(print_home_for_script "$_rcfile_relative")" |
| | _target="$_home/$_rcfile_relative" |
| | fi |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | local _robust_line=". \"$_env_script_path_expr\"" |
| | local _pretty_line="source \"$_env_script_path_expr\"" |
| |
|
| | |
| | if [ ! -f "$_env_script_path" ]; then |
| | say_verbose "creating $_env_script_path" |
| | if [ "$_shell" = "sh" ]; then |
| | write_env_script_sh "$_install_dir_expr" "$_env_script_path" |
| | else |
| | write_env_script_fish "$_install_dir_expr" "$_env_script_path" |
| | fi |
| | else |
| | say_verbose "$_env_script_path already exists" |
| | fi |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | if ! grep -F "$_robust_line" "$_target" > /dev/null 2>/dev/null && \ |
| | ! grep -F "$_pretty_line" "$_target" > /dev/null 2>/dev/null |
| | then |
| | |
| | |
| | if [ -f "$_env_script_path" ]; then |
| | local _line |
| | |
| | |
| | |
| | |
| | |
| | if [ "$_shell" = "fish" ]; then |
| | _line="$_pretty_line" |
| | else |
| | _line="$_robust_line" |
| | fi |
| | say_verbose "adding $_line to $_target" |
| | |
| | ensure echo "" >> "$_target" |
| | ensure echo "$_line" >> "$_target" |
| | return 1 |
| | fi |
| | else |
| | say_verbose "$_install_dir already on PATH" |
| | fi |
| | fi |
| | } |
| |
|
| | shotgun_install_dir_to_path() { |
| | |
| | |
| | local _install_dir_expr="$1" |
| | local _env_script_path="$2" |
| | local _env_script_path_expr="$3" |
| | local _rcfiles="$4" |
| | local _shell="$5" |
| |
|
| | if [ -n "${HOME:-}" ]; then |
| | local _found=false |
| | local _home |
| |
|
| | for _rcfile_relative in $_rcfiles; do |
| | _home="$(print_home_for_script "$_rcfile_relative")" |
| | local _rcfile_abs="$_home/$_rcfile_relative" |
| |
|
| | if [ -f "$_rcfile_abs" ]; then |
| | _found=true |
| | add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" "$_rcfile_relative" "$_shell" |
| | fi |
| | done |
| |
|
| | |
| | if [ "$_found" = false ]; then |
| | add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" "$_rcfiles" "$_shell" |
| | fi |
| | fi |
| | } |
| |
|
| | write_env_script_sh() { |
| | |
| | local _install_dir_expr="$1" |
| | local _env_script_path="$2" |
| | ensure cat <<EOF > "$_env_script_path" |
| | #!/bin/sh |
| | # add binaries to PATH if they aren't added yet |
| | # affix colons on either side of \$PATH to simplify matching |
| | case ":\${PATH}:" in |
| | *:"$_install_dir_expr":*) |
| | ;; |
| | *) |
| | # Prepending path in case a system-installed binary needs to be overridden |
| | export PATH="$_install_dir_expr:\$PATH" |
| | ;; |
| | esac |
| | EOF |
| | } |
| |
|
| | write_env_script_fish() { |
| | |
| | local _install_dir_expr="$1" |
| | local _env_script_path="$2" |
| | ensure cat <<EOF > "$_env_script_path" |
| | if not contains "$_install_dir_expr" \$PATH |
| | # Prepending path in case a system-installed binary needs to be overridden |
| | set -x PATH "$_install_dir_expr" \$PATH |
| | end |
| | EOF |
| | } |
| |
|
| | check_proc() { |
| | |
| | |
| | if ! test -L /proc/self/exe ; then |
| | err "fatal: Unable to find /proc/self/exe. Is /proc mounted? Installation cannot proceed without /proc." |
| | fi |
| | } |
| |
|
| | get_bitness() { |
| | need_cmd head |
| | |
| | |
| | |
| | |
| | |
| | |
| | local _current_exe_head |
| | _current_exe_head=$(head -c 5 /proc/self/exe ) |
| | if [ "$_current_exe_head" = "$(printf '\177ELF\001')" ]; then |
| | echo 32 |
| | elif [ "$_current_exe_head" = "$(printf '\177ELF\002')" ]; then |
| | echo 64 |
| | else |
| | err "unknown platform bitness" |
| | fi |
| | } |
| |
|
| | is_host_amd64_elf() { |
| | need_cmd head |
| | need_cmd tail |
| | |
| | |
| | |
| | local _current_exe_machine |
| | _current_exe_machine=$(head -c 19 /proc/self/exe | tail -c 1) |
| | [ "$_current_exe_machine" = "$(printf '\076')" ] |
| | } |
| |
|
| | get_endianness() { |
| | local cputype=$1 |
| | local suffix_eb=$2 |
| | local suffix_el=$3 |
| |
|
| | |
| | need_cmd head |
| | need_cmd tail |
| |
|
| | local _current_exe_endianness |
| | _current_exe_endianness="$(head -c 6 /proc/self/exe | tail -c 1)" |
| | if [ "$_current_exe_endianness" = "$(printf '\001')" ]; then |
| | echo "${cputype}${suffix_el}" |
| | elif [ "$_current_exe_endianness" = "$(printf '\002')" ]; then |
| | echo "${cputype}${suffix_eb}" |
| | else |
| | err "unknown platform endianness" |
| | fi |
| | } |
| |
|
| | get_architecture() { |
| | local _ostype |
| | local _cputype |
| | _ostype="$(uname -s)" |
| | _cputype="$(uname -m)" |
| | local _clibtype="gnu" |
| | local _local_glibc |
| |
|
| | if [ "$_ostype" = Linux ]; then |
| | if [ "$(uname -o)" = Android ]; then |
| | _ostype=Android |
| | fi |
| | if ldd --version 2>&1 | grep -q 'musl'; then |
| | _clibtype="musl-dynamic" |
| | else |
| | |
| | _clibtype="gnu" |
| | fi |
| | fi |
| |
|
| | if [ "$_ostype" = Darwin ] && [ "$_cputype" = i386 ]; then |
| | |
| | if sysctl hw.optional.x86_64 | grep -q ': 1'; then |
| | _cputype=x86_64 |
| | fi |
| | fi |
| |
|
| | if [ "$_ostype" = Darwin ] && [ "$_cputype" = x86_64 ]; then |
| | |
| | if [ "$(sysctl -n hw.optional.arm64 2>/dev/null)" = "1" ]; then |
| | _cputype=aarch64 |
| | fi |
| | fi |
| |
|
| | if [ "$_ostype" = SunOS ]; then |
| | |
| | |
| | |
| | |
| | if [ "$(/usr/bin/uname -o)" = illumos ]; then |
| | _ostype=illumos |
| | fi |
| |
|
| | |
| | |
| | |
| | |
| | if [ "$_cputype" = i86pc ]; then |
| | _cputype="$(isainfo -n)" |
| | fi |
| | fi |
| |
|
| | case "$_ostype" in |
| |
|
| | Android) |
| | _ostype=linux-android |
| | ;; |
| |
|
| | Linux) |
| | check_proc |
| | _ostype=unknown-linux-$_clibtype |
| | _bitness=$(get_bitness) |
| | ;; |
| |
|
| | FreeBSD) |
| | _ostype=unknown-freebsd |
| | ;; |
| |
|
| | NetBSD) |
| | _ostype=unknown-netbsd |
| | ;; |
| |
|
| | DragonFly) |
| | _ostype=unknown-dragonfly |
| | ;; |
| |
|
| | Darwin) |
| | _ostype=apple-darwin |
| | ;; |
| |
|
| | illumos) |
| | _ostype=unknown-illumos |
| | ;; |
| |
|
| | MINGW* | MSYS* | CYGWIN* | Windows_NT) |
| | _ostype=pc-windows-gnu |
| | ;; |
| |
|
| | *) |
| | err "unrecognized OS type: $_ostype" |
| | ;; |
| |
|
| | esac |
| |
|
| | case "$_cputype" in |
| |
|
| | i386 | i486 | i686 | i786 | x86) |
| | _cputype=i686 |
| | ;; |
| |
|
| | xscale | arm) |
| | _cputype=arm |
| | if [ "$_ostype" = "linux-android" ]; then |
| | _ostype=linux-androideabi |
| | fi |
| | ;; |
| |
|
| | armv6l) |
| | _cputype=arm |
| | if [ "$_ostype" = "linux-android" ]; then |
| | _ostype=linux-androideabi |
| | else |
| | _ostype="${_ostype}eabihf" |
| | fi |
| | ;; |
| |
|
| | armv7l | armv8l) |
| | _cputype=armv7 |
| | if [ "$_ostype" = "linux-android" ]; then |
| | _ostype=linux-androideabi |
| | else |
| | _ostype="${_ostype}eabihf" |
| | fi |
| | ;; |
| |
|
| | aarch64 | arm64) |
| | _cputype=aarch64 |
| | ;; |
| |
|
| | x86_64 | x86-64 | x64 | amd64) |
| | _cputype=x86_64 |
| | ;; |
| |
|
| | mips) |
| | _cputype=$(get_endianness mips '' el) |
| | ;; |
| |
|
| | mips64) |
| | if [ "$_bitness" -eq 64 ]; then |
| | |
| | _ostype="${_ostype}abi64" |
| | _cputype=$(get_endianness mips64 '' el) |
| | fi |
| | ;; |
| |
|
| | ppc) |
| | _cputype=powerpc |
| | ;; |
| |
|
| | ppc64) |
| | _cputype=powerpc64 |
| | ;; |
| |
|
| | ppc64le) |
| | _cputype=powerpc64le |
| | ;; |
| |
|
| | s390x) |
| | _cputype=s390x |
| | ;; |
| | riscv64) |
| | _cputype=riscv64gc |
| | ;; |
| | loongarch64) |
| | _cputype=loongarch64 |
| | ;; |
| | *) |
| | err "unknown CPU type: $_cputype" |
| |
|
| | esac |
| |
|
| | |
| | if [ "${_ostype}" = unknown-linux-gnu ] && [ "${_bitness}" -eq 32 ]; then |
| | case $_cputype in |
| | x86_64) |
| | |
| | if is_host_amd64_elf; then { |
| | err "x32 linux unsupported" |
| | }; else |
| | _cputype=i686 |
| | fi |
| | ;; |
| | mips64) |
| | _cputype=$(get_endianness mips '' el) |
| | ;; |
| | powerpc64) |
| | _cputype=powerpc |
| | ;; |
| | aarch64) |
| | _cputype=armv7 |
| | if [ "$_ostype" = "linux-android" ]; then |
| | _ostype=linux-androideabi |
| | else |
| | _ostype="${_ostype}eabihf" |
| | fi |
| | ;; |
| | riscv64gc) |
| | err "riscv64 with 32-bit userland unsupported" |
| | ;; |
| | esac |
| | fi |
| |
|
| | |
| | if [ "$_ostype" = "unknown-linux-gnueabihf" ] && [ "$_cputype" = armv7 ]; then |
| | if ensure grep '^Features' /proc/cpuinfo | grep -q -v neon; then |
| | |
| | _cputype=arm |
| | fi |
| | fi |
| |
|
| | _arch="${_cputype}-${_ostype}" |
| |
|
| | RETVAL="$_arch" |
| | } |
| |
|
| | say() { |
| | if [ "0" = "$PRINT_QUIET" ]; then |
| | echo "$1" |
| | fi |
| | } |
| |
|
| | say_verbose() { |
| | if [ "1" = "$PRINT_VERBOSE" ]; then |
| | echo "$1" |
| | fi |
| | } |
| |
|
| | err() { |
| | if [ "0" = "$PRINT_QUIET" ]; then |
| | local red |
| | local reset |
| | red=$(tput setaf 1 2>/dev/null || echo '') |
| | reset=$(tput sgr0 2>/dev/null || echo '') |
| | say "${red}ERROR${reset}: $1" >&2 |
| | fi |
| | exit 1 |
| | } |
| |
|
| | need_cmd() { |
| | if ! check_cmd "$1" |
| | then err "need '$1' (command not found)" |
| | fi |
| | } |
| |
|
| | check_cmd() { |
| | command -v "$1" > /dev/null 2>&1 |
| | return $? |
| | } |
| |
|
| | assert_nz() { |
| | if [ -z "$1" ]; then err "assert_nz $2"; fi |
| | } |
| |
|
| | |
| | |
| | |
| | ensure() { |
| | if ! "$@"; then err "command failed: $*"; fi |
| | } |
| |
|
| | |
| | |
| | |
| | ignore() { |
| | "$@" |
| | } |
| |
|
| | |
| | |
| | downloader() { |
| | if check_cmd curl |
| | then _dld=curl |
| | elif check_cmd wget |
| | then _dld=wget |
| | else _dld='curl or wget' |
| | fi |
| |
|
| | if [ "$1" = --check ] |
| | then need_cmd "$_dld" |
| | elif [ "$_dld" = curl ] |
| | then curl -sSfL "$1" -o "$2" |
| | elif [ "$_dld" = wget ] |
| | then wget "$1" -O "$2" |
| | else err "Unknown downloader" |
| | fi |
| | } |
| |
|
| | download_binary_and_run_installer "$@" || exit 1 |
| |
|