| #!/usr/bin/env python |
| # |
| # Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import glob |
| import optparse |
| import os.path |
| import re |
| import subprocess |
| import sys |
| import utils |
| |
| # FIXME: integrate this helper script into the build instead of hardcoding |
| # these paths. |
| RESOURCE_AAR_PATTERN = 'content_shell_apk/resource_aar/*.aar' |
| CONTENT_SHELL_APK_AAR = 'content_shell_apk/content_shell_apk.aar' |
| |
| SRC_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), |
| "..", "..", "..") |
| |
| DART_DIR = os.path.join(SRC_PATH, 'dart') |
| CHROME_VERSION_PATH = os.path.join(SRC_PATH, 'chrome', 'VERSION') |
| |
| def main(): |
| parser = optparse.OptionParser() |
| parser.add_option('--mode', dest='mode', |
| action='store', type='string', |
| help='Build mode (Debug or Release)') |
| parser.add_option('--repo', action='store', type='string', |
| help='Local Maven repository (defaults to ~/.m2)') |
| (options, args) = parser.parse_args() |
| mode = options.mode |
| version = GetVersion() |
| if not (mode in ['debug', 'release']): |
| raise Exception('Invalid build mode') |
| |
| mode = 'Debug' if mode == 'debug' else 'Release' |
| |
| build_root = os.path.join('out', mode) |
| |
| aars = glob.glob(os.path.join(build_root, RESOURCE_AAR_PATTERN)) |
| aars.append(os.path.join(build_root, CONTENT_SHELL_APK_AAR)) |
| |
| flags = [ |
| '-DgroupId=org.dartlang', |
| '-Dversion=%s' % version, |
| '-Dpackaging=aar' |
| ] |
| if options.repo: |
| flags.append('-DlocalRepositoryPath=%s' % options.repo) |
| |
| for aar_file in aars: |
| artifact_id = os.path.splitext(os.path.basename(aar_file))[0] |
| cmd = [ |
| 'mvn', |
| 'install:install-file', |
| '-Dfile=%s' % aar_file, |
| '-DartifactId=%s' % artifact_id, |
| ] |
| cmd.extend(flags) |
| utils.runCommand(cmd) |
| |
| def GetVersion(): |
| version = GetChromeVersion() |
| return '%d.%d.%d-%05d-%06d' % ( |
| version[0], |
| version[1], |
| version[2], |
| version[3], |
| GetDartSVNRevision()) |
| |
| def GetChromeVersion(): |
| version = [] |
| for line in file(CHROME_VERSION_PATH).readlines(): |
| version.append(int(line.strip().split('=')[1])) |
| |
| return version |
| |
| def GetDartSVNRevision(): |
| # When building from tarball use tools/SVN_REVISION |
| svn_revision_file = os.path.join(DART_DIR, 'tools', 'SVN_REVISION') |
| try: |
| with open(svn_revision_file) as fd: |
| return int(fd.read()) |
| except: |
| pass |
| |
| custom_env = dict(os.environ) |
| custom_env['LC_MESSAGES'] = 'en_GB' |
| p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE, |
| stderr = subprocess.STDOUT, shell = IsWindows(), |
| env = custom_env, |
| cwd = DART_DIR) |
| output, _ = p.communicate() |
| revision = ParseSvnInfoOutput(output) |
| if revision: |
| return int(revision) |
| |
| # Check for revision using git (Note: we can't use git-svn because in a |
| # pure-git checkout, "git-svn anyCommand" just hangs!). We look an arbitrary |
| # number of commits backwards (100) to get past any local commits. |
| p = subprocess.Popen(['git', 'log', '-100'], stdout = subprocess.PIPE, |
| stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR) |
| output, _ = p.communicate() |
| revision = ParseGitInfoOutput(output) |
| if revision: |
| return int(revision) |
| |
| # In the rare off-chance that git log -100 doesn't have a svn repo number, |
| # attempt to use "git svn info." |
| p = subprocess.Popen(['git', 'svn', 'info'], stdout = subprocess.PIPE, |
| stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR) |
| output, _ = p.communicate() |
| revision = ParseSvnInfoOutput(output) |
| if revision: |
| return int(revision) |
| |
| # Only fail on the buildbot in case of a SVN client version mismatch. |
| user = GetUserName() |
| return '0' |
| |
| def ParseGitInfoOutput(output): |
| """Given a git log, determine the latest corresponding svn revision.""" |
| for line in output.split('\n'): |
| tokens = line.split() |
| if len(tokens) > 0 and tokens[0] == 'git-svn-id:': |
| return tokens[1].split('@')[1] |
| return None |
| |
| def ParseSvnInfoOutput(output): |
| revision_match = re.search('Last Changed Rev: (\d+)', output) |
| if revision_match: |
| return revision_match.group(1) |
| return None |
| |
| def IsWindows(): |
| return (sys.platform=='win32') |
| |
| if __name__ == '__main__': |
| main() |