OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2014 The Chromium Authors. All rights reserved. | 3 # Copyright 2014 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Writes a build_config file. | 7 """Writes a build_config file. |
8 | 8 |
9 The build_config file for a target is a json file containing information about | 9 The build_config file for a target is a json file containing information about |
10 how to build that target based on the target's dependencies. This includes | 10 how to build that target based on the target's dependencies. This includes |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 for path in runtime_deps_files: | 202 for path in runtime_deps_files: |
203 with open(path) as f: | 203 with open(path) as f: |
204 for line in f: | 204 for line in f: |
205 line = line.rstrip() | 205 line = line.rstrip() |
206 if not line.endswith('.so'): | 206 if not line.endswith('.so'): |
207 continue | 207 continue |
208 ret.append(os.path.normpath(line)) | 208 ret.append(os.path.normpath(line)) |
209 ret.reverse() | 209 ret.reverse() |
210 return ret | 210 return ret |
211 | 211 |
212 | |
213 def _CreateJavaLibrariesList(library_paths): | 212 def _CreateJavaLibrariesList(library_paths): |
214 """Returns a java literal array with the "base" library names: | 213 """ Create a java literal array with the "base" library names: |
215 e.g. libfoo.so -> foo | 214 e.g. libfoo.so -> foo |
216 """ | 215 """ |
217 return ('{%s}' % ','.join(['"%s"' % s[3:-3] for s in library_paths])) | 216 return ('{%s}' % ','.join(['"%s"' % s[3:-3] for s in library_paths])) |
218 | 217 |
219 | |
220 def _CreateJavaAssetList(assets): | |
221 """Returns a java literal array from a list of assets in the form src:dst.""" | |
222 return '{%s}' % ','.join(sorted(['"%s"' % a.split(':')[1] for a in assets])) | |
223 | |
224 | |
225 def main(argv): | 218 def main(argv): |
226 parser = optparse.OptionParser() | 219 parser = optparse.OptionParser() |
227 build_utils.AddDepfileOption(parser) | 220 build_utils.AddDepfileOption(parser) |
228 parser.add_option('--build-config', help='Path to build_config output.') | 221 parser.add_option('--build-config', help='Path to build_config output.') |
229 parser.add_option( | 222 parser.add_option( |
230 '--type', | 223 '--type', |
231 help='Type of this target (e.g. android_library).') | 224 help='Type of this target (e.g. android_library).') |
232 parser.add_option( | 225 parser.add_option( |
233 '--deps-configs', | 226 '--deps-configs', |
234 help='List of paths for dependency\'s build_config files. ') | 227 help='List of paths for dependency\'s build_config files. ') |
235 | 228 |
236 # android_resources options | 229 # android_resources options |
237 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.') | 230 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.') |
238 parser.add_option('--resources-zip', help='Path to target\'s resources zip.') | 231 parser.add_option('--resources-zip', help='Path to target\'s resources zip.') |
239 parser.add_option('--r-text', help='Path to target\'s R.txt file.') | 232 parser.add_option('--r-text', help='Path to target\'s R.txt file.') |
240 parser.add_option('--package-name', | 233 parser.add_option('--package-name', |
241 help='Java package name for these resources.') | 234 help='Java package name for these resources.') |
242 parser.add_option('--android-manifest', help='Path to android manifest.') | 235 parser.add_option('--android-manifest', help='Path to android manifest.') |
| 236 parser.add_option('--is-locale-resource', action='store_true', |
| 237 help='Whether it is locale resource.') |
243 parser.add_option('--resource-dirs', action='append', default=[], | 238 parser.add_option('--resource-dirs', action='append', default=[], |
244 help='GYP-list of resource dirs') | 239 help='GYP-list of resource dirs') |
245 | 240 |
246 # android_assets options | 241 # android_assets options |
247 parser.add_option('--asset-sources', help='List of asset sources.') | 242 parser.add_option('--asset-sources', help='List of asset sources.') |
248 parser.add_option('--asset-renaming-sources', | 243 parser.add_option('--asset-renaming-sources', |
249 help='List of asset sources with custom destinations.') | 244 help='List of asset sources with custom destinations.') |
250 parser.add_option('--asset-renaming-destinations', | 245 parser.add_option('--asset-renaming-destinations', |
251 help='List of asset custom destinations.') | 246 help='List of asset custom destinations.') |
252 parser.add_option('--disable-asset-compression', action='store_true', | 247 parser.add_option('--disable-asset-compression', action='store_true', |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 | 283 |
289 parser.add_option('--tested-apk-config', | 284 parser.add_option('--tested-apk-config', |
290 help='Path to the build config of the tested apk (for an instrumentation ' | 285 help='Path to the build config of the tested apk (for an instrumentation ' |
291 'test apk).') | 286 'test apk).') |
292 parser.add_option('--proguard-enabled', action='store_true', | 287 parser.add_option('--proguard-enabled', action='store_true', |
293 help='Whether proguard is enabled for this apk.') | 288 help='Whether proguard is enabled for this apk.') |
294 parser.add_option('--proguard-configs', | 289 parser.add_option('--proguard-configs', |
295 help='GYP-list of proguard flag files to use in final apk.') | 290 help='GYP-list of proguard flag files to use in final apk.') |
296 parser.add_option('--proguard-info', | 291 parser.add_option('--proguard-info', |
297 help='Path to the proguard .info output for this apk.') | 292 help='Path to the proguard .info output for this apk.') |
| 293 parser.add_option('--has-alternative-locale-resource', action='store_true', |
| 294 help='Whether there is alternative-locale-resource in direct deps') |
298 parser.add_option('--fail', | 295 parser.add_option('--fail', |
299 help='GYP-list of error message lines to fail with.') | 296 help='GYP-list of error message lines to fail with.') |
300 | 297 |
301 options, args = parser.parse_args(argv) | 298 options, args = parser.parse_args(argv) |
302 | 299 |
303 if args: | 300 if args: |
304 parser.error('No positional arguments should be given.') | 301 parser.error('No positional arguments should be given.') |
305 if options.fail: | 302 if options.fail: |
306 parser.error('\n'.join(build_utils.ParseGnList(options.fail))) | 303 parser.error('\n'.join(build_utils.ParseGnList(options.fail))) |
307 | 304 |
(...skipping 27 matching lines...) Expand all Loading... |
335 raise Exception( | 332 raise Exception( |
336 '--supports-android is required when using --requires-android') | 333 '--supports-android is required when using --requires-android') |
337 | 334 |
338 direct_deps_config_paths = build_utils.ParseGnList(options.deps_configs) | 335 direct_deps_config_paths = build_utils.ParseGnList(options.deps_configs) |
339 direct_deps_config_paths = _FilterDepsPaths(direct_deps_config_paths, | 336 direct_deps_config_paths = _FilterDepsPaths(direct_deps_config_paths, |
340 options.type) | 337 options.type) |
341 | 338 |
342 deps = Deps(direct_deps_config_paths) | 339 deps = Deps(direct_deps_config_paths) |
343 all_inputs = deps.AllConfigPaths() | 340 all_inputs = deps.AllConfigPaths() |
344 | 341 |
| 342 # Remove other locale resources if there is alternative_locale_resource in |
| 343 # direct deps. |
| 344 if options.has_alternative_locale_resource: |
| 345 alternative = [r['path'] for r in deps.Direct('android_resources') |
| 346 if r.get('is_locale_resource')] |
| 347 # We can only have one locale resources in direct deps. |
| 348 if len(alternative) != 1: |
| 349 raise Exception('The number of locale resource in direct deps is wrong %d' |
| 350 % len(alternative)) |
| 351 unwanted = [r['path'] for r in deps.All('android_resources') |
| 352 if r.get('is_locale_resource') and r['path'] not in alternative] |
| 353 for p in unwanted: |
| 354 deps.RemoveNonDirectDep(p) |
| 355 |
| 356 |
345 direct_library_deps = deps.Direct('java_library') | 357 direct_library_deps = deps.Direct('java_library') |
346 all_library_deps = deps.All('java_library') | 358 all_library_deps = deps.All('java_library') |
347 | 359 |
348 all_resources_deps = deps.All('android_resources') | 360 all_resources_deps = deps.All('android_resources') |
349 # Resources should be ordered with the highest-level dependency first so that | 361 # Resources should be ordered with the highest-level dependency first so that |
350 # overrides are done correctly. | 362 # overrides are done correctly. |
351 all_resources_deps.reverse() | 363 all_resources_deps.reverse() |
352 | 364 |
353 if options.type == 'android_apk' and options.tested_apk_config: | 365 if options.type == 'android_apk' and options.tested_apk_config: |
354 tested_apk_deps = Deps([options.tested_apk_config]) | 366 tested_apk_deps = Deps([options.tested_apk_config]) |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 deps_info['resources_zip'] = options.resources_zip | 478 deps_info['resources_zip'] = options.resources_zip |
467 if options.srcjar: | 479 if options.srcjar: |
468 deps_info['srcjar'] = options.srcjar | 480 deps_info['srcjar'] = options.srcjar |
469 if options.android_manifest: | 481 if options.android_manifest: |
470 manifest = AndroidManifest(options.android_manifest) | 482 manifest = AndroidManifest(options.android_manifest) |
471 deps_info['package_name'] = manifest.GetPackageName() | 483 deps_info['package_name'] = manifest.GetPackageName() |
472 if options.package_name: | 484 if options.package_name: |
473 deps_info['package_name'] = options.package_name | 485 deps_info['package_name'] = options.package_name |
474 if options.r_text: | 486 if options.r_text: |
475 deps_info['r_text'] = options.r_text | 487 deps_info['r_text'] = options.r_text |
| 488 if options.is_locale_resource: |
| 489 deps_info['is_locale_resource'] = True |
476 | 490 |
477 deps_info['resources_dirs'] = [] | 491 deps_info['resources_dirs'] = [] |
478 if options.resource_dirs: | 492 if options.resource_dirs: |
479 for gyp_list in options.resource_dirs: | 493 for gyp_list in options.resource_dirs: |
480 deps_info['resources_dirs'].extend(build_utils.ParseGnList(gyp_list)) | 494 deps_info['resources_dirs'].extend(build_utils.ParseGnList(gyp_list)) |
481 | 495 |
482 if options.supports_android and options.type in ('android_apk', | 496 if options.supports_android and options.type in ('android_apk', |
483 'java_library'): | 497 'java_library'): |
484 # Lint all resources that are not already linted by a dependent library. | 498 # Lint all resources that are not already linted by a dependent library. |
485 owned_resource_dirs = set() | 499 owned_resource_dirs = set() |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 | 651 |
638 all_inputs.extend(runtime_deps_files) | 652 all_inputs.extend(runtime_deps_files) |
639 config['native'] = { | 653 config['native'] = { |
640 'libraries': library_paths, | 654 'libraries': library_paths, |
641 'secondary_abi_libraries': secondary_abi_library_paths, | 655 'secondary_abi_libraries': secondary_abi_library_paths, |
642 'java_libraries_list': java_libraries_list, | 656 'java_libraries_list': java_libraries_list, |
643 'secondary_abi_java_libraries_list': secondary_abi_java_libraries_list, | 657 'secondary_abi_java_libraries_list': secondary_abi_java_libraries_list, |
644 } | 658 } |
645 config['assets'], config['uncompressed_assets'] = ( | 659 config['assets'], config['uncompressed_assets'] = ( |
646 _MergeAssets(deps.All('android_assets'))) | 660 _MergeAssets(deps.All('android_assets'))) |
647 config['compressed_assets_java_list'] = ( | |
648 _CreateJavaAssetList(config['assets'])) | |
649 config['uncompressed_assets_java_list'] = ( | |
650 _CreateJavaAssetList(config['uncompressed_assets'])) | |
651 | 661 |
652 build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 662 build_utils.WriteJson(config, options.build_config, only_if_changed=True) |
653 | 663 |
654 if options.depfile: | 664 if options.depfile: |
655 build_utils.WriteDepfile(options.depfile, options.build_config, all_inputs) | 665 build_utils.WriteDepfile(options.depfile, options.build_config, all_inputs) |
656 | 666 |
657 | 667 |
658 if __name__ == '__main__': | 668 if __name__ == '__main__': |
659 sys.exit(main(sys.argv[1:])) | 669 sys.exit(main(sys.argv[1:])) |
OLD | NEW |