OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Helper script to repack paks for a list of locales. | 6 """Helper script to repack paks for a list of locales. |
7 | 7 |
8 Gyp doesn't have any built-in looping capability, so this just provides a way to | 8 Gyp doesn't have any built-in looping capability, so this just provides a way to |
9 loop over a list of locales when repacking pak files, thus avoiding a | 9 loop over a list of locales when repacking pak files, thus avoiding a |
10 proliferation of mostly duplicate, cut-n-paste gyp actions. | 10 proliferation of mostly duplicate, cut-n-paste gyp actions. |
11 """ | 11 """ |
12 | 12 |
13 import getopt | 13 import getopt |
14 import os | 14 import os |
15 import sys | 15 import sys |
16 | 16 |
17 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..', '..', '..', | 17 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', |
18 'tools', 'data_pack')) | 18 'tools', 'data_pack')) |
19 import repack | 19 import repack |
20 | 20 |
21 # The gyp "branding" variable. | 21 # The gyp "branding" variable. |
22 BRANDING = None | 22 BRANDING = None |
23 | 23 |
24 # Some build paths defined by gyp. | 24 # Some build paths defined by gyp. |
25 GRIT_DIR = None | 25 GRIT_DIR = None |
26 SHARE_INT_DIR = None | 26 SHARE_INT_DIR = None |
27 INT_DIR = None | 27 INT_DIR = None |
(...skipping 12 matching lines...) Expand all Loading... |
40 if locale == 'fake-bidi': | 40 if locale == 'fake-bidi': |
41 return '%s/%s.pak' % (INT_DIR, locale) | 41 return '%s/%s.pak' % (INT_DIR, locale) |
42 if sys.platform in ('darwin',): | 42 if sys.platform in ('darwin',): |
43 # For Cocoa to find the locale at runtime, it needs to use '_' instead | 43 # For Cocoa to find the locale at runtime, it needs to use '_' instead |
44 # of '-' (http://crbug.com/20441). Also, 'en-US' should be represented | 44 # of '-' (http://crbug.com/20441). Also, 'en-US' should be represented |
45 # simply as 'en' (http://crbug.com/19165, http://crbug.com/25578). | 45 # simply as 'en' (http://crbug.com/19165, http://crbug.com/25578). |
46 if locale == 'en-US': | 46 if locale == 'en-US': |
47 locale = 'en' | 47 locale = 'en' |
48 return '%s/repack/%s.lproj/locale.pak' % (INT_DIR, locale.replace('-', '_')) | 48 return '%s/repack/%s.lproj/locale.pak' % (INT_DIR, locale.replace('-', '_')) |
49 else: | 49 else: |
50 return '%s/repack/%s.pak' % (INT_DIR, locale) | 50 return os.path.join(INT_DIR, 'repack', locale + '.pak') |
51 | 51 |
52 | 52 |
53 def calc_inputs(locale): | 53 def calc_inputs(locale): |
54 """Determine the files that need processing for the given locale.""" | 54 """Determine the files that need processing for the given locale.""" |
55 inputs = [] | 55 inputs = [] |
56 | 56 |
57 #e.g. '<(grit_out_dir)/generated_resources_da.pak' | 57 #e.g. '<(grit_out_dir)/generated_resources_da.pak' |
58 inputs.append('%s/generated_resources_%s.pak' % (GRIT_DIR, locale)) | 58 inputs.append(os.path.join(GRIT_DIR, 'generated_resources_%s.pak' % locale)) |
59 | 59 |
60 #e.g. '<(grit_out_dir)/locale_settings_da.pak' | 60 #e.g. '<(grit_out_dir)/locale_settings_da.pak' |
61 inputs.append('%s/locale_settings_%s.pak' % (GRIT_DIR, locale)) | 61 inputs.append(os.path.join(GRIT_DIR, 'locale_settings_%s.pak' % locale)) |
62 | 62 |
63 #e.g. '<(grit_out_dir)/platform_locale_settings_da.pak' | 63 #e.g. '<(grit_out_dir)/platform_locale_settings_da.pak' |
64 inputs.append('%s/platform_locale_settings_%s.pak' % (GRIT_DIR, locale)) | 64 inputs.append(os.path.join(GRIT_DIR, |
| 65 'platform_locale_settings_%s.pak' % locale)) |
65 | 66 |
66 #e.g. '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_da.pak' | 67 #e.g. '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_strings_da.pak' |
67 inputs.append('%s/webkit/webkit_strings_%s.pak' % (SHARE_INT_DIR, locale)) | 68 inputs.append(os.path.join(SHARE_INT_DIR, 'webkit', |
| 69 'webkit_strings_%s.pak' % locale)) |
68 | 70 |
69 #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/ui_strings_da.pak', | 71 #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/ui_strings_da.pak', |
70 inputs.append('%s/ui/ui_strings/ui_strings_%s.pak' % ( | 72 inputs.append(os.path.join(SHARE_INT_DIR, 'ui', 'ui_strings', |
71 SHARE_INT_DIR, locale)) | 73 'ui_strings_%s.pak' % locale)) |
72 | 74 |
73 #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/app_locale_settings_da.pak', | 75 #e.g. '<(SHARED_INTERMEDIATE_DIR)/ui/app_locale_settings_da.pak', |
74 inputs.append('%s/ui/app_locale_settings/app_locale_settings_%s.pak' % ( | 76 inputs.append(os.path.join(SHARE_INT_DIR, 'ui', 'app_locale_settings', |
75 SHARE_INT_DIR, locale)) | 77 'app_locale_settings_%s.pak' % locale)) |
76 | 78 |
77 #e.g. '<(grit_out_dir)/google_chrome_strings_da.pak' | 79 #e.g. '<(grit_out_dir)/google_chrome_strings_da.pak' |
78 # or | 80 # or |
79 # '<(grit_out_dir)/chromium_strings_da.pak' | 81 # '<(grit_out_dir)/chromium_strings_da.pak' |
80 inputs.append('%s/%s_strings_%s.pak' % (GRIT_DIR, BRANDING, locale)) | 82 inputs.append(os.path.join( |
| 83 GRIT_DIR, '%s_strings_%s.pak' % (BRANDING, locale))) |
81 | 84 |
82 return inputs | 85 return inputs |
83 | 86 |
84 | 87 |
85 def list_outputs(locales): | 88 def list_outputs(locales): |
86 """Print the names of files that will be generated for the given locales. | 89 """Returns the names of files that will be generated for the given locales. |
87 | 90 |
88 This is to provide gyp the list of output files, so build targets can | 91 This is to provide gyp the list of output files, so build targets can |
89 properly track what needs to be built. | 92 properly track what needs to be built. |
90 """ | 93 """ |
91 outputs = [] | 94 outputs = [] |
92 for locale in locales: | 95 for locale in locales: |
93 outputs.append(calc_output(locale)) | 96 outputs.append(calc_output(locale)) |
94 # Quote each element so filename spaces don't mess up gyp's attempt to parse | 97 # Quote each element so filename spaces don't mess up gyp's attempt to parse |
95 # it into a list. | 98 # it into a list. |
96 print " ".join(['"%s"' % x for x in outputs]) | 99 return " ".join(['"%s"' % x for x in outputs]) |
97 | 100 |
98 | 101 |
99 def list_inputs(locales): | 102 def list_inputs(locales): |
100 """Print the names of files that will be processed for the given locales. | 103 """Returns the names of files that will be processed for the given locales. |
101 | 104 |
102 This is to provide gyp the list of input files, so build targets can properly | 105 This is to provide gyp the list of input files, so build targets can properly |
103 track their prerequisites. | 106 track their prerequisites. |
104 """ | 107 """ |
105 inputs = [] | 108 inputs = [] |
106 for locale in locales: | 109 for locale in locales: |
107 inputs += calc_inputs(locale) | 110 inputs += calc_inputs(locale) |
108 # Quote each element so filename spaces don't mess up gyp's attempt to parse | 111 # Quote each element so filename spaces don't mess up gyp's attempt to parse |
109 # it into a list. | 112 # it into a list. |
110 print " ".join(['"%s"' % x for x in inputs]) | 113 return " ".join(['"%s"' % x for x in inputs]) |
111 | 114 |
112 | 115 |
113 def repack_locales(locales): | 116 def repack_locales(locales): |
114 """ Loop over and repack the given locales.""" | 117 """ Loop over and repack the given locales.""" |
115 for locale in locales: | 118 for locale in locales: |
116 inputs = [] | 119 inputs = [] |
117 inputs += calc_inputs(locale) | 120 inputs += calc_inputs(locale) |
118 output = calc_output(locale) | 121 output = calc_output(locale) |
119 repack.RePack(output, inputs) | 122 repack.RePack(output, inputs) |
120 | 123 |
121 | 124 |
122 def main(argv=None): | 125 def DoMain(argv): |
123 global BRANDING | 126 global BRANDING |
124 global GRIT_DIR | 127 global GRIT_DIR |
125 global SHARE_INT_DIR | 128 global SHARE_INT_DIR |
126 global INT_DIR | 129 global INT_DIR |
127 | 130 |
128 if argv is None: | |
129 argv = sys.argv | |
130 | |
131 short_options = 'iog:s:x:b:h' | 131 short_options = 'iog:s:x:b:h' |
132 long_options = 'help' | 132 long_options = 'help' |
133 | 133 |
134 print_inputs = False | 134 print_inputs = False |
135 print_outputs = False | 135 print_outputs = False |
136 usage_msg = '' | 136 usage_msg = '' |
137 | 137 |
138 helpstr = """\ | 138 helpstr = """\ |
139 Usage: %s [-h] [-i | -o] -g <DIR> -x <DIR> -s <DIR> -b <branding> <locale> [...
] | 139 Usage: %s [-h] [-i | -o] -g <DIR> -x <DIR> -s <DIR> -b <branding> <locale> [...
] |
140 -h, --help Print this help, then exit. | 140 -h, --help Print this help, then exit. |
141 -i Print the expected input file list, then exit. | 141 -i Print the expected input file list, then exit. |
142 -o Print the expected output file list, then exit. | 142 -o Print the expected output file list, then exit. |
143 -g DIR GRIT build files output directory. | 143 -g DIR GRIT build files output directory. |
144 -x DIR Intermediate build files output directory. | 144 -x DIR Intermediate build files output directory. |
145 -s DIR Shared intermediate build files output directory. | 145 -s DIR Shared intermediate build files output directory. |
146 -b branding Branding type of this build. | 146 -b branding Branding type of this build. |
147 locale [...] One or more locales to repack.""" % (argv[0]) | 147 locale [...] One or more locales to repack.""" % ( |
| 148 os.path.basename(__file__)) |
148 | 149 |
149 try: | 150 try: |
150 try: | 151 opts, locales = getopt.getopt(argv, short_options, long_options) |
151 opts, locales = getopt.getopt(argv[1:], short_options, long_options) | 152 except getopt.GetoptError, msg: |
152 except getopt.GetoptError, msg: | 153 raise Usage(str(msg)) |
153 raise Usage(str(msg)) | |
154 | 154 |
155 if not locales: | 155 if not locales: |
156 usage_msg = 'Please specificy at least one locale to process.\n' | 156 usage_msg = 'Please specificy at least one locale to process.\n' |
157 | 157 |
158 for o, a in opts: | 158 for o, a in opts: |
159 if o in ('-i'): | 159 if o in ('-i'): |
160 print_inputs = True | 160 print_inputs = True |
161 elif o in ('-o'): | 161 elif o in ('-o'): |
162 print_outputs = True | 162 print_outputs = True |
163 elif o in ('-g'): | 163 elif o in ('-g'): |
164 GRIT_DIR = a | 164 GRIT_DIR = a |
165 elif o in ('-s'): | 165 elif o in ('-s'): |
166 SHARE_INT_DIR = a | 166 SHARE_INT_DIR = a |
167 elif o in ('-x'): | 167 elif o in ('-x'): |
168 INT_DIR = a | 168 INT_DIR = a |
169 elif o in ('-b'): | 169 elif o in ('-b'): |
170 BRANDING = a | 170 BRANDING = a |
171 elif o in ('-h', '--help'): | 171 elif o in ('-h', '--help'): |
172 print helpstr | 172 raise Usage(helpstr) |
173 return 0 | |
174 | 173 |
175 if not (GRIT_DIR and INT_DIR and SHARE_INT_DIR): | 174 if not (GRIT_DIR and INT_DIR and SHARE_INT_DIR): |
176 usage_msg += 'Please specify all of "-g" and "-x" and "-s".\n' | 175 usage_msg += 'Please specify all of "-g" and "-x" and "-s".\n' |
177 if print_inputs and print_outputs: | 176 if print_inputs and print_outputs: |
178 usage_msg += 'Please specify only one of "-i" or "-o".\n' | 177 usage_msg += 'Please specify only one of "-i" or "-o".\n' |
179 # Need to know the branding, unless we're just listing the outputs. | 178 # Need to know the branding, unless we're just listing the outputs. |
180 if not print_outputs and not BRANDING: | 179 if not print_outputs and not BRANDING: |
181 usage_msg += 'Please specify "-b" to determine the input files.\n' | 180 usage_msg += 'Please specify "-b" to determine the input files.\n' |
182 | 181 |
183 if usage_msg: | 182 if usage_msg: |
184 raise Usage(usage_msg) | 183 raise Usage(usage_msg) |
185 except Usage, err: | |
186 sys.stderr.write(err.msg + '\n') | |
187 sys.stderr.write(helpstr + '\n') | |
188 return 2 | |
189 | 184 |
190 if print_inputs: | 185 if print_inputs: |
191 list_inputs(locales) | 186 return list_inputs(locales) |
192 return 0 | |
193 | 187 |
194 if print_outputs: | 188 if print_outputs: |
195 list_outputs(locales) | 189 return list_outputs(locales) |
196 return 0 | |
197 | 190 |
198 repack_locales(locales) | 191 return repack_locales(locales) |
199 | 192 |
200 if __name__ == '__main__': | 193 if __name__ == '__main__': |
201 sys.exit(main(sys.argv)) | 194 results = DoMain(sys.argv[1:]) |
| 195 if results: |
| 196 print results |
OLD | NEW |