2016-04-03 18:34:17 +08:00
|
|
|
HOMEBREW_VERSION="0.9.9"
|
2016-03-10 13:41:02 +00:00
|
|
|
|
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
|
|
|
|
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
|
2016-05-03 14:24:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
odie() {
|
|
|
|
onoe "$@"
|
2016-02-16 09:29:03 +00:00
|
|
|
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
|
|
|
|
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_SYSTEM="$(uname -s)"
|
2016-04-06 01:31:03 +02:00
|
|
|
case "$HOMEBREW_SYSTEM" in
|
|
|
|
Darwin) HOMEBREW_OSX="1";;
|
|
|
|
Linux) HOMEBREW_LINUX="1";;
|
|
|
|
esac
|
2016-02-16 09:29:03 +00:00
|
|
|
|
|
|
|
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)"
|
2016-04-18 15:16:43 +01:00
|
|
|
if [[ -z "$HOMEBREW_RUBY_PATH" ]]
|
|
|
|
then
|
|
|
|
odie "No Ruby found, cannot proceed."
|
|
|
|
fi
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_CURL="/usr/bin/curl"
|
|
|
|
if [[ -n "$HOMEBREW_OSX" ]]
|
|
|
|
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"
|
|
|
|
HOMEBREW_OSX_VERSION="$(/usr/bin/sw_vers -productVersion)"
|
|
|
|
HOMEBREW_OS_VERSION="Mac OS X $HOMEBREW_OSX_VERSION"
|
|
|
|
|
2016-04-06 01:33:41 +02:00
|
|
|
printf -v HOMEBREW_OSX_VERSION_NUMERIC "%02d%02d%02d" ${HOMEBREW_OSX_VERSION//./ }
|
2016-04-04 11:46:33 +01:00
|
|
|
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
|
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)}"
|
2016-04-04 11:46:33 +01:00
|
|
|
fi
|
|
|
|
HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_VERSION)"
|
2016-04-08 16:32:05 +02:00
|
|
|
HOMEBREW_CURL_VERSION="$("$HOMEBREW_CURL" --version 2>/dev/null | head -n1 | /usr/bin/awk '{print $1"/"$2}')"
|
2016-04-04 11:46:33 +01:00
|
|
|
HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT $HOMEBREW_CURL_VERSION"
|
|
|
|
|
|
|
|
# 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
|
2016-04-04 11:46:33 +01:00
|
|
|
|
|
|
|
# Declared in brew.sh
|
|
|
|
export HOMEBREW_VERSION
|
2016-02-16 09:29:03 +00:00
|
|
|
export HOMEBREW_CELLAR
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_RUBY_PATH
|
2016-04-25 17:57:51 +01:00
|
|
|
export HOMEBREW_SYSTEM
|
2016-04-04 11:46:33 +01:00
|
|
|
export HOMEBREW_CURL
|
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
|
|
|
|
export HOMEBREW_OSX_VERSION
|
|
|
|
export HOMEBREW_USER_AGENT
|
|
|
|
export HOMEBREW_USER_AGENT_CURL
|
2016-02-16 09:29:03 +00:00
|
|
|
|
|
|
|
if [[ -n "$HOMEBREW_OSX" ]]
|
|
|
|
then
|
|
|
|
if [[ "$('/usr/bin/xcode-select' --print-path)" = "/" ]]
|
|
|
|
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
|
|
|
|
|
|
|
|
XCRUN_OUTPUT="$(/usr/bin/xcrun clang 2>&1)"
|
|
|
|
XCRUN_STATUS="$?"
|
|
|
|
|
|
|
|
if [[ "$XCRUN_STATUS" -ne 0 && "$XCRUN_OUTPUT" = *license* ]]
|
|
|
|
then
|
|
|
|
odie <<EOS
|
|
|
|
You have not agreed to the Xcode license. Please resolve this by running:
|
|
|
|
sudo xcodebuild -license
|
|
|
|
EOS
|
|
|
|
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-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
|
|
|
|
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
|
|
|
|
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";;
|
|
|
|
esac
|
|
|
|
|
2016-04-03 20:17:01 +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-04-03 20:17:01 +02:00
|
|
|
elif [[ -n "$HOMEBREW_DEVELOPER" && -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]]; then
|
2016-02-16 09:29:03 +00:00
|
|
|
HOMEBREW_BASH_COMMAND="$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$(id -u)" = "0" && "$(/usr/bin/stat -f%u "$HOMEBREW_BREW_FILE")" != "0" ]]
|
|
|
|
then
|
|
|
|
case "$HOMEBREW_COMMAND" in
|
2016-05-01 22:04:46 +08:00
|
|
|
analytics|install|reinstall|postinstall|link|pin|update|upgrade|create|migrate|tap|tap-pin|switch)
|
2016-02-16 09:29:03 +00:00
|
|
|
odie <<EOS
|
|
|
|
Cowardly refusing to 'sudo brew $HOMEBREW_COMMAND'
|
|
|
|
You can use brew with sudo, but only if the brew executable is owned by root.
|
|
|
|
However, this is both not recommended and completely unsupported so do so at
|
|
|
|
your own risk.
|
|
|
|
EOS
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2016-04-12 11:02:22 +01:00
|
|
|
source "$HOMEBREW_LIBRARY/Homebrew/utils/analytics.sh"
|
|
|
|
setup-analytics
|
|
|
|
report-analytics-screenview-command
|
2016-03-28 09:33:45 +01:00
|
|
|
|
2016-04-11 09:31:50 +01:00
|
|
|
update-preinstall() {
|
|
|
|
[[ -n "$HOMEBREW_AUTO_UPDATE" ]] || return
|
|
|
|
[[ -z "$HOMEBREW_NO_AUTO_UPDATE" ]] || return
|
|
|
|
|
|
|
|
if [[ "$HOMEBREW_COMMAND" = "install" || "$HOMEBREW_COMMAND" = "upgrade" ]]
|
|
|
|
then
|
|
|
|
# Hide shellcheck complaint:
|
|
|
|
# shellcheck source=/dev/null
|
|
|
|
source "$HOMEBREW_LIBRARY/Homebrew/cmd/update.sh"
|
|
|
|
homebrew-update --preinstall
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
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.
|
|
|
|
#
|
|
|
|
# Hide shellcheck complaint:
|
|
|
|
# shellcheck source=/dev/null
|
|
|
|
source "$HOMEBREW_BASH_COMMAND"
|
2016-04-11 09:31:50 +01:00
|
|
|
{ update-preinstall; "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; }
|
2016-02-16 09:29:03 +00:00
|
|
|
else
|
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" "$@"
|
2016-04-11 09:31:50 +01:00
|
|
|
{ update-preinstall; exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/brew.rb" "$@"; }
|
2016-02-16 09:29:03 +00:00
|
|
|
fi
|