dart-sdk/tools/run_pub.py
nweiz@google.com c8de060c54 Revert "Revert "Use native async/await support in pub.""
The VM now fully supports all the weird async stuff pub is doing, and all the
tests pass with native async/await!

Previous CLs were r43484 and r43483.

R=rnystrom@google.com

Review URL: https://codereview.chromium.org//937243002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43897 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-19 22:28:54 +00:00

105 lines
3.5 KiB
Python
Executable file

#!/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/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(suffix):
osdict = {'Darwin':'macos', 'Linux':'linux', 'Windows':'windows'}
system = platform.system()
executable_name = 'dart'
if system == 'Windows':
executable_name = 'dart.exe'
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,
executable_name + suffix)
def RunPub(dart, pkg_root, args):
return subprocess.call([dart, '--package-root=' + pkg_root, PUB_PATH] + args)
def TryRunningExecutable(dart_executable, pkg_root):
try:
return subprocess.call([dart_executable,
'--package-root=' + pkg_root,
CANARY_PATH]) == 42
except:
return False;
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 FindDartExecutable(fallback_executable, package_root):
# If requested, use the bootstrap binary instead of the prebuilt
# executable.
if os.getenv('DART_USE_BOOTSTRAP_BIN') != None:
return fallback_executable
# Try to find a working prebuilt dart executable.
dart_executable = GetPrebuiltDartExecutablePath('')
if TryRunningExecutable(dart_executable, package_root):
return dart_executable
dart_executable = GetPrebuiltDartExecutablePath('-arm')
if TryRunningExecutable(dart_executable, package_root):
return dart_executable
dart_executable = GetPrebuiltDartExecutablePath('-mips')
if TryRunningExecutable(dart_executable, package_root):
return dart_executable
# If the system cannot execute a prebuilt dart executable, use the bootstrap
# executable instead.
DisplayBootstrapWarning()
return fallback_executable
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 = FindDartExecutable(options.dart_executable,
options.package_root)
return RunPub(dart_executable, options.package_root, args)
if __name__ == '__main__':
sys.exit(main())