# Copyright (c) 2011, 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. #!/usr/bin/env python # # This script builds a Chrome App file (.crx) for Swarm import os import platform import subprocess import sys DART_PATH = os.path.normpath(os.path.dirname(__file__) + '/../../..') CLIENT_PATH = os.path.normpath(DART_PATH + '/client') # Add the tools directory so we can find utils.py. sys.path.append(os.path.abspath(DART_PATH + '/tools')) import utils buildRoot = CLIENT_PATH + '/' + utils.GetBuildRoot( utils.GuessOS(), 'debug', 'dartc') def execute(*command): ''' Executes the given command in a new process. If the command fails (returns non-zero) halts the script and returns that exit code. ''' exitcode = subprocess.call(command) if exitcode != 0: sys.exit(exitcode) def createChromeApp(buildRoot, antTarget, resultFile): buildDir = os.path.join(buildRoot, 'war') # Use ant to create the 'war' directory # TODO(jmesserly): we should factor out as much as possible from the ant file # It's not really doing anything useful for us besides compiling Dart code # with DartC and copying files. But for now, it helps us share code with # our appengine update.py, which is good. execute( DART_PATH + '/third_party/apache_ant/v1_7_1/bin/ant', '-f', 'build-appengine.xml', '-Dbuild.dir=' + buildRoot, antTarget) # Call Dartium (could be any Chrome--but we know Dartium will be there) and # ask it to create the .crx file for us using the checked in developer key. chrome = CLIENT_PATH + '/tests/drt/chrome' # On Mac Chrome is under a .app folder if platform.system() == 'Darwin': chrome = CLIENT_PATH + '/tests/drt/Chromium.app/Contents/MacOS/Chromium' keyFile = DART_PATH + '/samples/swarm/swarm-dev.pem' execute(chrome, '--pack-extension=' + buildDir, '--pack-extension-key=' + keyFile) resultFile = os.path.join(buildRoot, resultFile) os.rename(buildDir + '.crx', resultFile) return os.path.abspath(resultFile) def main(): # Create a DartC and Dartium app dartiumResult = createChromeApp(buildRoot, 'build_dart_app', 'swarm.crx') dartCResult = createChromeApp(buildRoot, 'build_js_app', 'swarm-js.crx') print ''' Successfully created Chrome apps! Dartium: file://%s DartC/JS: file://%s To install, open this URL in Chrome and select Continue at the bottom. ''' % (dartiumResult, dartCResult) return 0 if __name__ == '__main__': sys.exit(main())