HOMEBREW_VERSION="0.9.9" odie() { if [[ -t 2 ]] # check whether stderr is a tty. then echo -ne "\033[4;31mError\033[0m: " >&2 # highlight Error with underline and red color else echo -n "Error: " >&2 fi if [[ $# -eq 0 ]] then /bin/cat >&2 else echo "$*" >&2 fi exit 1 } chdir() { cd "$@" >/dev/null || odie "Error: failed to cd to $*!" } # Force UTF-8 to avoid encoding issues for users with broken locale settings. if [[ "$(locale charmap 2> /dev/null)" != "UTF-8" ]] then export LC_ALL="en_US.UTF-8" fi # Where we store built products; /usr/local/Cellar if it exists, # otherwise a Cellar relative to the Repository. if [[ -d "$HOMEBREW_PREFIX/Cellar" ]] then HOMEBREW_CELLAR="$HOMEBREW_PREFIX/Cellar" else HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar" fi case "$*" in --prefix) echo "$HOMEBREW_PREFIX"; exit 0 ;; --cellar) echo "$HOMEBREW_CELLAR"; exit 0 ;; --repository|--repo) echo "$HOMEBREW_REPOSITORY"; exit 0 ;; esac if [[ "$HOMEBREW_PREFIX" = "/" || "$HOMEBREW_PREFIX" = "/usr" ]] then # it may work, but I only see pain this route and don't want to support it odie "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX" fi # Users may have these set, pointing the system Ruby # at non-system gem paths unset GEM_HOME unset GEM_PATH if [[ -z "$HOMEBREW_DEVELOPER" ]] then unset HOMEBREW_RUBY_PATH fi HOMEBREW_SYSTEM="$(uname -s)" case "$HOMEBREW_SYSTEM" in Darwin) HOMEBREW_OSX="1";; Linux) HOMEBREW_LINUX="1";; esac if [[ -z "$HOMEBREW_RUBY_PATH" ]] then if [[ -n "$HOMEBREW_OSX" ]] then HOMEBREW_RUBY_PATH="/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby" else HOMEBREW_RUBY_PATH="$(which ruby)" fi fi HOMEBREW_CURL="/usr/bin/curl" HOMEBREW_PROCESSOR="$(uname -p)" if [[ -n "$HOMEBREW_OSX" ]] then HOMEBREW_PRODUCT="Homebrew" HOMEBREW_SYSTEM="Macintosh" # This is i386 even on x86_64 machines [[ "$HOMEBREW_PROCESSOR" = "i386" ]] && HOMEBREW_PROCESSOR="Intel" HOMEBREW_OSX_VERSION="$(/usr/bin/sw_vers -productVersion)" HOMEBREW_OS_VERSION="Mac OS X $HOMEBREW_OSX_VERSION" printf -v HOMEBREW_OSX_VERSION_NUMERIC "%02d%02d%02d" ${HOMEBREW_OSX_VERSION//./ } if [[ "$HOMEBREW_OSX_VERSION_NUMERIC" -lt "100900" && -x "$HOMEBREW_PREFIX/opt/curl/bin/curl" ]] then HOMEBREW_CURL="$HOMEBREW_PREFIX/opt/curl/bin/curl" fi else HOMEBREW_PRODUCT="${HOMEBREW_SYSTEM}brew" [[ -n "$HOMEBREW_LINUX" ]] && HOMEBREW_OS_VERSION="$(lsb_release -sd 2>/dev/null)" HOMEBREW_OS_VERSION="${HOMEBREW_PRODUCT:=$(uname -r)}" fi HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_VERSION)" HOMEBREW_CURL_VERSION="$("$HOMEBREW_CURL" --version 2>/dev/null | head -n1 | awk '{print $1"/"$2}')" HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT $HOMEBREW_CURL_VERSION" # Declared in bin/brew export HOMEBREW_BREW_FILE export HOMEBREW_PREFIX export HOMEBREW_REPOSITORY export HOMEBREW_LIBRARY # Declared in brew.sh export HOMEBREW_VERSION export HOMEBREW_CELLAR export HOMEBREW_RUBY_PATH export HOMEBREW_CURL export HOMEBREW_OS_VERSION export HOMEBREW_OSX_VERSION export HOMEBREW_USER_AGENT export HOMEBREW_USER_AGENT_CURL if [[ -n "$HOMEBREW_OSX" ]] then if [[ "$('/usr/bin/xcode-select' --print-path)" = "/" ]] then odie < "$HOMEBREW_ANALYTICS_USER_UUID_FILE" fi export HOMEBREW_ANALYTICS_ID="UA-75654628-1" export HOMEBREW_ANALYTICS_USER_UUID # Send the to-be-executed command as an "App Screen View". Anonymise the IP # address (aip=1) and don't send or store any personally identifiable # information. # https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#screenView # https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters "$HOMEBREW_CURL" https://www.google-analytics.com/collect -d v=1 \ --silent --max-time 3 --output /dev/null \ --user-agent "$HOMEBREW_USER_AGENT_CURL" \ -d tid="$HOMEBREW_ANALYTICS_ID" \ -d cid="$HOMEBREW_ANALYTICS_USER_UUID" \ -d aip=1 \ -d an=Homebrew \ -d av="$HOMEBREW_VERSION" \ -d t=screenview \ -d cd="$HOMEBREW_COMMAND" \ &> /dev/null \ & disown fi if [[ -n "$HOMEBREW_BASH_COMMAND" ]] then # source rather than executing directly to ensure the entire file is read into # memory before it is run. This makes running a Bash script behave more like # a Ruby script and avoids hard-to-debug issues if the Bash script is updated # at the same time as being run. # # Hide shellcheck complaint: # shellcheck source=/dev/null source "$HOMEBREW_BASH_COMMAND" { "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; } else # Unshift command back into argument list (unless argument list was empty). [[ "$HOMEBREW_ARG_COUNT" -gt 0 ]] && set -- "$HOMEBREW_COMMAND" "$@" exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/brew.rb" "$@" fi