| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:io'; |
| |
| import 'package:analyzer/src/util/platform_info.dart'; |
| import 'package:path/path.dart' as path; |
| |
| /// Return the path to the runtime Dart SDK. |
| String getSdkPath() { |
| var executableDir = path.dirname(platform.resolvedExecutable); |
| // When running tests via tools/test.py, in build output directories, or in |
| // Google3 runfiles, search candidate SDK locations for SDK markers. |
| var cwd = Directory.current.path; |
| var candidates = [ |
| path.join(executableDir, 'dart-sdk'), |
| path.dirname(executableDir), |
| executableDir, |
| path.join(cwd, 'third_party', 'dart_lang', 'v2', 'sdk'), |
| path.join(cwd, 'third_party', 'dart_lang', 'macos_sdk'), |
| path.join(executableDir, 'third_party', 'dart_lang', 'v2', 'sdk'), |
| path.join( |
| path.dirname(executableDir), |
| 'third_party', |
| 'dart_lang', |
| 'v2', |
| 'sdk', |
| ), |
| ]; |
| |
| for (var candidate in candidates) { |
| if (File( |
| path.join(candidate, 'lib', '_internal', 'allowed_experiments.json'), |
| ).existsSync() || |
| File(path.join(candidate, 'lib', 'libraries.json')).existsSync()) { |
| return candidate; |
| } |
| } |
| |
| return path.dirname(executableDir); |
| } |