| // Copyright (c) 2013, 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'; |
| |
| Future<String> getVersion(var options, var rootPath) { |
| var os = Platform.operatingSystem; |
| var suffix = os == 'windows' ? '.exe' : ''; |
| var checkedInBinary = |
| rootPath.join(new Path('tools/testing/bin/$os/dart$suffix')); |
| var versionPath = rootPath.append("tools").append("version.dart"); |
| return Process.run(checkedInBinary.toNativePath(), |
| [versionPath.toNativePath()]) |
| .then((result) { |
| if (result.exitCode != 0) { |
| throw "Could not generate version"; |
| } |
| return result.stdout.trim(); |
| }); |
| } |
| |
| Future<String> getSnapshotGenerationFile(var options, var args, var rootPath) { |
| var dart2js = rootPath.append(args["dart2js_main"]); |
| var dartdoc = rootPath.append(args["dartdoc_main"]); |
| |
| return getVersion(options, rootPath).then((version) { |
| var snapshotGenerationText = |
| """ |
| import '${dart2js}' as dart2jsMain; |
| import '${dartdoc}' as dartdocMain; |
| import 'dart:io'; |
| |
| void main() { |
| Options options = new Options(); |
| if (options.arguments.length < 1) throw "No tool given as argument"; |
| String tool = options.arguments.removeAt(0); |
| if (tool == "dart2js") { |
| dart2jsMain.BUILD_ID = "$version"; |
| dart2jsMain.mainWithErrorHandler(options); |
| } else if (tool == "dartdoc") { |
| dartdocMain.mainWithOptions(options); |
| } |
| } |
| |
| """; |
| return snapshotGenerationText; |
| }); |
| } |
| |
| void writeSnapshotFile(var path, var content) { |
| File file = new File(path); |
| var writer = file.openSync(mode: FileMode.WRITE); |
| writer.writeStringSync(content); |
| writer.close(); |
| } |
| |
| Future createSnapshot(var options, var dart_file, var packageRoot) { |
| return Process.run(options.executable, |
| ["--package-root=$packageRoot", |
| "--snapshot=$dart_file.snapshot", |
| dart_file]) |
| .then((result) { |
| if (result.exitCode != 0) { |
| throw "Could not generate snapshot"; |
| } |
| }); |
| } |
| |
| /** |
| * Takes the following arguments: |
| * --output_dir=val The full path to the output_dir. |
| * --dart2js_main=val The path to the dart2js main script releative to root. |
| */ |
| void main() { |
| Options options = new Options(); |
| var validArguments = ["--output_dir", "--dart2js_main", "--dartdoc_main", |
| "--package_root"]; |
| var args = {}; |
| for (var argument in options.arguments) { |
| var argumentSplit = argument.split("="); |
| if (argumentSplit.length != 2) throw "Invalid argument $argument, no ="; |
| if (!validArguments.contains(argumentSplit[0])) { |
| throw "Invalid argument $argument"; |
| } |
| args[argumentSplit[0].substring(2)] = argumentSplit[1]; |
| } |
| if (!args.containsKey("dart2js_main")) throw "Please specify dart2js_main"; |
| if (!args.containsKey("dartdoc_main")) throw "Please specify dartdoc_main"; |
| if (!args.containsKey("output_dir")) throw "Please specify output_dir"; |
| if (!args.containsKey("package_root")) throw "Please specify package_root"; |
| |
| var scriptFile = new File(new File(options.script).fullPathSync()); |
| var path = new Path(scriptFile.directory.path); |
| var rootPath = path.directoryPath.directoryPath; |
| getSnapshotGenerationFile(options, args, rootPath).then((result) { |
| var wrapper = "${args['output_dir']}/utils_wrapper.dart"; |
| writeSnapshotFile(wrapper, result); |
| createSnapshot(options, wrapper, args["package_root"]); |
| }); |
| } |