summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/chrome.gyp176
-rwxr-xr-xchrome/tools/build/repack_locales.py179
2 files changed, 213 insertions, 142 deletions
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index eee1158..d8de523 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -22,6 +22,17 @@
'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/chrome',
'mac_xib_localizer_tool_path': '<(DEPTH)/build/mac/generate_localizer',
'mac_xib_localizers_dir': '<(INTERMEDIATE_DIR)/xib_localizers',
+ # TODO(mmoss) This might need to go somewhere more general, then we can use
+ # it to also rewrite app/locales/locales.gyp with a helper script.
+ 'locales': [
+ 'ar', 'bg', 'bn', 'ca', 'cs', 'da', 'de', 'el', 'en-GB',
+ 'en-US', 'es-419', 'es', 'et', 'fi', 'fil', 'fr', 'gu', 'he',
+ 'hi', 'hr', 'hu', 'id', 'it', 'ja', 'kn', 'ko', 'lt', 'lv',
+ 'ml', 'mr', 'nb', 'nl', 'or', 'pl', 'pt-BR', 'pt-PT', 'ro',
+ 'ru', 'sk', 'sl', 'sr', 'sv', 'ta', 'te', 'th', 'tr',
+ 'uk', 'vi', 'zh-CN', 'zh-TW',
+ ],
+ 'repack_locales_cmd': ['python', 'tools/build/repack_locales.py',],
'browser_tests_sources': [
'browser/browser_browsertest.cc',
'browser/crash_recovery_browsertest.cc',
@@ -191,6 +202,8 @@
],
'outputs': [
'<(grit_out_dir)/grit/<(RULE_INPUT_ROOT).h',
+ # TODO(mmoss) Generate this list from a helper script, like
+ # repack_locales_cmd.
'<(grit_out_dir)/<(RULE_INPUT_ROOT)_da.pak',
'<(grit_out_dir)/<(RULE_INPUT_ROOT)_en-US.pak',
'<(grit_out_dir)/<(RULE_INPUT_ROOT)_he.pak',
@@ -2866,11 +2879,9 @@
},
{
'destination': '<(PRODUCT_DIR)/locales',
- 'files': ['<(INTERMEDIATE_DIR)/repack/da.pak',
- '<(INTERMEDIATE_DIR)/repack/en-US.pak',
- '<(INTERMEDIATE_DIR)/repack/he.pak',
- '<(INTERMEDIATE_DIR)/repack/zh-TW.pak',
- ],
+ 'files': [
+ '>!@(<(repack_locales_cmd) -o -g \'<(grit_out_dir)\' -s \'<(SHARED_INTERMEDIATE_DIR)\' -x \'<(INTERMEDIATE_DIR)\' <(locales))',
+ ],
},
{
'destination': '<(PRODUCT_DIR)/themes',
@@ -3217,165 +3228,46 @@
],
},
{
- # TODO(mark): Make this work with more languages than the
- # hardcoded da, en-US, he, zh-TW.
- 'action_name': 'repack_locale_da',
+ 'action_name': 'repack_locales',
'variables': {
- 'pak_inputs': [
- '<(grit_out_dir)/generated_resources_da.pak',
- '<(grit_out_dir)/locale_settings_da.pak',
- '<(SHARED_INTERMEDIATE_DIR)/app/app_strings_da.pak',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_da.pak',
- ],
'conditions': [
['branding=="Chrome"', {
- 'pak_inputs': [
- '<(grit_out_dir)/google_chrome_strings_da.pak',
- ]
+ 'branding_flag': ['-b', 'google_chrome',],
}, { # else: branding!="Chrome"
- 'pak_inputs': [
- '<(grit_out_dir)/chromium_strings_da.pak',
- ]
+ 'branding_flag': ['-b', 'chromium',],
}],
],
},
'inputs': [
- '<(repack_path)',
- '<@(pak_inputs)',
+ 'tools/build/repack_locales.py',
+ # NOTE: Ideally the common command args would be shared amongst
+ # inputs/outputs/action, but the args include shell variables
+ # which need to be passed intact, and command expansion wants
+ # to expand the shell variables. Adding the explicit quoting
+ # here was the only way it seemed to work.
+ '>!@(<(repack_locales_cmd) -i <(branding_flag) -g \'<(grit_out_dir)\' -s \'<(SHARED_INTERMEDIATE_DIR)\' -x \'<(INTERMEDIATE_DIR)\' <(locales))',
],
'conditions': [
['OS=="mac"', {
'outputs': [
'<(INTERMEDIATE_DIR)/repack/da.lproj/locale.pak',
- ],
- }, { # else: OS!="mac"
- 'outputs': [
- '<(INTERMEDIATE_DIR)/repack/da.pak',
- ],
- }],
- ],
- 'action': ['python', '<(repack_path)', '<@(_outputs)', '<@(pak_inputs)'],
- },
- {
- # TODO(mark): Make this work with more languages than the
- # hardcoded da, en-US, he, zh-TW.
- 'action_name': 'repack_locale_en_us',
- 'variables': {
- 'pak_inputs': [
- '<(grit_out_dir)/generated_resources_en-US.pak',
- '<(grit_out_dir)/locale_settings_en-US.pak',
- '<(SHARED_INTERMEDIATE_DIR)/app/app_strings_en-US.pak',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_en-US.pak',
- ],
- 'conditions': [
- ['branding=="Chrome"', {
- 'pak_inputs': [
- '<(grit_out_dir)/google_chrome_strings_en-US.pak',
- ]
- }, { # else: branding!="Chrome"
- 'pak_inputs': [
- '<(grit_out_dir)/chromium_strings_en-US.pak',
- ]
- }],
- ],
- },
- 'inputs': [
- '<(repack_path)',
- '<@(pak_inputs)',
- ],
- 'conditions': [
- ['OS=="mac"', {
- 'outputs': [
'<(INTERMEDIATE_DIR)/repack/en.lproj/locale.pak',
- ],
- }, { # else: OS!="mac"
- 'outputs': [
- '<(INTERMEDIATE_DIR)/repack/en-US.pak',
- ],
- }],
- ],
- 'action': ['python', '<(repack_path)', '<@(_outputs)', '<@(pak_inputs)'],
- 'process_outputs_as_mac_bundle_resources': 1,
- },
- {
- # TODO(mark): Make this work with more languages than the
- # hardcoded da, en-US, he, zh-TW.
- 'action_name': 'repack_locale_he',
- 'variables': {
- 'pak_inputs': [
- '<(grit_out_dir)/generated_resources_he.pak',
- '<(grit_out_dir)/locale_settings_he.pak',
- '<(SHARED_INTERMEDIATE_DIR)/app/app_strings_he.pak',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_he.pak',
- ],
- 'conditions': [
- ['branding=="Chrome"', {
- 'pak_inputs': [
- '<(grit_out_dir)/google_chrome_strings_he.pak',
- ]
- }, { # else: branding!="Chrome"
- 'pak_inputs': [
- '<(grit_out_dir)/chromium_strings_he.pak',
- ]
- }],
- ],
- },
- 'inputs': [
- '<(repack_path)',
- '<@(pak_inputs)',
- ],
- 'conditions': [
- ['OS=="mac"', {
- 'outputs': [
'<(INTERMEDIATE_DIR)/repack/he.lproj/locale.pak',
- ],
- }, { # else: OS!="mac"
- 'outputs': [
- '<(INTERMEDIATE_DIR)/repack/he.pak',
- ],
- }],
- ],
- 'action': ['python', '<(repack_path)', '<@(_outputs)', '<@(pak_inputs)'],
- },
- {
- # TODO(mark): Make this work with more languages than the
- # hardcoded da, en-US, he, zh-TW.
- 'action_name': 'repack_locale_zh_tw',
- 'variables': {
- 'pak_inputs': [
- '<(grit_out_dir)/generated_resources_zh-TW.pak',
- '<(grit_out_dir)/locale_settings_zh-TW.pak',
- '<(SHARED_INTERMEDIATE_DIR)/app/app_strings_zh-TW.pak',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_zh-TW.pak',
- ],
- 'conditions': [
- ['branding=="Chrome"', {
- 'pak_inputs': [
- '<(grit_out_dir)/google_chrome_strings_zh-TW.pak',
- ]
- }, { # else: branding!="Chrome"
- 'pak_inputs': [
- '<(grit_out_dir)/chromium_strings_zh-TW.pak',
- ]
- }],
- ],
- },
- 'inputs': [
- '<(repack_path)',
- '<@(pak_inputs)',
- ],
- 'conditions': [
- ['OS=="mac"', {
- 'outputs': [
'<(INTERMEDIATE_DIR)/repack/zh.lproj/locale.pak',
],
}, { # else: OS!="mac"
'outputs': [
- '<(INTERMEDIATE_DIR)/repack/zh-TW.pak',
+ '>!@(<(repack_locales_cmd) -o -g \'<(grit_out_dir)\' -s \'<(SHARED_INTERMEDIATE_DIR)\' -x \'<(INTERMEDIATE_DIR)\' <(locales))',
],
}],
],
- 'action': ['python', '<(repack_path)', '<@(_outputs)', '<@(pak_inputs)'],
+ 'action': ['<@(repack_locales_cmd)',
+ '<@(branding_flag)',
+ '-g', '<(grit_out_dir)',
+ '-s', '<(SHARED_INTERMEDIATE_DIR)',
+ '-x', '<(INTERMEDIATE_DIR)',
+ '<@(locales)',
+ ],
},
],
'sources!': [
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))