OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Set of flags and options passed to the compiler | 5 /// Set of flags and options passed to the compiler |
6 library dev_compiler.src.options; | 6 library dev_compiler.src.options; |
7 | 7 |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 import 'dart:mirrors' show reflectClass, LibraryMirror; | |
9 | 10 |
10 import 'package:args/args.dart'; | 11 import 'package:args/args.dart'; |
11 import 'package:cli_util/cli_util.dart' show getSdkDir; | 12 import 'package:cli_util/cli_util.dart' show getSdkDir; |
12 import 'package:logging/logging.dart' show Level; | 13 import 'package:logging/logging.dart' show Level; |
13 import 'package:path/path.dart' as path; | 14 import 'package:path/path.dart' as path; |
14 import 'package:yaml/yaml.dart'; | |
15 | 15 |
16 import 'package:dev_compiler/strong_mode.dart' show StrongModeOptions; | 16 import 'package:dev_compiler/strong_mode.dart' show StrongModeOptions; |
17 | 17 |
18 /// Options used to set up Source URI resolution in the analysis context. | 18 /// Options used to set up Source URI resolution in the analysis context. |
19 class SourceResolverOptions { | 19 class SourceResolverOptions { |
20 /// Whether to resolve 'package:' uris using the multi-package resolver. | 20 /// Whether to resolve 'package:' uris using the multi-package resolver. |
21 final bool useMultiPackage; | 21 final bool useMultiPackage; |
22 | 22 |
23 /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" | 23 /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" |
24 final Map<String, String> customUrlMappings; | 24 final Map<String, String> customUrlMappings; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 logLevel = Level.LEVELS.firstWhere((l) => l.name == levelName, | 143 logLevel = Level.LEVELS.firstWhere((l) => l.name == levelName, |
144 orElse: () => logLevel); | 144 orElse: () => logLevel); |
145 } | 145 } |
146 var useColors = stdioType(stdout) == StdioType.TERMINAL; | 146 var useColors = stdioType(stdout) == StdioType.TERMINAL; |
147 var sdkPath = args['dart-sdk']; | 147 var sdkPath = args['dart-sdk']; |
148 if (sdkPath == null && !args['mock-sdk']) { | 148 if (sdkPath == null && !args['mock-sdk']) { |
149 sdkPath = getSdkDir(argv).path; | 149 sdkPath = getSdkDir(argv).path; |
150 } | 150 } |
151 var runtimeDir = args['runtime-dir']; | 151 var runtimeDir = args['runtime-dir']; |
152 if (runtimeDir == null) { | 152 if (runtimeDir == null) { |
153 runtimeDir = _computeRuntimeDir(); | 153 // Figure out this library's path |
154 LibraryMirror thisLibrary = reflectClass(CompilerOptions).owner; | |
155 var thisUri = thisLibrary.uri; | |
156 assert(thisUri.scheme == 'package'); | |
157 var libDir = path.dirname(path.dirname(thisLibrary.uri.path)); | |
158 var packageRoot = Platform.packageRoot; | |
159 if (packageRoot == '') packageRoot = 'packages'; | |
160 runtimeDir = path.join(packageRoot, libDir, 'runtime'); | |
154 } | 161 } |
155 var outputDir = args['out']; | 162 var outputDir = args['out']; |
156 if (outputDir == null && serverMode) { | 163 if (outputDir == null && serverMode) { |
157 outputDir = Directory.systemTemp.createTempSync("dev_compiler_out_").path; | 164 outputDir = Directory.systemTemp.createTempSync("dev_compiler_out_").path; |
158 } | 165 } |
159 var dumpInfo = args['dump-info']; | 166 var dumpInfo = args['dump-info']; |
160 if (dumpInfo == null) dumpInfo = serverMode; | 167 if (dumpInfo == null) dumpInfo = serverMode; |
161 | 168 |
162 var customUrlMappings = <String, String>{}; | 169 var customUrlMappings = <String, String>{}; |
163 for (var mapping in args['url-mapping']) { | 170 for (var mapping in args['url-mapping']) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
253 defaultsTo: '8080') | 260 defaultsTo: '8080') |
254 ..addFlag('force-compile', | 261 ..addFlag('force-compile', |
255 help: 'Compile code with static errors', defaultsTo: false) | 262 help: 'Compile code with static errors', defaultsTo: false) |
256 ..addOption('log', abbr: 'l', help: 'Logging level (defaults to severe)') | 263 ..addOption('log', abbr: 'l', help: 'Logging level (defaults to severe)') |
257 ..addFlag('dump-info', | 264 ..addFlag('dump-info', |
258 abbr: 'i', help: 'Dump summary information', defaultsTo: null) | 265 abbr: 'i', help: 'Dump summary information', defaultsTo: null) |
259 ..addOption('dump-info-file', | 266 ..addOption('dump-info-file', |
260 abbr: 'f', | 267 abbr: 'f', |
261 help: 'Dump info json file (requires dump-info)', | 268 help: 'Dump info json file (requires dump-info)', |
262 defaultsTo: null)); | 269 defaultsTo: null)); |
263 | |
264 /// Tries to find the `lib/runtime/` directory of the dev_compiler package. This | |
265 /// works when running devc from it's sources or from a snapshot that is | |
266 /// activated via `pub global activate`. | |
vsm
2015/07/14 23:52:30
Will this still work in the `pub global activate`
Jennifer Messerly
2015/07/15 00:29:41
It should, but folks will need to add an explicit
vsm
2015/07/15 00:45:29
Hmm, how do you add an explicit dep in this case?
Jennifer Messerly
2015/07/15 15:30:43
For checking/compiling: yes
For running --server:
| |
267 String _computeRuntimeDir() { | |
268 var scriptUri = Platform.script; | |
269 var scriptPath = scriptUri.path; | |
270 var file = path.basename(scriptPath); | |
271 var dir = path.dirname(scriptPath); | |
272 var lastdir = path.basename(dir); | |
273 dir = path.dirname(dir); | |
274 | |
275 // Both the source devc.dart and the snapshot generated by pub global activate | |
276 // are under a bin folder. | |
277 if (lastdir != 'bin') return null; | |
278 | |
279 // And both under a project directory containing a pubspec.lock file. | |
280 var lockfile = path.join(dir, 'pubspec.lock'); | |
281 if (!new File(lockfile).existsSync()) return null; | |
282 | |
283 // If running from sources we found it! | |
284 if (file == 'devc.dart') return path.join(dir, 'lib', 'runtime'); | |
285 | |
286 // If running from a pub global snapshot, we need to read the lock file to | |
287 // find where the actual sources are located in the pub cache. | |
288 if (file == 'devc.dart.snapshot') { | |
289 // Note: this depends on implementation details of pub. | |
290 var yaml = loadYaml(new File(lockfile).readAsStringSync()); | |
291 var info = yaml['packages']['dev_compiler']; | |
292 if (info == null) return null; | |
293 | |
294 var cacheDir; | |
295 if (info['source'] == 'hosted') { | |
296 cacheDir = path.join( | |
297 'hosted', 'pub.dartlang.org', 'dev_compiler-${info["version"]}'); | |
298 } else if (info['source'] == 'git') { | |
299 var ref = info['description']['resolved-ref']; | |
300 cacheDir = path.join('git', 'dev_compiler-${ref}'); | |
301 } | |
302 | |
303 // We should be under "/path/to/pub-cache/global_packages/dev_compiler". | |
304 // The pub-cache directory is two levels up, but we verify that the layout | |
305 // looks correct. | |
306 if (path.basename(dir) != 'dev_compiler') return null; | |
307 dir = path.dirname(dir); | |
308 if (path.basename(dir) != 'global_packages') return null; | |
309 dir = path.dirname(dir); | |
310 return path.join(dir, cacheDir, 'lib', 'runtime'); | |
311 } | |
312 return null; | |
313 } | |
OLD | NEW |