diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 497e0f7767..cd8dd376fe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -276,7 +276,7 @@ jobs: - name: Install brew tests dependencies run: | brew install subversion - Library/Homebrew/shims/scm/svn --homebrew=print-path + brew sh -c "svn --homebrew=print-path" which svn which svnadmin diff --git a/Library/Homebrew/shims/mac/super/gem b/Library/Homebrew/shims/mac/super/gem new file mode 120000 index 0000000000..a38a43ef7a --- /dev/null +++ b/Library/Homebrew/shims/mac/super/gem @@ -0,0 +1 @@ +ruby \ No newline at end of file diff --git a/Library/Homebrew/shims/mac/super/rake b/Library/Homebrew/shims/mac/super/rake new file mode 120000 index 0000000000..a38a43ef7a --- /dev/null +++ b/Library/Homebrew/shims/mac/super/rake @@ -0,0 +1 @@ +ruby \ No newline at end of file diff --git a/Library/Homebrew/shims/mac/super/ruby b/Library/Homebrew/shims/mac/super/ruby new file mode 100755 index 0000000000..91921781ff --- /dev/null +++ b/Library/Homebrew/shims/mac/super/ruby @@ -0,0 +1,12 @@ +#!/bin/bash +# System Ruby's mkmf on Mojave (10.14) and later require SDKROOT set to work correctly. + +source "$HOMEBREW_LIBRARY/Homebrew/shims/utils.sh" + +try_exec_non_system "$SHIM_FILE" "$@" + +if [[ -z "$SDKROOT" && -n "$HOMEBREW_SDKROOT" ]]; then + export SDKROOT=$HOMEBREW_SDKROOT +fi + +safe_exec "/usr/bin/$SHIM_FILE" "$@" diff --git a/Library/Homebrew/shims/scm/git b/Library/Homebrew/shims/scm/git index 65ecc55237..a33d4ea433 100755 --- a/Library/Homebrew/shims/scm/git +++ b/Library/Homebrew/shims/scm/git @@ -3,87 +3,15 @@ # This script because we support $HOMEBREW_GIT, $HOMEBREW_SVN, etc., Xcode-only and # no Xcode/CLT configurations. Order is careful to be what the user would want. -set +o posix - -quiet_safe_cd() { - cd "$1" >/dev/null || { echo "Error: failed to cd to $1" >&2; exit 1; } -} - -absdir() { - quiet_safe_cd "${1%/*}/" && pwd -P -} - -dirbasepath() { - local dir="$1" - local base="${2##*/}" - echo "$dir/$base" -} - -realpath() { - local path="$1" - local dir - local dest - - dir="$(absdir "$path")" - path="$(dirbasepath "$dir" "$path")" - - while [[ -L "$path" ]] - do - dest="$(readlink "$path")" - if [[ "$dest" = "/"* ]] - then - path="$dest" - else - path="$dir/$dest" - fi - dir="$(absdir "$path")" - path="$(dirbasepath "$dir" "$path")" - done - - echo "$path" -} - -executable() { - local file="$1" - [[ -f "$file" && -x "$file" ]] -} - -lowercase() { - echo "$1" | tr "[:upper:]" "[:lower:]" -} - -safe_exec() { - local arg0="$1" - if ! executable "$arg0" - then - return - fi - # prevent fork-bombs - if [[ "$(lowercase "$arg0")" = "$SCM_FILE" || "$(realpath "$arg0")" = "$SCM_REAL" ]] - then - return - fi - if [[ "$HOMEBREW" = "print-path" ]] - then - local dir="$(quiet_safe_cd "${arg0%/*}/" && pwd)" - local path="$(dirbasepath "$dir" "$arg0")" - echo "$path" - exit - fi - exec "$@" -} - -SCM_FILE="${0##*/}" -SCM_REAL="$(realpath "$0")" -SCM_DIR="$(quiet_safe_cd "${SCM_REAL%/*}/" && pwd -P)" - -if [[ "$1" = --homebrew=* ]] +if [ -z "$HOMEBREW_LIBRARY" ] then - HOMEBREW="${1:11}" - shift + echo "${0##*/}: This shim is internal and must be run via `brew`." >&2 + exit 1 fi -case "$(lowercase "$SCM_FILE")" in +source "$HOMEBREW_LIBRARY/Homebrew/shims/utils.sh" + +case "$(lowercase "$SHIM_FILE")" in git) if [[ -n "$HOMEBREW_GIT" && "$HOMEBREW_GIT" != git ]] then @@ -98,21 +26,10 @@ case "$(lowercase "$SCM_FILE")" in ;; esac -brew_prefix_version="$(quiet_safe_cd "$SCM_DIR/../../../../../bin" 2>/dev/null && pwd -P)/$SCM_FILE" +brew_prefix_version="$HOMEBREW_PREFIX/bin/$SHIM_FILE" safe_exec "$brew_prefix_version" "$@" -brew_repo_version="$(quiet_safe_cd "$SCM_DIR/../../../../bin" && pwd -P)/$SCM_FILE" -safe_exec "$brew_repo_version" "$@" - -IFS=$'\n' -for path in $(type -aP "$SCM_FILE") -do - if [[ "$path" != "/usr/bin/$SCM_FILE" ]] - then - safe_exec "$path" "$@" - fi -done -unset IFS +try_exec_non_system "$SHIM_FILE" "$@" if executable "/usr/bin/xcode-select" then @@ -129,19 +46,19 @@ then fi if [[ -z "$popup_stub" && "$xcode_path" != "/" ]] then - path="$(/usr/bin/xcrun -find "$SCM_FILE" 2>/dev/null)" + path="$(/usr/bin/xcrun -find "$SHIM_FILE" 2>/dev/null)" safe_exec "$path" "$@" fi fi -path="/Applications/Xcode.app/Contents/Developer/usr/bin/$SCM_FILE" +path="/Applications/Xcode.app/Contents/Developer/usr/bin/$SHIM_FILE" safe_exec "$path" "$@" if [[ -z "$popup_stub" && "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101500" ]] then - path="/usr/bin/$SCM_FILE" + path="/usr/bin/$SHIM_FILE" safe_exec "$path" "$@" fi -echo "You must: brew install $SCM_FILE" >&2 +echo "You must: brew install $SHIM_FILE" >&2 exit 1 diff --git a/Library/Homebrew/shims/utils.sh b/Library/Homebrew/shims/utils.sh new file mode 100644 index 0000000000..7d90d7b697 --- /dev/null +++ b/Library/Homebrew/shims/utils.sh @@ -0,0 +1,94 @@ +set +o posix + +quiet_safe_cd() { + cd "$1" >/dev/null || { echo "Error: failed to cd to $1" >&2; exit 1; } +} + +absdir() { + quiet_safe_cd "${1%/*}/" && pwd -P +} + +dirbasepath() { + local dir="$1" + local base="${2##*/}" + echo "$dir/$base" +} + +realpath() { + local path="$1" + local dir + local dest + + dir="$(absdir "$path")" + path="$(dirbasepath "$dir" "$path")" + + while [[ -L "$path" ]] + do + dest="$(readlink "$path")" + if [[ "$dest" = "/"* ]] + then + path="$dest" + else + path="$dir/$dest" + fi + dir="$(absdir "$path")" + path="$(dirbasepath "$dir" "$path")" + done + + echo "$path" +} + +executable() { + local file="$1" + [[ -f "$file" && -x "$file" ]] +} + +lowercase() { + echo "$1" | tr "[:upper:]" "[:lower:]" +} + +safe_exec() { + local arg0="$1" + if ! executable "$arg0" + then + return + fi + # prevent fork-bombs + if [[ "$(lowercase "$arg0")" = "$SHIM_FILE" || "$(realpath "$arg0")" = "$SHIM_REAL" ]] + then + return + fi + if [[ "$HOMEBREW" = "print-path" ]] + then + local dir="$(quiet_safe_cd "${arg0%/*}/" && pwd)" + local path="$(dirbasepath "$dir" "$arg0")" + echo "$path" + exit + fi + exec "$@" +} + +try_exec_non_system() { + local file="$1" + shift + + IFS=$'\n' + for path in $(type -aP "$file") + do + if [[ "$path" != "/usr/bin/$file" ]] + then + safe_exec "$path" "$@" + fi + done + unset IFS +} + + +SHIM_FILE="${0##*/}" +SHIM_REAL="$(realpath "$0")" + +if [[ "$1" = --homebrew=* ]] +then + HOMEBREW="${1:11}" + shift +fi