# 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; a Cellar in HOMEBREW_PREFIX (often /usr/local # for bottles) unless there's already a Cellar in HOMEBREW_REPOSITORY. if [[ -d "$HOMEBREW_REPOSITORY/Cellar" ]] then HOMEBREW_CELLAR="$HOMEBREW_REPOSITORY/Cellar" else HOMEBREW_CELLAR="$HOMEBREW_PREFIX/Cellar" fi case "$*" in --prefix) echo "$HOMEBREW_PREFIX"; exit 0 ;; --cellar) echo "$HOMEBREW_CELLAR"; exit 0 ;; --repository|--repo) echo "$HOMEBREW_REPOSITORY"; exit 0 ;; esac # A depth of 1 means this command was directly invoked by a user. # Higher depths mean this command was invoked by another Homebrew command. export HOMEBREW_COMMAND_DEPTH=$((HOMEBREW_COMMAND_DEPTH + 1)) onoe() { 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 cat >&2 else echo "$*" >&2 fi } odie() { onoe "$@" exit 1 } safe_cd() { cd "$@" >/dev/null || odie "Error: failed to cd to $*!" } brew() { "$HOMEBREW_BREW_FILE" "$@" } git() { "$HOMEBREW_LIBRARY/Homebrew/shims/scm/git" "$@" } HOMEBREW_VERSION="$(git -C "$HOMEBREW_REPOSITORY" describe --tags --dirty --abbrev=7 2>/dev/null)" HOMEBREW_USER_AGENT_VERSION="$HOMEBREW_VERSION" if [[ -z "$HOMEBREW_VERSION" ]] then HOMEBREW_VERSION=">=1.4.0 (shallow or no git repository)" HOMEBREW_USER_AGENT_VERSION="1.X.Y" fi 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 HOMEBREW_SYSTEM="$(uname -s)" case "$HOMEBREW_SYSTEM" in Darwin) HOMEBREW_MACOS="1" ;; Linux) HOMEBREW_LINUX="1" ;; esac if [[ -n "$HOMEBREW_MACOS" ]] then HOMEBREW_PROCESSOR="$(uname -p)" HOMEBREW_PRODUCT="Homebrew" HOMEBREW_SYSTEM="Macintosh" # This is i386 even on x86_64 machines [[ "$HOMEBREW_PROCESSOR" = "i386" ]] && HOMEBREW_PROCESSOR="Intel" HOMEBREW_MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)" HOMEBREW_OS_VERSION="macOS $HOMEBREW_MACOS_VERSION" # Don't change this from Mac OS X to match what macOS itself does in Safari on 10.12 HOMEBREW_OS_USER_AGENT_VERSION="Mac OS X $HOMEBREW_MACOS_VERSION" # The system Curl is too old for some modern HTTPS certificates on # older macOS versions. printf -v HOMEBREW_MACOS_VERSION_NUMERIC "%02d%02d%02d" ${HOMEBREW_MACOS_VERSION//./ } if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101000" ]] then HOMEBREW_SYSTEM_CURL_TOO_OLD="1" HOMEBREW_FORCE_BREWED_CURL="1" fi # The system Git is too old for some GitHub's SSL ciphers on older # macOS versions. # https://github.com/blog/2507-weak-cryptographic-standards-removed if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "100900" ]] then HOMEBREW_FORCE_BREWED_GIT="1" fi if [[ -z "$HOMEBREW_CACHE" ]] then HOMEBREW_CACHE="$HOME/Library/Caches/Homebrew" fi else HOMEBREW_PROCESSOR="$(uname -m)" HOMEBREW_PRODUCT="${HOMEBREW_SYSTEM}brew" [[ -n "$HOMEBREW_LINUX" ]] && HOMEBREW_OS_VERSION="$(lsb_release -sd 2>/dev/null)" : "${HOMEBREW_OS_VERSION:=$(uname -r)}" HOMEBREW_OS_USER_AGENT_VERSION="$HOMEBREW_OS_VERSION" if [[ -z "$HOMEBREW_CACHE" ]] then if [[ -n "$XDG_CACHE_HOME" ]] then HOMEBREW_CACHE="$XDG_CACHE_HOME/Homebrew" else HOMEBREW_CACHE="$HOME/.cache/Homebrew" fi fi fi if [[ -n "$HOMEBREW_FORCE_BREWED_CURL" && -x "$HOMEBREW_PREFIX/opt/curl/bin/curl" ]] && "$HOMEBREW_PREFIX/opt/curl/bin/curl" --version >/dev/null then HOMEBREW_CURL="$HOMEBREW_PREFIX/opt/curl/bin/curl" else HOMEBREW_CURL="curl" fi if [[ -n "$HOMEBREW_FORCE_BREWED_GIT" && -x "$HOMEBREW_PREFIX/opt/git/bin/git" ]] && "$HOMEBREW_PREFIX/opt/git/bin/git" --version >/dev/null then HOMEBREW_GIT="$HOMEBREW_PREFIX/opt/git/bin/git" else HOMEBREW_GIT="git" fi HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_USER_AGENT_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_USER_AGENT_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_CACHE export HOMEBREW_CELLAR export HOMEBREW_SYSTEM export HOMEBREW_CURL export HOMEBREW_PROCESSOR export HOMEBREW_PRODUCT export HOMEBREW_OS_VERSION export HOMEBREW_MACOS_VERSION export HOMEBREW_USER_AGENT export HOMEBREW_USER_AGENT_CURL if [[ -n "$HOMEBREW_MACOS" && -x "/usr/bin/xcode-select" ]] then XCODE_SELECT_PATH=$('/usr/bin/xcode-select' --print-path 2>/dev/null) if [[ "$XCODE_SELECT_PATH" = "/" ]] then odie </dev/null)" if [[ "$HOMEBREW_GIT_CONFIG_DEVELOPERMODE" = "true" ]] then export HOMEBREW_DEV_CMD_RUN="1" fi # Don't allow non-developers to customise Ruby warnings. unset HOMEBREW_RUBY_WARNINGS fi if [[ -z "$HOMEBREW_RUBY_WARNINGS" ]] then export HOMEBREW_RUBY_WARNINGS="-W0" fi export HOMEBREW_BOTTLE_DEFAULT_DOMAIN="https://homebrew.bintray.com" if [[ -z "$HOMEBREW_BOTTLE_DOMAIN" ]] then export HOMEBREW_BOTTLE_DOMAIN="$HOMEBREW_BOTTLE_DEFAULT_DOMAIN" fi if [[ -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh" ]] then HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh" elif [[ -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]] then if [[ -z "$HOMEBREW_DEVELOPER" ]] then git config --file="$HOMEBREW_GIT_CONFIG_FILE" --replace-all homebrew.devcmdrun true 2>/dev/null export HOMEBREW_DEV_CMD_RUN="1" fi HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" fi check-run-command-as-root() { [[ "$(id -u)" = 0 ]] || return # Homebrew Services may need `sudo` for system-wide daemons. [[ "$HOMEBREW_COMMAND" = "services" ]] && return # It's fine to run this as root as it's not changing anything. [[ "$HOMEBREW_COMMAND" = "--prefix" ]] && return odie <&2 <&2 } update-preinstall() { [[ -z "$HOMEBREW_HELP" ]] || return [[ -z "$HOMEBREW_NO_AUTO_UPDATE" ]] || return [[ -z "$HOMEBREW_AUTO_UPDATE_CHECKED" ]] || return [[ -z "$HOMEBREW_UPDATE_PREINSTALL" ]] || return if [[ "$HOMEBREW_COMMAND" = "install" || "$HOMEBREW_COMMAND" = "upgrade" || "$HOMEBREW_COMMAND" = "tap" || "$HOMEBREW_CASK_COMMAND" = "install" || "$HOMEBREW_CASK_COMMAND" = "upgrade" ]] then if [[ -z "$HOMEBREW_VERBOSE" ]] then update-preinstall-timer & timer_pid=$! fi # Allow auto-update migration now we have a fix in place (below in this function). export HOMEBREW_ENABLE_AUTO_UPDATE_MIGRATION="1" brew update --preinstall if [[ -n "$timer_pid" ]] then kill "$timer_pid" 2>/dev/null wait "$timer_pid" 2>/dev/null fi fi # If brew update --preinstall did a migration then export the new locations. if [[ "$HOMEBREW_REPOSITORY" = "/usr/local" && ! -d "$HOMEBREW_REPOSITORY/.git" && -d "/usr/local/Homebrew/.git" ]] then HOMEBREW_REPOSITORY="/usr/local/Homebrew" HOMEBREW_LIBRARY="$HOMEBREW_REPOSITORY/Library" export HOMEBREW_REPOSITORY export HOMEBREW_LIBRARY fi # If we've checked for updates, we don't need to check again. export HOMEBREW_AUTO_UPDATE_CHECKED="1" } 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" { update-preinstall; "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; } else # Hide shellcheck complaint: # shellcheck source=/dev/null source "$HOMEBREW_LIBRARY/Homebrew/utils/ruby.sh" setup-ruby-path # Unshift command back into argument list (unless argument list was empty). [[ "$HOMEBREW_ARG_COUNT" -gt 0 ]] && set -- "$HOMEBREW_COMMAND" "$@" { update-preinstall; exec "$HOMEBREW_RUBY_PATH" $HOMEBREW_RUBY_WARNINGS "$HOMEBREW_LIBRARY/Homebrew/brew.rb" "$@"; } fi