aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLibrary/ENV/4.3/xcrun89
1 files changed, 48 insertions, 41 deletions
diff --git a/Library/ENV/4.3/xcrun b/Library/ENV/4.3/xcrun
index 7443cec17..128f40ba2 100755
--- a/Library/ENV/4.3/xcrun
+++ b/Library/ENV/4.3/xcrun
@@ -1,50 +1,57 @@
-#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0
-
+#!/bin/sh
# Historically, xcrun has had various bugs, and in some cases it didn't
# work at all (e.g. CLT-only in the Xcode 4.3 era). This script emulates
# it and attempts to avoid these issues.
# Some build tools set DEVELOPER_DIR, so discard it
-ENV.delete "DEVELOPER_DIR"
-
-if ARGV.empty? || ARGV[0][0..0] == "-"
- exec "/usr/bin/xcrun", *ARGV
-end
-
-arg0 = ARGV.shift
-
-exe = "/usr/bin/#{arg0}"
-if File.executable?(exe)
- exec(exe, *ARGV) if ENV["HOMEBREW_PREFER_CLT_PROXIES"]
- sdkroot = ENV["HOMEBREW_SDKROOT"]
- exec(exe, *ARGV) unless sdkroot && File.directory?(sdkroot)
-end
-
-$:.unshift "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8"
-require "pathname"
-
-def canonical_dirname path
- Pathname.new(path).dirname.realpath.to_s
-end
-
-SUPERBIN = canonical_dirname(__FILE__)
-
-exe = `/usr/bin/xcrun --find #{arg0} 2>/dev/null`.chomp
-if File.executable?(exe) && canonical_dirname(exe) != SUPERBIN
- exec(exe, *ARGV)
-end
-
-paths = ENV["PATH"].split(File::PATH_SEPARATOR)
-paths.delete(SUPERBIN)
-paths.each do |path|
- exe = File.join(path, arg0)
- exec(exe, *ARGV) if File.executable?(exe)
-end
-
-abort <<-EOS
-Failed to execute: #{arg0} #{ARGV.join(" ")}
+unset DEVELOPER_DIR
+
+if [ $# -eq 0 ]; then
+ exec /usr/bin/xcrun "$@"
+fi
+
+case "$1" in
+ -*) exec /usr/bin/xcrun "$@" ;;
+esac
+
+arg0=$1
+shift
+
+exe="/usr/bin/${arg0}"
+if [ -x "$exe" ]; then
+ if [ -n "$HOMEBREW_PREFER_CLT_PROXIES" ]; then
+ exec "$exe" "$@"
+ elif [ -z "$HOMEBREW_SDKROOT" -o ! -d "$HOMEBREW_SDKROOT" ]; then
+ exec "$exe" "$@"
+ fi
+fi
+
+SUPERBIN=$(cd "${0%/*}" && pwd -P)
+
+exe=$(/usr/bin/xcrun --find "$arg0" 2>/dev/null)
+if [ -x "$exe" -a "${exe%/*}" != "$SUPERBIN" ]; then
+ exec "$exe" "$@"
+fi
+
+old_IFS=$IFS
+IFS=:
+for path in $PATH; do
+ if [ "$path" = "$SUPERBIN" ]; then
+ continue
+ fi
+
+ exe="${path}/${arg0}"
+ if [ -x "$exe" ]; then
+ exec "$exe" "$@"
+ fi
+done
+IFS=$old_IFS
+
+echo >&2 "
+Failed to execute $arg0 $@
Xcode and/or the CLT appear to be misconfigured. Try one or both of the following:
xcodebuild -license
sudo xcode-select -switch /path/to/Xcode.app
-EOS
+"
+exit 1