Index: pkg/code_transformers/lib/src/dart_sdk.dart |
diff --git a/pkg/code_transformers/lib/src/dart_sdk.dart b/pkg/code_transformers/lib/src/dart_sdk.dart |
index 5dfcab848905e2668c682aa32832a07eab6477ae..77dd04c51db70da9921114c01ab52d8c146ba16d 100644 |
--- a/pkg/code_transformers/lib/src/dart_sdk.dart |
+++ b/pkg/code_transformers/lib/src/dart_sdk.dart |
@@ -23,18 +23,24 @@ String get dartSdkDirectory { |
bool isSdkDir(String dirname) => |
new File(path.join(dirname, 'lib', '_internal', 'libraries.dart')) |
- .existsSync(); |
+ .existsSync(); |
- if (path.split(Platform.executable).length == 1) { |
+ String executable = Platform.executable; |
+ if (path.split(executable).length == 1) { |
// TODO(blois): make this cross-platform. |
// HACK: A single part, hope it's on the path. |
- var result = Process.runSync('which', ['dart'], |
- stdoutEncoding: convert.UTF8); |
- |
- var sdkDir = path.dirname(path.dirname(result.stdout)); |
+ executable = Process.runSync('which', ['dart'], |
+ stdoutEncoding: convert.UTF8).stdout.trim(); |
+ // In case Dart is symlinked (e.g. homebrew on Mac) follow symbolic links. |
+ var link = new Link(executable); |
+ if (link.existsSync()) { |
+ executable = link.resolveSymbolicLinksSync(); |
+ } |
+ var sdkDir = path.dirname(path.dirname(executable)); |
if (isSdkDir(sdkDir)) return sdkDir; |
} |
- var dartDir = path.dirname(path.absolute(Platform.executable)); |
+ |
+ var dartDir = path.dirname(path.absolute(executable)); |
// If there's a sub-dir named dart-sdk then we're most likely executing from |
// a dart enlistment build directory. |
if (isSdkDir(path.join(dartDir, 'dart-sdk'))) { |