Improvements to automate.py:

- Allow specification of the depot_tools directory via a "depot-tools" flag (issue #592).
- Add ninja build support via a "ninja-build" flag (issue #922).
- Allow relative paths for download directories (issue #942).
- Add the ability to print commands without executing them via a "dry-run" flag.

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1194 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2013-04-09 23:02:58 +00:00
parent e98c1c41a8
commit 006ac136a8
1 changed files with 82 additions and 50 deletions

View File

@ -23,6 +23,7 @@ def run(command_line, working_dir, depot_tools_dir=None):
sys.stdout.write('-------- Running "'+command_line+'" in "'+\ sys.stdout.write('-------- Running "'+command_line+'" in "'+\
working_dir+'"...'+"\n") working_dir+'"...'+"\n")
if not options.dryrun:
args = shlex.split(command_line.replace('\\', '\\\\')) args = shlex.split(command_line.replace('\\', '\\\\'))
return subprocess.check_call(args, cwd=working_dir, env=env, return subprocess.check_call(args, cwd=working_dir, env=env,
shell=(sys.platform == 'win32')) shell=(sys.platform == 'win32'))
@ -91,6 +92,8 @@ parser.add_option('--revision', dest='revision', type="int",
help='CEF source revision') help='CEF source revision')
parser.add_option('--url', dest='url', parser.add_option('--url', dest='url',
help='CEF source URL') help='CEF source URL')
parser.add_option('--depot-tools', dest='depottools', metavar='DIR',
help='download directory for depot_tools', default='')
parser.add_option('--force-config', parser.add_option('--force-config',
action='store_true', dest='forceconfig', default=False, action='store_true', dest='forceconfig', default=False,
help='force Chromium configuration') help='force Chromium configuration')
@ -118,6 +121,12 @@ parser.add_option('--no-release-build',
parser.add_option('--no-distrib', parser.add_option('--no-distrib',
action='store_true', dest='nodistrib', default=False, action='store_true', dest='nodistrib', default=False,
help="don't create the CEF binary distribution") help="don't create the CEF binary distribution")
parser.add_option('--ninja-build',
action='store_true', dest='ninjabuild', default=False,
help="build using ninja")
parser.add_option('--dry-run',
action='store_true', dest='dryrun', default=False,
help="output commands without executing them")
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
# the downloaddir option is required # the downloaddir option is required
@ -176,7 +185,7 @@ except Exception, e:
compat_url+"\n") compat_url+"\n")
raise raise
download_dir = options.downloaddir download_dir = os.path.abspath(options.downloaddir)
if not os.path.exists(download_dir): if not os.path.exists(download_dir):
# create the download directory # create the download directory
os.makedirs(download_dir) os.makedirs(download_dir)
@ -197,6 +206,9 @@ else:
script_ext = '.sh' script_ext = '.sh'
# check if the "depot_tools" directory exists # check if the "depot_tools" directory exists
if options.depottools != '':
depot_tools_dir = os.path.abspath(options.depottools)
else:
depot_tools_dir = os.path.join(download_dir, 'depot_tools') depot_tools_dir = os.path.join(download_dir, 'depot_tools')
if not os.path.exists(depot_tools_dir): if not os.path.exists(depot_tools_dir):
# checkout depot_tools # checkout depot_tools
@ -291,6 +303,7 @@ if release_url_changed or chromium_url_changed or options.forceconfig:
# run gclient config to create the .gclient file # run gclient config to create the .gclient file
run('gclient config '+url, chromium_dir, depot_tools_dir) run('gclient config '+url, chromium_dir, depot_tools_dir)
if not options.dryrun:
path = os.path.join(chromium_dir, '.gclient') path = os.path.join(chromium_dir, '.gclient')
if not os.path.exists(path): if not os.path.exists(path):
sys.stderr.write(".gclient file was not created\n") sys.stderr.write(".gclient file was not created\n")
@ -327,6 +340,7 @@ if options.forceclean:
# revert all Chromium changes and delete all unversioned files # revert all Chromium changes and delete all unversioned files
run('gclient revert -n', chromium_dir, depot_tools_dir) run('gclient revert -n', chromium_dir, depot_tools_dir)
if not options.dryrun:
# remove the build output directories # remove the build output directories
output_dirs = [] output_dirs = []
if platform == 'windows': if platform == 'windows':
@ -337,6 +351,9 @@ if options.forceclean:
elif platform == 'linux': elif platform == 'linux':
output_dirs.append(os.path.join(chromium_src_dir, 'out')) output_dirs.append(os.path.join(chromium_src_dir, 'out'))
if options.ninjabuild:
output_dirs.append(os.path.join(chromium_src_dir, 'out'))
for output_dir in output_dirs: for output_dir in output_dirs:
if os.path.exists(output_dir): if os.path.exists(output_dir):
shutil.rmtree(output_dir, onerror=onerror) shutil.rmtree(output_dir, onerror=onerror)
@ -356,7 +373,7 @@ elif release_url_changed or options.forceupdate:
run('gclient sync --jobs 8 --force', chromium_dir, depot_tools_dir) run('gclient sync --jobs 8 --force', chromium_dir, depot_tools_dir)
if not os.path.exists(cef_src_dir) or cef_url_changed: if not os.path.exists(cef_src_dir) or cef_url_changed:
if cef_url_changed and os.path.exists(cef_src_dir): if not options.dryrun and cef_url_changed and os.path.exists(cef_src_dir):
# delete the cef directory (it will be re-downloaded) # delete the cef directory (it will be re-downloaded)
shutil.rmtree(cef_src_dir) shutil.rmtree(cef_src_dir)
@ -368,10 +385,23 @@ elif cef_rev_changed or options.forceupdate:
if any_changed or options.forceupdate: if any_changed or options.forceupdate:
# create CEF projects # create CEF projects
if options.ninjabuild:
os.environ['GYP_GENERATORS'] = 'ninja'
path = os.path.join(cef_src_dir, 'cef_create_projects'+script_ext) path = os.path.join(cef_src_dir, 'cef_create_projects'+script_ext)
run(path, cef_src_dir, depot_tools_dir) run(path, cef_src_dir, depot_tools_dir)
if any_changed or options.forcebuild: if any_changed or options.forcebuild:
if options.ninjabuild:
command = 'ninja -C '
target = ' cefclient'
if not options.nodebugbuild:
# make CEF Debug build
run(command + os.path.join('out', 'Debug') + target, chromium_src_dir, depot_tools_dir)
if not options.noreleasebuild:
# make CEF Release build
run(command + os.path.join('out', 'Release') + target, chromium_src_dir, depot_tools_dir)
else:
path = os.path.join(cef_tools_dir, 'build_projects'+script_ext) path = os.path.join(cef_tools_dir, 'build_projects'+script_ext)
if not options.nodebugbuild: if not options.nodebugbuild:
@ -386,4 +416,6 @@ if any_changed or options.forcedistrib:
if not options.nodistrib: if not options.nodistrib:
# make CEF binary distribution # make CEF binary distribution
path = os.path.join(cef_tools_dir, 'make_distrib'+script_ext) path = os.path.join(cef_tools_dir, 'make_distrib'+script_ext)
if options.ninjabuild:
path = path + ' --ninja-build'
run(path, cef_tools_dir, depot_tools_dir) run(path, cef_tools_dir, depot_tools_dir)