44f894457b
BUG= R=blois@google.com Review URL: https://codereview.chromium.org//555193002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40053 260f80e4-7a28-3924-810f-c04153c831b5
143 lines
4.3 KiB
Python
Executable File
143 lines
4.3 KiB
Python
Executable File
#!/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()
|