2019-03-09 13:00:15 -05:00
#: @hide_from_man_page
2019-01-30 21:32:05 +00:00
#: * `vendor-install` [<target>]
#:
#: Install Homebrew's portable Ruby.
2016-05-03 16:01:42 +08:00
2021-04-23 22:56:08 +09:00
# HOMEBREW_CURLRC, HOMEBREW_LIBRARY, HOMEBREW_STDERR is from the user environment
# HOMEBREW_CACHE, HOMEBREW_CURL, HOMEBREW_LINUX, HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION, HOMEBREW_MACOS, HOMEBREW_MACOS_VERSION_NUMERIC, HOMEBREW_PROCESSOR is set by brew.sh
# shellcheck disable=SC2154
source " ${ HOMEBREW_LIBRARY } /Homebrew/utils/lock.sh "
2016-05-03 16:01:42 +08:00
2021-04-18 17:28:35 +05:30
VENDOR_DIR = " ${ HOMEBREW_LIBRARY } /Homebrew/vendor "
2016-05-03 16:01:42 +08:00
2018-01-14 13:49:26 +00:00
# Built from https://github.com/Homebrew/homebrew-portable-ruby.
2018-10-04 09:31:37 +01:00
#
# Dynamic variables can't be detected by shellcheck
2021-04-18 17:28:35 +05:30
if [ [ -n " ${ HOMEBREW_MACOS } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
if [ [ " ${ HOMEBREW_PROCESSOR } " = "Intel" ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-08 10:03:24 +01:00
ruby_FILENAME = "portable-ruby-2.6.3_2.yosemite.bottle.tar.gz"
2020-06-16 13:53:13 -07:00
ruby_SHA = "b065e5e3783954f3e65d8d3a6377ca51649bfcfa21b356b0dd70490f74c6bd86"
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
elif [ [ -n " ${ HOMEBREW_LINUX } " ] ]
2016-07-14 15:41:09 +08:00
then
2021-04-18 17:28:35 +05:30
case " ${ HOMEBREW_PROCESSOR } " in
2017-11-26 20:13:00 -08:00
x86_64)
2021-04-08 10:03:24 +01:00
ruby_FILENAME = "portable-ruby-2.6.3_2.x86_64_linux.bottle.tar.gz"
2020-06-16 13:53:13 -07:00
ruby_SHA = "97e639a64dcec285392b53ad804b5334c324f1d2a8bdc2b5087b8bf8051e332f"
2018-05-04 08:00:01 -07:00
; ;
2021-04-18 17:28:35 +05:30
*)
2017-11-26 20:13:00 -08:00
esac
2016-05-03 16:01:42 +08:00
fi
2021-04-09 09:17:24 +01:00
# Dynamic variables can't be detected by shellcheck
# shellcheck disable=SC2034
2021-04-18 17:28:35 +05:30
if [ [ -n " ${ ruby_SHA } " && -n " ${ ruby_FILENAME } " ] ]
2021-04-09 09:17:24 +01:00
then
2021-04-18 17:28:35 +05:30
ruby_URL = " https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256: ${ ruby_SHA } "
ruby_URL2 = " https://github.com/Homebrew/homebrew-portable-ruby/releases/download/2.6.3_2/ ${ ruby_FILENAME } "
2021-04-09 09:17:24 +01:00
fi
2020-12-16 17:40:58 -06:00
check_linux_glibc_version( ) {
2021-04-18 17:28:35 +05:30
if [ [ -z ${ HOMEBREW_LINUX } || -z ${ HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION } ] ]
2020-12-16 17:40:58 -06:00
then
return 0
fi
local glibc_version
local glibc_version_major
local glibc_version_minor
local minimum_required_major = ${ HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION %.* }
local minimum_required_minor = ${ HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION #*. }
2020-12-15 06:43:11 -06:00
if [ [ $( /usr/bin/ldd --version) = ~ \ [ 0-9] \. [ 0-9] + ] ]
2020-12-14 16:49:52 -06:00
then
2020-12-16 17:40:58 -06:00
glibc_version = ${ BASH_REMATCH [0]// / }
glibc_version_major = ${ glibc_version %.* }
glibc_version_minor = ${ glibc_version #*. }
if ( ( glibc_version_major < minimum_required_major || glibc_version_minor < minimum_required_minor ) )
2020-12-14 16:49:52 -06:00
then
2021-04-18 17:28:35 +05:30
odie " Vendored tools require system Glibc ${ HOMEBREW_LINUX_MINIMUM_GLIBC_VERSION } or later (yours is ${ glibc_version } ). "
2020-12-14 16:49:52 -06:00
fi
else
2020-12-15 06:43:11 -06:00
odie "Failed to detect system Glibc version."
2020-12-14 16:49:52 -06:00
fi
2020-12-15 06:43:11 -06:00
}
2020-12-14 16:49:52 -06:00
2017-11-16 10:27:35 -08:00
# Execute the specified command, and suppress stderr unless HOMEBREW_STDERR is set.
quiet_stderr( ) {
2021-04-18 17:28:35 +05:30
if [ [ -z " ${ HOMEBREW_STDERR } " ] ] ; then
2017-11-16 10:27:35 -08:00
command " $@ " 2>/dev/null
else
command " $@ "
fi
}
2016-05-03 16:01:42 +08:00
fetch( ) {
local -a curl_args
local sha
local temporary_path
2018-04-08 15:51:58 -07:00
curl_args = ( )
# do not load .curlrc unless requested (must be the first argument)
2021-04-18 17:28:35 +05:30
if [ [ -z " ${ HOMEBREW_CURLRC } " ] ]
2018-04-08 15:51:58 -07:00
then
curl_args[ ${# curl_args [*] } ] = "-q"
fi
2021-04-08 10:03:24 +01:00
# Authorization is needed for GitHub Packages but harmless on Bintray/GitHub Releases
2018-04-08 15:51:58 -07:00
curl_args += (
2016-08-07 12:51:46 +02:00
--fail
--remote-time
--location
2021-04-18 17:28:35 +05:30
--user-agent " ${ HOMEBREW_USER_AGENT_CURL } "
2021-04-08 10:03:24 +01:00
--header "Authorization: Bearer QQ=="
2016-05-03 16:01:42 +08:00
)
2021-04-18 17:28:35 +05:30
if [ [ -n " ${ HOMEBREW_QUIET } " ] ]
2016-05-03 16:01:42 +08:00
then
2017-05-11 08:58:40 -07:00
curl_args[ ${# curl_args [*] } ] = "--silent"
2021-04-18 17:28:35 +05:30
elif [ [ -z " ${ HOMEBREW_VERBOSE } " ] ]
2016-05-03 16:01:42 +08:00
then
2017-05-11 08:58:40 -07:00
curl_args[ ${# curl_args [*] } ] = "--progress-bar"
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
if [ [ " ${ HOMEBREW_MACOS_VERSION_NUMERIC } " -lt "100600" ] ]
2017-09-25 19:15:58 +01:00
then
curl_args[ ${# curl_args [*] } ] = "--insecure"
fi
2021-04-18 17:28:35 +05:30
temporary_path = " ${ CACHED_LOCATION } .incomplete "
2016-05-03 16:01:42 +08:00
2021-04-18 17:28:35 +05:30
mkdir -p " ${ HOMEBREW_CACHE } "
[ [ -n " ${ HOMEBREW_QUIET } " ] ] || ohai " Downloading ${ VENDOR_URL } " >& 2
if [ [ -f " ${ CACHED_LOCATION } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
[ [ -n " ${ HOMEBREW_QUIET } " ] ] || echo " Already downloaded: ${ CACHED_LOCATION } " >& 2
2016-05-03 16:01:42 +08:00
else
2021-04-18 17:28:35 +05:30
if [ [ -f " ${ temporary_path } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-22 13:18:44 +01:00
# HOMEBREW_CURL is set by brew.sh (and isn't mispelt here)
2021-04-23 22:56:08 +09:00
" ${ HOMEBREW_CURL } " " ${ curl_args [@] } " -C - " ${ VENDOR_URL } " -o " ${ temporary_path } "
2016-05-03 16:01:42 +08:00
if [ [ $? -eq 33 ] ]
then
2021-04-18 17:28:35 +05:30
[ [ -n " ${ HOMEBREW_QUIET } " ] ] || echo "Trying a full download" >& 2
rm -f " ${ temporary_path } "
" ${ HOMEBREW_CURL } " " ${ curl_args [@] } " " ${ VENDOR_URL } " -o " ${ temporary_path } "
2016-05-03 16:01:42 +08:00
fi
else
2021-04-18 17:28:35 +05:30
" ${ HOMEBREW_CURL } " " ${ curl_args [@] } " " ${ VENDOR_URL } " -o " ${ temporary_path } "
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
if [ [ ! -f " ${ temporary_path } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
[ [ -n " ${ HOMEBREW_QUIET } " ] ] || ohai " Downloading ${ VENDOR_URL2 } " >& 2
" ${ HOMEBREW_CURL } " " ${ curl_args [@] } " " ${ VENDOR_URL2 } " -o " ${ temporary_path } "
2018-01-14 13:49:26 +00:00
fi
2021-04-18 17:28:35 +05:30
if [ [ ! -f " ${ temporary_path } " ] ]
2018-01-14 13:49:26 +00:00
then
odie <<EOS
2021-04-18 17:28:35 +05:30
Failed to download ${ VENDOR_URL } and ${ VENDOR_URL2 } !
2018-01-14 13:49:26 +00:00
2021-01-26 15:21:24 -05:00
Do not file an issue on GitHub about this; you will need to figure out for
2018-01-14 13:49:26 +00:00
yourself what issue with your internet connection restricts your access to
both Bintray ( used for Homebrew bottles/binary packages) and GitHub
( used for Homebrew updates) .
EOS
2016-05-03 16:01:42 +08:00
fi
trap '' SIGINT
2021-04-18 17:28:35 +05:30
mv " ${ temporary_path } " " ${ CACHED_LOCATION } "
2016-05-03 16:01:42 +08:00
trap - SIGINT
fi
2017-10-17 20:51:32 +01:00
if [ [ -x "/usr/bin/shasum" ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
sha = " $( /usr/bin/shasum -a 256 " ${ CACHED_LOCATION } " | cut -d' ' -f1) "
2018-03-17 23:02:05 -07:00
elif [ [ -x " $( type -P sha256sum) " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
sha = " $( sha256sum " ${ CACHED_LOCATION } " | cut -d' ' -f1) "
2018-03-17 23:02:05 -07:00
elif [ [ -x " $( type -P ruby) " ] ]
2017-05-29 21:48:12 -07:00
then
sha = " $( ruby <<EOSCRIPT
require 'digest/sha2'
digest = Digest::SHA256.new
2021-04-18 17:28:35 +05:30
File.open( '${CACHED_LOCATION}' , 'rb' ) { | f| digest.update( f.read) }
2017-05-29 21:48:12 -07:00
puts digest.hexdigest
EOSCRIPT
) "
2016-05-03 16:01:42 +08:00
else
2020-05-02 13:53:45 +01:00
odie "Cannot verify checksum ('shasum' or 'sha256sum' not found)!"
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
if [ [ " ${ sha } " != " ${ VENDOR_SHA } " ] ]
2016-05-03 16:01:42 +08:00
then
odie <<EOS
Checksum mismatch.
2021-04-18 17:28:35 +05:30
Expected: ${ VENDOR_SHA }
Actual: ${ sha }
Archive: ${ CACHED_LOCATION }
2016-05-03 16:01:42 +08:00
To retry an incomplete download, remove the file above.
EOS
fi
}
install( ) {
local tar_args
2021-04-18 17:28:35 +05:30
if [ [ -n " ${ HOMEBREW_VERBOSE } " ] ]
2016-05-03 16:01:42 +08:00
then
tar_args = "xvzf"
else
tar_args = "xzf"
fi
2021-04-18 17:28:35 +05:30
mkdir -p " ${ VENDOR_DIR } /portable- ${ VENDOR_NAME } "
safe_cd " ${ VENDOR_DIR } /portable- ${ VENDOR_NAME } "
2016-05-03 16:01:42 +08:00
trap '' SIGINT
2021-04-18 17:28:35 +05:30
if [ [ -d " ${ VENDOR_VERSION } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
mv " ${ VENDOR_VERSION } " " ${ VENDOR_VERSION } .reinstall "
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
safe_cd " ${ VENDOR_DIR } "
[ [ -n " ${ HOMEBREW_QUIET } " ] ] || ohai " Pouring ${ VENDOR_FILENAME } " >& 2
tar " ${ tar_args } " " ${ CACHED_LOCATION } "
safe_cd " ${ VENDOR_DIR } /portable- ${ VENDOR_NAME } "
2016-05-03 16:01:42 +08:00
2021-04-18 17:28:35 +05:30
if quiet_stderr " ./ ${ VENDOR_VERSION } /bin/ ${ VENDOR_NAME } " --version >/dev/null
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
ln -sfn " ${ VENDOR_VERSION } " current
if [ [ -d " ${ VENDOR_VERSION } .reinstall " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
rm -rf " ${ VENDOR_VERSION } .reinstall "
2016-05-03 16:01:42 +08:00
fi
else
2021-04-18 17:28:35 +05:30
rm -rf " ${ VENDOR_VERSION } "
if [ [ -d " ${ VENDOR_VERSION } .reinstall " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
mv " ${ VENDOR_VERSION } .reinstall " " ${ VENDOR_VERSION } "
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
odie " Failed to install ${ VENDOR_NAME } ${ VENDOR_VERSION } ! "
2016-05-03 16:01:42 +08:00
fi
trap - SIGINT
}
homebrew-vendor-install( ) {
local option
local url_var
local sha_var
for option in " $@ "
do
2021-04-18 17:28:35 +05:30
case " ${ option } " in
2016-05-03 16:01:42 +08:00
-\? | -h| --help| --usage) brew help vendor-install; exit $? ; ;
2016-08-07 12:51:46 +02:00
--verbose) HOMEBREW_VERBOSE = 1 ; ;
--quiet) HOMEBREW_QUIET = 1 ; ;
--debug) HOMEBREW_DEBUG = 1 ; ;
--*) ; ;
2016-05-03 16:01:42 +08:00
-*)
2021-04-18 17:28:35 +05:30
[ [ " ${ option } " = *v* ] ] && HOMEBREW_VERBOSE = 1
[ [ " ${ option } " = *q* ] ] && HOMEBREW_QUIET = 1
[ [ " ${ option } " = *d* ] ] && HOMEBREW_DEBUG = 1
2016-05-03 16:01:42 +08:00
; ;
*)
2021-04-18 17:28:35 +05:30
[ [ -n " ${ VENDOR_NAME } " ] ] && odie "This command does not take multiple vendor targets!"
VENDOR_NAME = " ${ option } "
2016-05-03 16:01:42 +08:00
; ;
esac
done
2021-04-18 17:28:35 +05:30
[ [ -z " ${ VENDOR_NAME } " ] ] && odie "This command requires a vendor target!"
[ [ -n " ${ HOMEBREW_DEBUG } " ] ] && set -x
2020-12-16 17:40:58 -06:00
check_linux_glibc_version
2016-05-03 16:01:42 +08:00
2021-04-08 10:03:24 +01:00
filename_var = " ${ VENDOR_NAME } _FILENAME "
sha_var = " ${ VENDOR_NAME } _SHA "
2016-05-03 16:01:42 +08:00
url_var = " ${ VENDOR_NAME } _URL "
2018-01-14 13:49:26 +00:00
url2_var = " ${ VENDOR_NAME } _URL2 "
2021-04-08 10:03:24 +01:00
VENDOR_FILENAME = " ${ !filename_var } "
VENDOR_SHA = " ${ !sha_var } "
2016-05-03 16:01:42 +08:00
VENDOR_URL = " ${ !url_var } "
2018-01-14 13:49:26 +00:00
VENDOR_URL2 = " ${ !url2_var } "
2021-04-18 17:28:35 +05:30
VENDOR_VERSION = " $( <" ${ VENDOR_DIR } /portable- ${ VENDOR_NAME } -version " ) "
2016-05-03 16:01:42 +08:00
2021-04-18 17:28:35 +05:30
if [ [ -z " ${ VENDOR_URL } " || -z " ${ VENDOR_SHA } " ] ]
2016-05-03 16:01:42 +08:00
then
2021-04-18 17:28:35 +05:30
odie " No Homebrew ${ VENDOR_NAME } ${ VENDOR_VERSION } available for ${ HOMEBREW_PROCESSOR } processors! "
2016-05-03 16:01:42 +08:00
fi
2021-04-18 17:28:35 +05:30
CACHED_LOCATION = " ${ HOMEBREW_CACHE } / ${ VENDOR_FILENAME } "
2016-05-03 16:01:42 +08:00
2021-04-18 17:28:35 +05:30
lock " vendor-install- ${ VENDOR_NAME } "
2016-05-03 16:01:42 +08:00
fetch
install
}