| #!/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 |
|
|