5
5
library code_transformers.src.dart_sdk;
6
6
7
7
import 'dart:convert' as convert;
8
- import 'dart:io' show File, Platform, Process;
8
+ import 'dart:io' show File, Link, Platform, Process;
9
9
import 'package:path/path.dart' as path;
10
10
import 'package:analyzer/src/generated/engine.dart' ;
11
11
import 'package:analyzer/src/generated/java_io.dart' ;
@@ -23,18 +23,24 @@ String get dartSdkDirectory {
23
23
24
24
bool isSdkDir (String dirname) =>
25
25
new File (path.join (dirname, 'lib' , '_internal' , 'libraries.dart' ))
26
- .existsSync ();
26
+ .existsSync ();
27
27
28
- if (path.split (Platform .executable).length == 1 ) {
28
+ String executable = Platform .executable;
29
+ if (path.split (executable).length == 1 ) {
29
30
// TODO(blois): make this cross-platform.
30
31
// HACK: A single part, hope it's on the path.
31
- var result = Process .runSync ('which' , ['dart' ],
32
- stdoutEncoding: convert.UTF8 );
33
-
34
- var sdkDir = path.dirname (path.dirname (result.stdout));
32
+ executable = Process .runSync ('which' , ['dart' ],
33
+ stdoutEncoding: convert.UTF8 ).stdout.trim ();
34
+ // In case Dart is symlinked (e.g. homebrew on Mac) follow symbolic links.
35
+ var link = new Link (executable);
36
+ if (link.existsSync ()) {
37
+ executable = link.resolveSymbolicLinksSync ();
38
+ }
39
+ var sdkDir = path.dirname (path.dirname (executable));
35
40
if (isSdkDir (sdkDir)) return sdkDir;
36
41
}
37
- var dartDir = path.dirname (path.absolute (Platform .executable));
42
+
43
+ var dartDir = path.dirname (path.absolute (executable));
38
44
// If there's a sub-dir named dart-sdk then we're most likely executing from
39
45
// a dart enlistment build directory.
40
46
if (isSdkDir (path.join (dartDir, 'dart-sdk' ))) {
0 commit comments