Index: tools/run_pub.py |
diff --git a/tools/run_pub.py b/tools/run_pub.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..7a731cce4ad51b138c42136e29a7fd8ef735dc03 |
--- /dev/null |
+++ b/tools/run_pub.py |
@@ -0,0 +1,82 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2015, 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. |
+"""Used to run pub before the SDK has been built""" |
+ |
+import argparse |
+import os |
+import platform |
+import subprocess |
+import sys |
+ |
+SCRIPT_DIR = os.path.dirname(sys.argv[0]) |
+DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..')) |
+PUB_PATH = os.path.join(DART_ROOT, |
+ 'sdk/lib/_internal/pub_generated/bin/pub.dart') |
+CANARY_PATH = os.path.join(DART_ROOT, 'tools', 'canary.dart') |
+ |
+usage = """run_pub.py --package-root=<package root>""" |
+ |
+def BuildArguments(): |
+ result = argparse.ArgumentParser(usage=usage) |
+ result.add_argument("--package-root", help="package root", default=None) |
+ result.add_argument("--dart-executable", help="dart binary", default=None) |
+ return result |
+ |
+def ProcessOptions(options, args): |
+ return ((options.package_root != None) and |
+ (options.dart_executable != None)) |
+ |
+def GetPrebuiltDartExecutablePath(): |
+ osdict = {'Darwin':'macos', 'Linux':'linux', 'Windows':'win32'} |
+ system = platform.system() |
+ try: |
+ osname = osdict[system] |
+ except KeyError: |
+ print >>sys.stderr, ('WARNING: platform "%s" not supported') % (system) |
+ return None; |
+ return os.path.join(DART_ROOT, 'tools', 'testing', 'bin', osname, 'dart') |
+ |
+def RunPub(dart, pkg_root, args): |
+ return subprocess.call([dart, '--package-root=' + pkg_root, PUB_PATH] + args) |
+ |
+def TryRunningExecutable(dart_executable, pkg_root): |
+ return subprocess.call([dart_executable, |
+ '--package-root=' + pkg_root, |
+ CANARY_PATH]) == 42 |
+ |
+def DisplayBootstrapWarning(): |
+ print """\ |
+ |
+ |
+WARNING: Your system cannot run the prebuilt Dart executable. Using the |
+bootstrap Dart executable will make Debug builds long. |
+Please see Wiki for instructions on replacing prebuilt Dart executable. |
+ |
+https://code.google.com/p/dart/wiki/ReplacingPrebuiltDartExecutable |
+ |
+""" |
+ |
+def main(): |
+ # Parse the options. |
+ parser = BuildArguments() |
+ (options, args) = parser.parse_known_args() |
+ if not ProcessOptions(options, args): |
+ parser.print_help() |
+ return 1 |
+ dart_executable = GetPrebuiltDartExecutablePath() |
+ # If the system cannot execute the prebuilt dart executable, use the bootstrap |
+ # executable instead. |
+ if not TryRunningExecutable(dart_executable, options.package_root): |
+ DisplayBootstrapWarning() |
+ dart_executable = options.dart_executable |
+ # If requested, use the bootstrap binary instead of the prebuilt |
+ # executable. |
+ if os.getenv('DART_USE_BOOTSTRAP_BIN') != None: |
+ dart_executable = options.dart_executable |
+ return RunPub(dart_executable, options.package_root, args) |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()); |