| 
									
										
										
										
											2016-04-03 18:34:17 +08:00
										 |  |  | HOMEBREW_VERSION="0.9.9" | 
					
						
							| 
									
										
										
										
											2016-03-10 13:41:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-16 09:29:03 +00:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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)" | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | export HOMEBREW_CURL | 
					
						
							|  |  |  | 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-03-09 19:34:58 +08:00
										 |  |  |     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-03-28 09:33:45 +01:00
										 |  |  | if [[ -n "$HOMEBREW_ANALYTICS" ]] | 
					
						
							|  |  |  | then | 
					
						
							|  |  |  |   # User UUID file. Used for Homebrew user counting. Can be deleted and | 
					
						
							|  |  |  |   # recreated with no adverse effect (beyond our user counts being inflated). | 
					
						
							|  |  |  |   HOMEBREW_ANALYTICS_USER_UUID_FILE="$HOME/.homebrew_analytics_user_uuid" | 
					
						
							|  |  |  |   if [[ -r "$HOMEBREW_ANALYTICS_USER_UUID_FILE" ]] | 
					
						
							|  |  |  |   then | 
					
						
							| 
									
										
										
										
											2016-04-06 01:36:36 +02:00
										 |  |  |     HOMEBREW_ANALYTICS_USER_UUID="$(<"$HOMEBREW_ANALYTICS_USER_UUID_FILE")" | 
					
						
							| 
									
										
										
										
											2016-03-28 09:33:45 +01:00
										 |  |  |   else | 
					
						
							|  |  |  |     HOMEBREW_ANALYTICS_USER_UUID="$(uuidgen)" | 
					
						
							|  |  |  |     echo "$HOMEBREW_ANALYTICS_USER_UUID" > "$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 | 
					
						
							| 
									
										
										
										
											2016-04-06 01:26:12 +02:00
										 |  |  |   "$HOMEBREW_CURL" https://www.google-analytics.com/collect -d v=1 \
 | 
					
						
							| 
									
										
										
										
											2016-03-28 09:33:45 +01:00
										 |  |  |     --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" \
 | 
					
						
							| 
									
										
										
										
											2016-04-06 01:52:25 +02:00
										 |  |  |     &> /dev/null \
 | 
					
						
							|  |  |  |     & disown | 
					
						
							| 
									
										
										
										
											2016-03-28 09:33:45 +01:00
										 |  |  | 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" | 
					
						
							|  |  |  |   { "homebrew-$HOMEBREW_COMMAND" "$@"; exit $?; } | 
					
						
							|  |  |  | 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" "$@" | 
					
						
							|  |  |  |   exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/brew.rb" "$@" | 
					
						
							| 
									
										
										
										
											2016-02-16 09:29:03 +00:00
										 |  |  | fi |