diff options
author | mmoss@chromium.org <mmoss@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 21:51:12 +0000 |
---|---|---|
committer | mmoss@chromium.org <mmoss@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 21:51:12 +0000 |
commit | 021d688a1e02ae7bd88e54162d5d25e1dae52e7c (patch) | |
tree | 2dcc5e9c5262021a6318d590b151b6fe97730715 /chrome/tools/build | |
parent | 82d47659dc5fcc2ac10c34c6ca51c59b48b16297 (diff) | |
download | chromium_src-021d688a1e02ae7bd88e54162d5d25e1dae52e7c.zip chromium_src-021d688a1e02ae7bd88e54162d5d25e1dae52e7c.tar.gz chromium_src-021d688a1e02ae7bd88e54162d5d25e1dae52e7c.tar.bz2 |
Rewrite gyp rules with helper script to generate all langpaks on Linux.
crbug.com/14790
Review URL: http://codereview.chromium.org/149781
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22418 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/tools/build')
-rwxr-xr-x | chrome/tools/build/repack_locales.py | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/chrome/tools/build/repack_locales.py b/chrome/tools/build/repack_locales.py new file mode 100755 index 0000000..8726ade --- /dev/null +++ b/chrome/tools/build/repack_locales.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +# Copyright (c) 2009 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. + +"""Helper script to repack paks for a list of locales. + +Gyp doesn't have any built-in looping capability, so this just provides a way to +loop over a list of locales when repacking pak files, thus avoiding a +proliferation of mostly duplicate, cut-n-paste gyp actions. +""" + +import getopt +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..', '..', '..', + 'tools', 'data_pack')) +import repack + +# The gyp "branding" variable. +BRANDING = None + +# Some build paths defined by gyp. +GRIT_DIR = None +SHARE_INT_DIR = None +INT_DIR = None + + +class Usage(Exception): + def __init__(self, msg): + self.msg = msg + + +def calc_output(locale): + """Determine the file that will be generated for the given locale.""" + #e.g. '<(INTERMEDIATE_DIR)/repack/da.pak', + return '%s/repack/%s.pak' % (INT_DIR, locale) + + +def calc_inputs(locale): + """Determine the files that need processing for the given locale.""" + inputs = [] + + #e.g. '<(grit_out_dir)/generated_resources_da.pak' + inputs.append('%s/generated_resources_%s.pak' % (GRIT_DIR, locale)) + + #e.g. '<(grit_out_dir)/locale_settings_da.pak' + inputs.append('%s/locale_settings_%s.pak' % (GRIT_DIR, locale)) + + #e.g. '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_da.pak' + inputs.append('%s/webkit/webkit_strings_%s.pak' % (SHARE_INT_DIR, locale)) + + #e.g. '<(grit_out_dir)/google_chrome_strings_da.pak' + # or + # '<(grit_out_dir)/chromium_strings_da.pak' + inputs.append('%s/%s_strings_%s.pak' % (GRIT_DIR, BRANDING, locale)) + + return inputs + + +def list_outputs(locales): + """Print the names of files that will be generated for the given locales. + + This is to provide gyp the list of output files, so build targets can + properly track what needs to be built. + """ + outputs = [] + for locale in locales: + outputs.append(calc_output(locale)) + # Quote each element so filename spaces don't mess up gyp's attempt to parse + # it into a list. + print " ".join(['"%s"' % x for x in outputs]) + + +def list_inputs(locales): + """Print the names of files that will be processed for the given locales. + + This is to provide gyp the list of input files, so build targets can properly + track their prerequisites. + """ + inputs = [] + for locale in locales: + inputs += calc_inputs(locale) + # Quote each element so filename spaces don't mess up gyp's attempt to parse + # it into a list. + print " ".join(['"%s"' % x for x in inputs]) + + +def repack_locales(locales): + """ Loop over and repack the given locales.""" + for locale in locales: + inputs = [] + inputs += calc_inputs(locale) + output = calc_output(locale) + print 'Repacking %s -> %s' % (inputs, output) + repack.RePack(output, inputs) + + +def main(argv=None): + global BRANDING + global GRIT_DIR + global SHARE_INT_DIR + global INT_DIR + + if argv is None: + argv = sys.argv + + short_options = 'iog:s:x:b:h' + long_options = 'help' + + print_inputs = False + print_outputs = False + usage_msg = '' + + helpstr = """\ +Usage: %s [-h] [-i | -o] -g <DIR> -x <DIR> -s <DIR> -b <branding> <locale> [...] + -h, --help Print this help, then exit. + -i Print the expected input file list, then exit. + -o Print the expected output file list, then exit. + -g DIR GRIT build files output directory. + -x DIR Intermediate build files output directory. + -s DIR Shared intermediate build files output directory. + -b branding Branding type of this build. + locale [...] One or more locales to repack.""" % (argv[0]) + + try: + try: + opts, locales = getopt.getopt(argv[1:], short_options, long_options) + except getopt.GetoptError, msg: + raise Usage(str(msg)) + + if not locales: + usage_msg = 'Please specificy at least one locale to process.\n' + + for o, a in opts: + if o in ('-i'): + print_inputs = True + elif o in ('-o'): + print_outputs = True + elif o in ('-g'): + GRIT_DIR = a + elif o in ('-s'): + SHARE_INT_DIR = a + elif o in ('-x'): + INT_DIR = a + elif o in ('-b'): + BRANDING = a + elif o in ('-h', '--help'): + print helpstr + return 0 + + if not (GRIT_DIR and INT_DIR and SHARE_INT_DIR): + usage_msg += 'Please specify all of "-g" and "-x" and "-s".\n' + if print_inputs and print_outputs: + usage_msg += 'Please specify only one of "-i" or "-o".\n' + # Need to know the branding, unless we're just listing the outputs. + if not print_outputs and not BRANDING: + usage_msg += 'Please specify "-b" to determine the input files.\n' + + if usage_msg: + raise Usage(usage_msg) + except Usage, err: + sys.stderr.write(err.msg + '\n') + sys.stderr.write(helpstr + '\n') + return 2 + + if print_inputs: + list_inputs(locales) + return 0 + + if print_outputs: + list_outputs(locales) + return 0 + + repack_locales(locales) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) |