Index: sdk/bin/pub |
diff --git a/sdk/bin/pub b/sdk/bin/pub |
index 231da3ebc4cbc2580e647e355e622608a6fa7ab5..42f84fce029f3bf86b7b05916877c25dc8158b27 100755 |
--- a/sdk/bin/pub |
+++ b/sdk/bin/pub |
@@ -6,10 +6,21 @@ |
# Run pub.dart on the Dart VM. This script assumes the Dart SDK's directory |
# structure. |
-# Setting BIN_DIR this way is ugly, but is needed to handle the case where |
-# dart-sdk/bin has been symlinked to. On MacOS, readlink doesn't work |
-# with this case. |
-BIN_DIR="$(cd "${0%/*}" ; pwd -P)" |
+function follow_links() { |
+ file="$1" |
+ while [ -h "$file" ]; do |
+ # On Mac OS, readlink -f doesn't work. |
+ file="$(readlink "$file")" |
+ done |
+ echo "$file" |
+} |
+ |
+# Unlike $0, $BASH_SOURCE points to the absolute path of this file. |
+PROG_NAME="$(follow_links "$BASH_SOURCE")" |
+ |
+# Handle the case where dart-sdk/bin has been symlinked to. |
+BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" |
+ |
SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)" |
SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot" |
@@ -40,4 +51,4 @@ else |
PUB="$SDK_DIR/lib/_internal/pub/bin/pub.dart" |
exec "$DART" "--package-root=$PACKAGES_DIR" "$PUB" "$@" |
-fi |
+fi |