2017-07-25 06:54:40 -07:00
|
|
|
# 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
|
|
|
|
|
2016-10-01 15:18:09 +01:00
|
|
|
# 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))
|
|
|
|
|
2016-05-03 14:24:41 +01:00
|
|
|
onoe() {
|
2016-02-16 09:29:03 +00:00
|
|
|
if [[ -t 2 ]] # check whether stderr is a tty.
|
|
|
|
then
|
2018-10-04 09:31:37 +01:00
|
|
|
echo -ne "\\033[4;31mError\\033[0m: " >&2 # highlight Error with underline and red color
|
2016-02-16 09:29:03 +00:00
|
|
|
else
|
|
|
|
echo -n "Error: " >&2
|
|
|
|
fi
|
|
|
|
if [[ $# -eq 0 ]]
|
|
|
|
then
|
2018-03-17 17:05:39 -07:00
|
|
|
cat >&2
|
2016-02-16 09:29:03 +00:00
|
|
|
else
|
|
|
|
echo "$*" >&2
|
|
|
|
fi
|
2016-05-03 14:24:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
odie() {
|
|
|
|
onoe "$@"
|
2016-02-16 09:29:03 +00:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2016-06-28 21:35:49 +02:00
|
|
|
safe_cd() {
|
2016-02-16 09:29:03 +00:00
|
|
|
cd "$@" >/dev/null || odie "Error: failed to cd to $*!"
|
|
|
|
}
|
|
|
|
|
2016-05-03 16:14:15 +08:00
|
|
|
brew() {
|
|
|
|
"$HOMEBREW_BREW_FILE" "$@"
|
|
|
|
}
|
|
|
|
|
2016-05-13 14:40:14 +08:00
|
|
|
git() {
|
2016-07-15 19:03:45 +01:00
|
|
|
"$HOMEBREW_LIBRARY/Homebrew/shims/scm/git" "$@"
|
2016-05-13 14:40:14 +08:00
|
|
|
}
|
|
|
|
|
2018-10-26 17:08:59 -04:00
|
|
|
numeric() {
|
|
|
|
# Condense the exploded argument into a single return value.
|
|
|
|
# shellcheck disable=SC2086,SC2183
|
2019-01-29 04:10:16 -05:00
|
|
|
printf "%01d%02d%02d%02d" ${1//[.rc]/ }
|
2018-10-26 17:08:59 -04:00
|
|
|
}
|
|
|
|
|
2017-12-20 16:15:19 -08:00
|
|
|
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
|
2018-08-11 00:21:32 +02:00
|
|
|
HOMEBREW_VERSION=">=1.7.1 (shallow or no git repository)"
|
2017-12-20 16:15:19 -08:00
|
|
|
HOMEBREW_USER_AGENT_VERSION="1.X.Y"
|
|
|
|
fi
|
|
|
|
|
2016-02-16 09:29:03 +00:00
|
|
|
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
|
|
|
|
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_SYSTEM="$(uname -s)"
|
2016-04-06 01:31:03 +02:00
|
|
|
case "$HOMEBREW_SYSTEM" in
|
2016-09-18 19:57:19 +01:00
|
|
|
Darwin) HOMEBREW_MACOS="1" ;;
|
2016-08-07 11:56:51 +02:00
|
|
|
Linux) HOMEBREW_LINUX="1" ;;
|
2016-04-06 01:31:03 +02:00
|
|
|
esac
|
2016-02-16 09:29:03 +00:00
|
|
|
|
2016-09-18 19:57:19 +01:00
|
|
|
if [[ -n "$HOMEBREW_MACOS" ]]
|
2016-04-04 11:46:33 +01:00
|
|
|
then
|
2016-04-06 12:24:33 +02:00
|
|
|
HOMEBREW_PROCESSOR="$(uname -p)"
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_PRODUCT="Homebrew"
|
|
|
|
HOMEBREW_SYSTEM="Macintosh"
|
|
|
|
# This is i386 even on x86_64 machines
|
|
|
|
[[ "$HOMEBREW_PROCESSOR" = "i386" ]] && HOMEBREW_PROCESSOR="Intel"
|
2016-09-18 19:57:19 +01:00
|
|
|
HOMEBREW_MACOS_VERSION="$(/usr/bin/sw_vers -productVersion)"
|
2017-04-27 08:53:57 +01:00
|
|
|
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"
|
2016-04-04 11:46:33 +01:00
|
|
|
|
2018-10-04 09:31:37 +01:00
|
|
|
# Intentionally set this variable by exploding another.
|
|
|
|
# shellcheck disable=SC2086,SC2183
|
2016-09-18 19:57:19 +01:00
|
|
|
printf -v HOMEBREW_MACOS_VERSION_NUMERIC "%02d%02d%02d" ${HOMEBREW_MACOS_VERSION//./ }
|
2017-09-16 12:41:08 +01:00
|
|
|
|
2019-01-26 17:13:14 +00:00
|
|
|
# Refuse to run on pre-Mavericks
|
2019-01-08 19:13:46 +00:00
|
|
|
if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "100900" ]]
|
|
|
|
then
|
2019-01-26 17:13:14 +00:00
|
|
|
printf "ERROR: Your version of macOS (%s) is too old to run Homebrew!" "$HOMEBREW_MACOS_VERSION" >&2
|
2019-01-08 19:13:46 +00:00
|
|
|
if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "100700" ]]
|
|
|
|
then
|
|
|
|
printf " For 10.4 - 10.6 support see: https://github.com/mistydemeo/tigerbrew\n" >&2
|
|
|
|
fi
|
|
|
|
printf "\n" >&2
|
|
|
|
fi
|
|
|
|
|
2019-01-26 17:13:14 +00:00
|
|
|
# The system Curl is too old for some modern HTTPS certificates on
|
|
|
|
# older macOS versions.
|
|
|
|
#
|
|
|
|
if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101000" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_SYSTEM_CURL_TOO_OLD="1"
|
|
|
|
HOMEBREW_FORCE_BREWED_CURL="1"
|
|
|
|
fi
|
|
|
|
|
2018-10-27 20:44:13 -04:00
|
|
|
# The system Git on macOS versions before Sierra is too old for some Homebrew functionality we rely on.
|
|
|
|
HOMEBREW_MINIMUM_GIT_VERSION="2.14.3"
|
2018-09-06 12:38:20 +01:00
|
|
|
if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101200" ]]
|
2018-02-26 16:08:10 +00:00
|
|
|
then
|
2018-06-25 23:36:12 -07:00
|
|
|
HOMEBREW_FORCE_BREWED_GIT="1"
|
2018-02-26 16:08:10 +00:00
|
|
|
fi
|
|
|
|
|
2018-07-01 19:19:55 -04:00
|
|
|
HOMEBREW_CACHE="${HOMEBREW_CACHE:-${HOME}/Library/Caches/Homebrew}"
|
2018-12-26 17:03:31 -08:00
|
|
|
HOMEBREW_LOGS="${HOMEBREW_LOGS:-${HOME}/Library/Logs/Homebrew}"
|
2018-07-03 15:41:33 +01:00
|
|
|
HOMEBREW_SYSTEM_TEMP="/private/tmp"
|
2016-04-04 11:46:33 +01:00
|
|
|
else
|
2016-04-06 12:24:33 +02:00
|
|
|
HOMEBREW_PROCESSOR="$(uname -m)"
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_PRODUCT="${HOMEBREW_SYSTEM}brew"
|
|
|
|
[[ -n "$HOMEBREW_LINUX" ]] && HOMEBREW_OS_VERSION="$(lsb_release -sd 2>/dev/null)"
|
2016-04-06 01:45:02 +02:00
|
|
|
: "${HOMEBREW_OS_VERSION:=$(uname -r)}"
|
2017-04-27 08:53:57 +01:00
|
|
|
HOMEBREW_OS_USER_AGENT_VERSION="$HOMEBREW_OS_VERSION"
|
2018-02-15 11:43:20 -06:00
|
|
|
|
2018-10-26 17:08:59 -04:00
|
|
|
# Ensure the system Curl is a version that supports modern HTTPS certificates.
|
|
|
|
HOMEBREW_MINIMUM_CURL_VERSION="7.41.0"
|
|
|
|
system_curl_version_output="$($(command -v curl) --version 2>/dev/null)"
|
|
|
|
system_curl_name_and_version="${system_curl_version_output%% (*}"
|
|
|
|
if [[ $(numeric "${system_curl_name_and_version##* }") -lt $(numeric "$HOMEBREW_MINIMUM_CURL_VERSION") ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_SYSTEM_CURL_TOO_OLD="1"
|
|
|
|
HOMEBREW_FORCE_BREWED_CURL="1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Ensure the system Git is at or newer than the minimum required version.
|
|
|
|
# Git 2.7.4 is the version of git on Ubuntu 16.04 LTS (Xenial Xerus).
|
|
|
|
HOMEBREW_MINIMUM_GIT_VERSION="2.7.0"
|
|
|
|
system_git_version_output="$($(command -v git) --version 2>/dev/null)"
|
|
|
|
if [[ $(numeric "${system_git_version_output##* }") -lt $(numeric "$HOMEBREW_MINIMUM_GIT_VERSION") ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_FORCE_BREWED_GIT="1"
|
|
|
|
fi
|
|
|
|
|
2018-07-02 19:34:19 -04:00
|
|
|
CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}"
|
|
|
|
HOMEBREW_CACHE="${HOMEBREW_CACHE:-${CACHE_HOME}/Homebrew}"
|
2018-12-26 17:03:31 -08:00
|
|
|
HOMEBREW_LOGS="${HOMEBREW_LOGS:-${CACHE_HOME}/Homebrew/Logs}"
|
2018-07-03 15:41:33 +01:00
|
|
|
HOMEBREW_SYSTEM_TEMP="/tmp"
|
2016-04-04 11:46:33 +01:00
|
|
|
fi
|
2018-02-15 13:26:17 -06:00
|
|
|
|
2018-10-20 13:58:27 +01:00
|
|
|
if [[ -n "$HOMEBREW_MACOS" || -n "$HOMEBREW_FORCE_HOMEBREW_ON_LINUX" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_BOTTLE_DEFAULT_DOMAIN="https://homebrew.bintray.com"
|
|
|
|
else
|
|
|
|
HOMEBREW_BOTTLE_DEFAULT_DOMAIN="https://linuxbrew.bintray.com"
|
|
|
|
fi
|
|
|
|
|
2018-07-03 15:41:33 +01:00
|
|
|
HOMEBREW_TEMP="${HOMEBREW_TEMP:-${HOMEBREW_SYSTEM_TEMP}}"
|
|
|
|
|
2018-02-15 13:26:17 -06:00
|
|
|
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"
|
2018-08-17 15:17:14 -04:00
|
|
|
elif [[ -n "$HOMEBREW_DEVELOPER" && -x "$HOMEBREW_CURL_PATH" ]]
|
2018-08-17 14:59:07 -04:00
|
|
|
then
|
|
|
|
HOMEBREW_CURL="$HOMEBREW_CURL_PATH"
|
2018-08-17 15:17:14 -04:00
|
|
|
else
|
|
|
|
HOMEBREW_CURL="curl"
|
2018-08-17 14:59:07 -04:00
|
|
|
fi
|
|
|
|
|
2018-06-25 23:36:12 -07:00
|
|
|
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"
|
2018-08-17 15:17:14 -04:00
|
|
|
elif [[ -n "$HOMEBREW_DEVELOPER" && -x "$HOMEBREW_GIT_PATH" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_GIT="$HOMEBREW_GIT_PATH"
|
2018-06-25 23:36:12 -07:00
|
|
|
else
|
|
|
|
HOMEBREW_GIT="git"
|
|
|
|
fi
|
|
|
|
|
2017-04-27 08:53:57 +01:00
|
|
|
HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_USER_AGENT_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_USER_AGENT_VERSION)"
|
2018-10-26 17:08:59 -04:00
|
|
|
curl_version_output="$("$HOMEBREW_CURL" --version 2>/dev/null)"
|
|
|
|
curl_name_and_version="${curl_version_output%% (*}"
|
|
|
|
HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT ${curl_name_and_version// //}"
|
2016-04-04 11:46:33 +01:00
|
|
|
|
|
|
|
# Declared in bin/brew
|
2016-02-16 09:29:03 +00:00
|
|
|
export HOMEBREW_BREW_FILE
|
|
|
|
export HOMEBREW_PREFIX
|
|
|
|
export HOMEBREW_REPOSITORY
|
|
|
|
export HOMEBREW_LIBRARY
|
2018-07-03 15:41:33 +01:00
|
|
|
export HOMEBREW_SYSTEM_TEMP
|
2018-06-30 12:21:32 -04:00
|
|
|
export HOMEBREW_TEMP
|
2016-04-04 11:46:33 +01:00
|
|
|
|
|
|
|
# Declared in brew.sh
|
|
|
|
export HOMEBREW_VERSION
|
2016-05-03 16:01:42 +08:00
|
|
|
export HOMEBREW_CACHE
|
2018-12-26 17:03:31 -08:00
|
|
|
export HOMEBREW_LOGS
|
2016-02-16 09:29:03 +00:00
|
|
|
export HOMEBREW_CELLAR
|
2016-04-25 17:57:51 +01:00
|
|
|
export HOMEBREW_SYSTEM
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_CURL
|
2018-10-04 09:31:37 +01:00
|
|
|
export HOMEBREW_SYSTEM_CURL_TOO_OLD
|
2018-08-23 11:50:42 -04:00
|
|
|
export HOMEBREW_GIT
|
2018-10-27 20:44:13 -04:00
|
|
|
export HOMEBREW_MINIMUM_GIT_VERSION
|
2016-04-25 17:57:51 +01:00
|
|
|
export HOMEBREW_PROCESSOR
|
2016-04-12 11:02:22 +01:00
|
|
|
export HOMEBREW_PRODUCT
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_OS_VERSION
|
2016-09-18 19:57:19 +01:00
|
|
|
export HOMEBREW_MACOS_VERSION
|
2018-09-20 13:49:10 +01:00
|
|
|
export HOMEBREW_MACOS_VERSION_NUMERIC
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_USER_AGENT
|
|
|
|
export HOMEBREW_USER_AGENT_CURL
|
2016-02-16 09:29:03 +00:00
|
|
|
|
2017-05-10 23:31:31 -07:00
|
|
|
if [[ -n "$HOMEBREW_MACOS" && -x "/usr/bin/xcode-select" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
2016-06-08 05:53:10 -07:00
|
|
|
XCODE_SELECT_PATH=$('/usr/bin/xcode-select' --print-path 2>/dev/null)
|
|
|
|
if [[ "$XCODE_SELECT_PATH" = "/" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
|
|
|
odie <<EOS
|
|
|
|
Your xcode-select path is currently set to '/'.
|
|
|
|
This causes the 'xcrun' tool to hang, and can render Homebrew unusable.
|
|
|
|
If you are using Xcode, you should:
|
|
|
|
sudo xcode-select -switch /Applications/Xcode.app
|
|
|
|
Otherwise, you should:
|
|
|
|
sudo rm -rf /usr/share/xcode-select
|
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
|
2016-06-08 05:53:10 -07:00
|
|
|
# Don't check xcrun if Xcode and the CLT aren't installed, as that opens
|
|
|
|
# a popup window asking the user to install the CLT
|
|
|
|
if [[ -n "$XCODE_SELECT_PATH" ]]
|
2016-02-16 09:29:03 +00:00
|
|
|
then
|
2016-06-08 05:53:10 -07:00
|
|
|
XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
|
|
|
|
XCRUN_STATUS="$?"
|
|
|
|
|
|
|
|
if [[ "$XCRUN_STATUS" -ne 0 && "$XCRUN_OUTPUT" = *license* ]]
|
|
|
|
then
|
|
|
|
odie <<EOS
|
2016-02-16 09:29:03 +00:00
|
|
|
You have not agreed to the Xcode license. Please resolve this by running:
|
2016-10-18 18:40:57 -07:00
|
|
|
sudo xcodebuild -license accept
|
2016-02-16 09:29:03 +00:00
|
|
|
EOS
|
2016-06-08 05:53:10 -07:00
|
|
|
fi
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Many Pathname operations use getwd when they shouldn't, and then throw
|
|
|
|
# odd exceptions. Reduce our support burden by showing a user-friendly error.
|
|
|
|
if [[ ! -d "$(pwd)" ]]
|
|
|
|
then
|
|
|
|
odie "The current working directory doesn't exist, cannot proceed."
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$1" = -v ]]
|
|
|
|
then
|
|
|
|
# Shift the -v to the end of the parameter list
|
|
|
|
shift
|
|
|
|
set -- "$@" -v
|
|
|
|
fi
|
|
|
|
|
2016-09-30 00:43:07 +03:00
|
|
|
for arg in "$@"
|
|
|
|
do
|
|
|
|
if [[ $arg = "--help" || $arg = "-h" || $arg = "--usage" || $arg = "-?" ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_HELP="1"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2016-02-25 22:38:43 +01:00
|
|
|
HOMEBREW_ARG_COUNT="$#"
|
2016-02-16 09:29:03 +00:00
|
|
|
HOMEBREW_COMMAND="$1"
|
|
|
|
shift
|
|
|
|
case "$HOMEBREW_COMMAND" in
|
2016-08-07 11:56:51 +02:00
|
|
|
ls) HOMEBREW_COMMAND="list" ;;
|
|
|
|
homepage) HOMEBREW_COMMAND="home" ;;
|
|
|
|
-S) HOMEBREW_COMMAND="search" ;;
|
|
|
|
up) HOMEBREW_COMMAND="update" ;;
|
|
|
|
ln) HOMEBREW_COMMAND="link" ;;
|
|
|
|
instal) HOMEBREW_COMMAND="install" ;; # gem does the same
|
2017-02-21 04:35:52 -08:00
|
|
|
uninstal) HOMEBREW_COMMAND="uninstall" ;;
|
2016-08-07 11:56:51 +02:00
|
|
|
rm) HOMEBREW_COMMAND="uninstall" ;;
|
|
|
|
remove) HOMEBREW_COMMAND="uninstall" ;;
|
|
|
|
configure) HOMEBREW_COMMAND="diy" ;;
|
|
|
|
abv) HOMEBREW_COMMAND="info" ;;
|
|
|
|
dr) HOMEBREW_COMMAND="doctor" ;;
|
|
|
|
--repo) HOMEBREW_COMMAND="--repository" ;;
|
|
|
|
environment) HOMEBREW_COMMAND="--env" ;;
|
|
|
|
--config) HOMEBREW_COMMAND="config" ;;
|
2018-05-16 17:33:40 +02:00
|
|
|
-v) HOMEBREW_COMMAND="--version" ;;
|
2016-02-16 09:29:03 +00:00
|
|
|
esac
|
|
|
|
|
2018-02-13 18:01:25 +01:00
|
|
|
if [[ "$HOMEBREW_COMMAND" = "cask" ]]
|
|
|
|
then
|
|
|
|
HOMEBREW_CASK_COMMAND="$1"
|
|
|
|
|
|
|
|
case "$HOMEBREW_CASK_COMMAND" in
|
|
|
|
instal) HOMEBREW_CASK_COMMAND="install" ;; # gem does the same
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2019-02-20 12:29:31 +00:00
|
|
|
if [[ "$HOMEBREW_COMMAND" = "audit" || "$HOMEBREW_COMMAND" = "style" ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_INSTALL_BUNDLER_GEMS_FIRST="1"
|
|
|
|
fi
|
|
|
|
|
2017-12-05 14:07:28 +00:00
|
|
|
# Set HOMEBREW_DEV_CMD_RUN for users who have run a development command.
|
|
|
|
# This makes them behave like HOMEBREW_DEVELOPERs for brew update.
|
|
|
|
if [[ -z "$HOMEBREW_DEVELOPER" ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_GIT_CONFIG_FILE="$HOMEBREW_REPOSITORY/.git/config"
|
|
|
|
HOMEBREW_GIT_CONFIG_DEVELOPERMODE="$(git config --file="$HOMEBREW_GIT_CONFIG_FILE" --get homebrew.devcmdrun 2>/dev/null)"
|
|
|
|
if [[ "$HOMEBREW_GIT_CONFIG_DEVELOPERMODE" = "true" ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_DEV_CMD_RUN="1"
|
|
|
|
fi
|
2018-02-27 11:52:47 +00:00
|
|
|
|
|
|
|
# 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"
|
2017-12-05 14:07:28 +00:00
|
|
|
fi
|
|
|
|
|
2018-06-29 19:51:18 +01:00
|
|
|
if [[ -z "$HOMEBREW_BOTTLE_DOMAIN" ]]
|
|
|
|
then
|
|
|
|
export HOMEBREW_BOTTLE_DOMAIN="$HOMEBREW_BOTTLE_DEFAULT_DOMAIN"
|
|
|
|
fi
|
|
|
|
|
2016-05-25 01:53:14 +02:00
|
|
|
if [[ -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh" ]]
|
|
|
|
then
|
2016-02-16 09:29:03 +00:00
|
|
|
HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh"
|
2016-09-05 21:32:18 +01:00
|
|
|
elif [[ -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]]
|
2016-05-25 01:53:14 +02:00
|
|
|
then
|
2016-09-05 21:32:18 +01:00
|
|
|
if [[ -z "$HOMEBREW_DEVELOPER" ]]
|
|
|
|
then
|
2016-10-26 16:33:35 -04:00
|
|
|
git config --file="$HOMEBREW_GIT_CONFIG_FILE" --replace-all homebrew.devcmdrun true 2>/dev/null
|
2016-09-05 21:32:18 +01:00
|
|
|
export HOMEBREW_DEV_CMD_RUN="1"
|
|
|
|
fi
|
2016-02-16 09:29:03 +00:00
|
|
|
HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh"
|
|
|
|
fi
|
|
|
|
|
2016-07-17 02:07:06 +08:00
|
|
|
check-run-command-as-root() {
|
2016-08-25 18:32:32 +01:00
|
|
|
[[ "$(id -u)" = 0 ]] || return
|
|
|
|
|
2019-03-23 12:38:55 +00:00
|
|
|
# Allow Azure Pipelines/Docker to do everything as root (as it's normal there)
|
|
|
|
[[ -f /proc/1/cgroup ]] && grep -E "azpl_job|docker" -q /proc/1/cgroup && return
|
2019-02-14 10:47:07 +00:00
|
|
|
|
2016-11-06 17:37:46 +00:00
|
|
|
# Homebrew Services may need `sudo` for system-wide daemons.
|
2016-08-25 18:32:32 +01:00
|
|
|
[[ "$HOMEBREW_COMMAND" = "services" ]] && return
|
2016-11-06 17:37:46 +00:00
|
|
|
|
|
|
|
# It's fine to run this as root as it's not changing anything.
|
2016-10-10 14:25:07 +02:00
|
|
|
[[ "$HOMEBREW_COMMAND" = "--prefix" ]] && return
|
2016-08-25 18:32:32 +01:00
|
|
|
|
2016-11-06 17:37:46 +00:00
|
|
|
odie <<EOS
|
|
|
|
Running Homebrew as root is extremely dangerous and no longer supported.
|
|
|
|
As Homebrew does not drop privileges on installation you would be giving all
|
|
|
|
build scripts full access to your system.
|
2016-08-25 18:32:32 +01:00
|
|
|
EOS
|
2016-07-17 02:07:06 +08:00
|
|
|
}
|
|
|
|
check-run-command-as-root
|
2016-02-16 09:29:03 +00:00
|
|
|
|
2018-06-30 09:34:21 -04:00
|
|
|
check-prefix-is-not-tmpdir() {
|
2018-07-01 19:21:50 -04:00
|
|
|
[[ -z "${HOMEBREW_MACOS}" ]] && return
|
|
|
|
|
2018-06-30 12:21:32 -04:00
|
|
|
if [[ "${HOMEBREW_PREFIX}" = "${HOMEBREW_TEMP}"* ]]
|
2018-06-30 09:34:21 -04:00
|
|
|
then
|
|
|
|
odie <<EOS
|
2018-07-02 19:34:19 -04:00
|
|
|
Your HOMEBREW_PREFIX is in the Homebrew temporary directory, which Homebrew
|
2018-06-30 09:34:21 -04:00
|
|
|
uses to store downloads and builds. You can resolve this by installing Homebrew to
|
2018-06-30 11:53:29 -04:00
|
|
|
either the standard prefix (/usr/local) or to a non-standard prefix that is not
|
2018-07-02 19:34:19 -04:00
|
|
|
in the Homebrew temporary directory.
|
2018-06-30 09:34:21 -04:00
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
check-prefix-is-not-tmpdir
|
|
|
|
|
2016-10-11 09:37:37 +01:00
|
|
|
if [[ "$HOMEBREW_PREFIX" = "/usr/local" &&
|
2016-10-12 10:33:47 -07:00
|
|
|
"$HOMEBREW_PREFIX" != "$HOMEBREW_REPOSITORY" &&
|
2016-10-11 09:37:37 +01:00
|
|
|
"$HOMEBREW_CELLAR" = "$HOMEBREW_REPOSITORY/Cellar" ]]
|
|
|
|
then
|
|
|
|
cat >&2 <<EOS
|
|
|
|
Warning: your HOMEBREW_PREFIX is set to /usr/local but HOMEBREW_CELLAR is set
|
|
|
|
to $HOMEBREW_CELLAR. Your current HOMEBREW_CELLAR location will stop
|
|
|
|
you being able to use all the binary packages (bottles) Homebrew provides. We
|
|
|
|
recommend you move your HOMEBREW_CELLAR to /usr/local/Cellar which will get you
|
|
|
|
access to all bottles."
|
|
|
|
EOS
|
|
|
|
fi
|
|
|
|
|
2018-10-04 09:31:37 +01:00
|
|
|
# Don't need shellcheck to follow this `source`.
|
|
|
|
# shellcheck disable=SC1090
|
2016-04-12 11:02:22 +01:00
|
|
|
source "$HOMEBREW_LIBRARY/Homebrew/utils/analytics.sh"
|
|
|
|
setup-analytics
|
2016-03-28 09:33:45 +01:00
|
|
|
|
2016-10-30 20:11:45 -04:00
|
|
|
# Let user know we're still updating Homebrew if brew update --preinstall
|
|
|
|
# exceeds 3 seconds.
|
|
|
|
update-preinstall-timer() {
|
|
|
|
sleep 3
|
|
|
|
echo 'Updating Homebrew...' >&2
|
|
|
|
}
|
|
|
|
|
2016-04-11 09:31:50 +01:00
|
|
|
update-preinstall() {
|
2016-09-30 00:43:07 +03:00
|
|
|
[[ -z "$HOMEBREW_HELP" ]] || return
|
2016-04-11 09:31:50 +01:00
|
|
|
[[ -z "$HOMEBREW_NO_AUTO_UPDATE" ]] || return
|
2018-12-29 19:06:18 +00:00
|
|
|
[[ -z "$HOMEBREW_AUTO_UPDATING" ]] || return
|
2016-07-07 10:24:37 +01:00
|
|
|
[[ -z "$HOMEBREW_UPDATE_PREINSTALL" ]] || return
|
2019-03-21 18:04:14 +00:00
|
|
|
[[ -z "$HOMEBREW_AUTO_UPDATE_CHECKED" ]] || return
|
|
|
|
|
|
|
|
# If we've checked for updates, we don't need to check again.
|
|
|
|
export HOMEBREW_AUTO_UPDATE_CHECKED="1"
|
|
|
|
|
|
|
|
if [[ "$HOMEBREW_COMMAND" = "cask" ]]
|
|
|
|
then
|
|
|
|
if [[ "$HOMEBREW_CASK_COMMAND" != "upgrade" && $HOMEBREW_ARG_COUNT -lt 3 ]]
|
|
|
|
then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
elif [[ "$HOMEBREW_COMMAND" != "upgrade" && $HOMEBREW_ARG_COUNT -lt 2 ]]
|
|
|
|
then
|
|
|
|
return
|
|
|
|
fi
|
2016-04-11 09:31:50 +01:00
|
|
|
|
2019-02-18 10:11:57 -08:00
|
|
|
if [[ "$HOMEBREW_COMMAND" = "install" || "$HOMEBREW_COMMAND" = "upgrade" ||
|
2019-03-20 11:06:45 +00:00
|
|
|
"$HOMEBREW_COMMAND" = "bump-formula-pr" ||
|
2019-02-18 10:11:57 -08:00
|
|
|
"$HOMEBREW_COMMAND" = "tap" && $HOMEBREW_ARG_COUNT -gt 1 ||
|
2018-02-13 18:01:25 +01:00
|
|
|
"$HOMEBREW_CASK_COMMAND" = "install" || "$HOMEBREW_CASK_COMMAND" = "upgrade" ]]
|
2016-04-11 09:31:50 +01:00
|
|
|
then
|
2018-12-29 19:06:18 +00:00
|
|
|
export HOMEBREW_AUTO_UPDATING="1"
|
|
|
|
|
2016-10-30 20:11:45 -04:00
|
|
|
if [[ -z "$HOMEBREW_VERBOSE" ]]
|
|
|
|
then
|
|
|
|
update-preinstall-timer &
|
|
|
|
timer_pid=$!
|
|
|
|
fi
|
|
|
|
|
2016-05-13 14:39:16 +08:00
|
|
|
brew update --preinstall
|
2016-10-30 20:11:45 -04:00
|
|
|
|
|
|
|
if [[ -n "$timer_pid" ]]
|
|
|
|
then
|
|
|
|
kill "$timer_pid" 2>/dev/null
|
|
|
|
wait "$timer_pid" 2>/dev/null
|
|
|
|
fi
|
2016-08-10 14:18:08 +01:00
|
|
|
|
2018-12-29 19:06:18 +00:00
|
|
|
unset HOMEBREW_AUTO_UPDATING
|
|
|
|
|
|
|
|
# exec a new process to set any new environment variables.
|
|
|
|
exec "$HOMEBREW_BREW_FILE" "$@"
|
2016-09-19 14:12:44 +01:00
|
|
|
fi
|
2016-04-11 09:31:50 +01:00
|
|
|
}
|
|
|
|
|
2016-02-16 09:29:03 +00:00
|
|
|
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.
|
|
|
|
#
|
2018-10-04 09:31:37 +01:00
|
|
|
# Don't need shellcheck to follow this `source`.
|
|
|
|
# shellcheck disable=SC1090
|
2016-02-16 09:29:03 +00:00
|
|
|
source "$HOMEBREW_BASH_COMMAND"
|
2018-12-29 19:06:18 +00:00
|
|
|
{ update-preinstall "$@"; "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; }
|
2016-02-16 09:29:03 +00:00
|
|
|
else
|
2018-10-04 09:31:37 +01:00
|
|
|
# Don't need shellcheck to follow this `source`.
|
|
|
|
# shellcheck disable=SC1090
|
2016-07-12 08:51:36 +01:00
|
|
|
source "$HOMEBREW_LIBRARY/Homebrew/utils/ruby.sh"
|
|
|
|
setup-ruby-path
|
|
|
|
|
2016-02-25 22:38:43 +01:00
|
|
|
# Unshift command back into argument list (unless argument list was empty).
|
|
|
|
[[ "$HOMEBREW_ARG_COUNT" -gt 0 ]] && set -- "$HOMEBREW_COMMAND" "$@"
|
2018-12-29 19:06:18 +00:00
|
|
|
{ update-preinstall "$@"; exec "$HOMEBREW_RUBY_PATH" $HOMEBREW_RUBY_WARNINGS "$HOMEBREW_LIBRARY/Homebrew/brew.rb" "$@"; }
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|