// 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. /// Generates a wrapper around dart2js to ship with the SDK. /// /// The only reason to create this wrapper is to be able to embed the sdk /// version information into the compiler. import 'dart:io'; import 'dart:async'; Future getVersion(var rootPath) { var printVersionScript = rootPath.resolve("tools/make_version.py"); return Process.run("python3", [printVersionScript.toFilePath(), "--quiet"], runInShell: true) .then((result) { if (result.exitCode != 0) { throw "Could not generate version"; } return result.stdout.trim(); }); } Future getDart2jsSnapshotGenerationFile(var rootPath) { return getVersion(rootPath).then((version) { var snapshotGenerationText = """ // @dart = 2.9 import 'package:compiler/src/dart2js.dart' as dart2jsMain; void main(List arguments) { dart2jsMain.BUILD_ID = "$version"; dart2jsMain.main(arguments); } """; return snapshotGenerationText; }); } /** * Takes the following arguments: * --output_dir=val The full path to the output_dir. * --dart2js_main=val The path to the dart2js main script relative to root. */ void main(List arguments) { var validArguments = ["--output_dir", "--dart2js_main"]; var args = {}; for (var argument in 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("output_dir")) throw "Please specify output_dir"; var scriptFile = Uri.base.resolveUri(Platform.script); var path = scriptFile.resolve("."); var rootPath = path.resolve("../.."); getDart2jsSnapshotGenerationFile(rootPath).then((result) { var wrapper = "${args['output_dir']}/dart2js.dart"; new File(wrapper).writeAsStringSync(result); }); }