| 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 124 | 124 | 
| 125   def AllConfigPaths(self): | 125   def AllConfigPaths(self): | 
| 126     return self.all_deps_config_paths | 126     return self.all_deps_config_paths | 
| 127 | 127 | 
| 128   def RemoveNonDirectDep(self, path): | 128   def RemoveNonDirectDep(self, path): | 
| 129     if path in self.direct_deps_config_paths: | 129     if path in self.direct_deps_config_paths: | 
| 130       raise Exception('Cannot remove direct dep.') | 130       raise Exception('Cannot remove direct dep.') | 
| 131     self.all_deps_config_paths.remove(path) | 131     self.all_deps_config_paths.remove(path) | 
| 132     self.all_deps_configs.remove(GetDepConfig(path)) | 132     self.all_deps_configs.remove(GetDepConfig(path)) | 
| 133 | 133 | 
|  | 134   def PrebuiltJarPaths(self): | 
|  | 135     ret = [] | 
|  | 136     for config in self.Direct('java_library'): | 
|  | 137       if config['is_prebuilt']: | 
|  | 138         ret.append(config['jar_path']) | 
|  | 139         ret.extend(Deps(config['deps_configs']).PrebuiltJarPaths()) | 
|  | 140     return ret | 
|  | 141 | 
|  | 142 | 
| 134 def _MergeAssets(all_assets): | 143 def _MergeAssets(all_assets): | 
| 135   """Merges all assets from the given deps. | 144   """Merges all assets from the given deps. | 
| 136 | 145 | 
| 137   Returns: | 146   Returns: | 
| 138     A tuple of lists: (compressed, uncompressed) | 147     A tuple of lists: (compressed, uncompressed) | 
| 139     Each tuple entry is a list of "srcPath:zipPath". srcPath is the path of the | 148     Each tuple entry is a list of "srcPath:zipPath". srcPath is the path of the | 
| 140     asset to add, and zipPath is the location within the zip (excluding assets/ | 149     asset to add, and zipPath is the location within the zip (excluding assets/ | 
| 141     prefix) | 150     prefix) | 
| 142   """ | 151   """ | 
| 143   compressed = {} | 152   compressed = {} | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 219   parser.add_option('--asset-sources', help='List of asset sources.') | 228   parser.add_option('--asset-sources', help='List of asset sources.') | 
| 220   parser.add_option('--asset-renaming-sources', | 229   parser.add_option('--asset-renaming-sources', | 
| 221                     help='List of asset sources with custom destinations.') | 230                     help='List of asset sources with custom destinations.') | 
| 222   parser.add_option('--asset-renaming-destinations', | 231   parser.add_option('--asset-renaming-destinations', | 
| 223                     help='List of asset custom destinations.') | 232                     help='List of asset custom destinations.') | 
| 224   parser.add_option('--disable-asset-compression', action='store_true', | 233   parser.add_option('--disable-asset-compression', action='store_true', | 
| 225                     help='Whether to disable asset compression.') | 234                     help='Whether to disable asset compression.') | 
| 226 | 235 | 
| 227   # java library options | 236   # java library options | 
| 228   parser.add_option('--jar-path', help='Path to target\'s jar output.') | 237   parser.add_option('--jar-path', help='Path to target\'s jar output.') | 
|  | 238   parser.add_option('--java-sources-file', help='Path to .sources file') | 
| 229   parser.add_option('--supports-android', action='store_true', | 239   parser.add_option('--supports-android', action='store_true', | 
| 230       help='Whether this library supports running on the Android platform.') | 240       help='Whether this library supports running on the Android platform.') | 
| 231   parser.add_option('--requires-android', action='store_true', | 241   parser.add_option('--requires-android', action='store_true', | 
| 232       help='Whether this library requires running on the Android platform.') | 242       help='Whether this library requires running on the Android platform.') | 
| 233   parser.add_option('--bypass-platform-checks', action='store_true', | 243   parser.add_option('--bypass-platform-checks', action='store_true', | 
| 234       help='Bypass checks for support/require Android platform.') | 244       help='Bypass checks for support/require Android platform.') | 
| 235 | 245 | 
| 236   # android library options | 246   # android library options | 
| 237   parser.add_option('--dex-path', help='Path to target\'s dex output.') | 247   parser.add_option('--dex-path', help='Path to target\'s dex output.') | 
| 238 | 248 | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 260       help='Whether there is alternative-locale-resource in direct deps') | 270       help='Whether there is alternative-locale-resource in direct deps') | 
| 261 | 271 | 
| 262   options, args = parser.parse_args(argv) | 272   options, args = parser.parse_args(argv) | 
| 263 | 273 | 
| 264   if args: | 274   if args: | 
| 265     parser.error('No positional arguments should be given.') | 275     parser.error('No positional arguments should be given.') | 
| 266 | 276 | 
| 267   required_options_map = { | 277   required_options_map = { | 
| 268       'java_binary': ['build_config', 'jar_path'], | 278       'java_binary': ['build_config', 'jar_path'], | 
| 269       'java_library': ['build_config', 'jar_path'], | 279       'java_library': ['build_config', 'jar_path'], | 
|  | 280       'java_prebuilt': ['build_config', 'jar_path'], | 
| 270       'android_assets': ['build_config'], | 281       'android_assets': ['build_config'], | 
| 271       'android_resources': ['build_config', 'resources_zip'], | 282       'android_resources': ['build_config', 'resources_zip'], | 
| 272       'android_apk': ['build_config', 'jar_path', 'dex_path', 'resources_zip'], | 283       'android_apk': ['build_config', 'jar_path', 'dex_path', 'resources_zip'], | 
| 273       'deps_dex': ['build_config', 'dex_path'], | 284       'deps_dex': ['build_config', 'dex_path'], | 
| 274       'resource_rewriter': ['build_config'], | 285       'resource_rewriter': ['build_config'], | 
| 275       'group': ['build_config'], | 286       'group': ['build_config'], | 
| 276   } | 287   } | 
| 277   required_options = required_options_map.get(options.type) | 288   required_options = required_options_map.get(options.type) | 
| 278   if not required_options: | 289   if not required_options: | 
| 279     raise Exception('Unknown type: <%s>' % options.type) | 290     raise Exception('Unknown type: <%s>' % options.type) | 
| 280 | 291 | 
| 281   build_utils.CheckOptions(options, parser, required_options) | 292   build_utils.CheckOptions(options, parser, required_options) | 
| 282 | 293 | 
|  | 294   # Java prebuilts are the same as libraries except for in gradle files. | 
|  | 295   is_java_prebuilt = options.type == 'java_prebuilt' | 
|  | 296   if is_java_prebuilt: | 
|  | 297     options.type = 'java_library' | 
|  | 298 | 
| 283   if options.type == 'java_library': | 299   if options.type == 'java_library': | 
| 284     if options.supports_android and not options.dex_path: | 300     if options.supports_android and not options.dex_path: | 
| 285       raise Exception('java_library that supports Android requires a dex path.') | 301       raise Exception('java_library that supports Android requires a dex path.') | 
| 286 | 302 | 
| 287     if options.requires_android and not options.supports_android: | 303     if options.requires_android and not options.supports_android: | 
| 288       raise Exception( | 304       raise Exception( | 
| 289           '--supports-android is required when using --requires-android') | 305           '--supports-android is required when using --requires-android') | 
| 290 | 306 | 
| 291   direct_deps_config_paths = build_utils.ParseGypList(options.deps_configs) | 307   direct_deps_config_paths = build_utils.ParseGypList(options.deps_configs) | 
| 292   direct_deps_config_paths = _FilterUnwantedDepsPaths(direct_deps_config_paths, | 308   direct_deps_config_paths = _FilterUnwantedDepsPaths(direct_deps_config_paths, | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 318   # overrides are done correctly. | 334   # overrides are done correctly. | 
| 319   all_resources_deps.reverse() | 335   all_resources_deps.reverse() | 
| 320 | 336 | 
| 321   if options.type == 'android_apk' and options.tested_apk_config: | 337   if options.type == 'android_apk' and options.tested_apk_config: | 
| 322     tested_apk_deps = Deps([options.tested_apk_config]) | 338     tested_apk_deps = Deps([options.tested_apk_config]) | 
| 323     tested_apk_resources_deps = tested_apk_deps.All('android_resources') | 339     tested_apk_resources_deps = tested_apk_deps.All('android_resources') | 
| 324     all_resources_deps = [ | 340     all_resources_deps = [ | 
| 325         d for d in all_resources_deps if not d in tested_apk_resources_deps] | 341         d for d in all_resources_deps if not d in tested_apk_resources_deps] | 
| 326 | 342 | 
| 327   # Initialize some common config. | 343   # Initialize some common config. | 
|  | 344   # Any value that needs to be queryable by dependents must go within deps_info. | 
| 328   config = { | 345   config = { | 
| 329     'deps_info': { | 346     'deps_info': { | 
| 330       'name': os.path.basename(options.build_config), | 347       'name': os.path.basename(options.build_config), | 
| 331       'path': options.build_config, | 348       'path': options.build_config, | 
| 332       'type': options.type, | 349       'type': options.type, | 
| 333       'deps_configs': direct_deps_config_paths | 350       'deps_configs': direct_deps_config_paths | 
| 334     } | 351     }, | 
|  | 352     # Info needed only by generate_gradle.py. | 
|  | 353     'gradle': {} | 
| 335   } | 354   } | 
| 336   deps_info = config['deps_info'] | 355   deps_info = config['deps_info'] | 
|  | 356   gradle = config['gradle'] | 
|  | 357 | 
|  | 358   # Required for generating gradle files. | 
|  | 359   if options.type == 'java_library': | 
|  | 360     deps_info['is_prebuilt'] = is_java_prebuilt | 
|  | 361 | 
|  | 362   if options.android_manifest: | 
|  | 363     gradle['android_manifest'] = options.android_manifest | 
|  | 364   if options.type in ('java_binary', 'java_library', 'android_apk'): | 
|  | 365     if options.java_sources_file: | 
|  | 366       gradle['java_sources_file'] = options.java_sources_file | 
|  | 367     gradle['dependent_prebuilt_jars'] = deps.PrebuiltJarPaths() | 
|  | 368     gradle['dependent_projects'] = ( | 
|  | 369         [c['path'] for c in direct_library_deps if not c['is_prebuilt']]) | 
|  | 370 | 
| 337 | 371 | 
| 338   if (options.type in ('java_binary', 'java_library') and | 372   if (options.type in ('java_binary', 'java_library') and | 
| 339       not options.bypass_platform_checks): | 373       not options.bypass_platform_checks): | 
| 340     deps_info['requires_android'] = options.requires_android | 374     deps_info['requires_android'] = options.requires_android | 
| 341     deps_info['supports_android'] = options.supports_android | 375     deps_info['supports_android'] = options.supports_android | 
| 342 | 376 | 
| 343     deps_require_android = (all_resources_deps + | 377     deps_require_android = (all_resources_deps + | 
| 344         [d['name'] for d in all_library_deps if d['requires_android']]) | 378         [d['name'] for d in all_library_deps if d['requires_android']]) | 
| 345     deps_not_support_android = ( | 379     deps_not_support_android = ( | 
| 346         [d['name'] for d in all_library_deps if not d['supports_android']]) | 380         [d['name'] for d in all_library_deps if not d['supports_android']]) | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 360       deps_info['dex_path'] = options.dex_path | 394       deps_info['dex_path'] = options.dex_path | 
| 361     if options.type == 'android_apk': | 395     if options.type == 'android_apk': | 
| 362       deps_info['apk_path'] = options.apk_path | 396       deps_info['apk_path'] = options.apk_path | 
| 363       deps_info['incremental_apk_path'] = options.incremental_apk_path | 397       deps_info['incremental_apk_path'] = options.incremental_apk_path | 
| 364       deps_info['incremental_install_script_path'] = ( | 398       deps_info['incremental_install_script_path'] = ( | 
| 365           options.incremental_install_script_path) | 399           options.incremental_install_script_path) | 
| 366 | 400 | 
| 367     # Classpath values filled in below (after applying tested_apk_config). | 401     # Classpath values filled in below (after applying tested_apk_config). | 
| 368     config['javac'] = {} | 402     config['javac'] = {} | 
| 369 | 403 | 
|  | 404 | 
| 370   if options.type in ('java_binary', 'java_library'): | 405   if options.type in ('java_binary', 'java_library'): | 
| 371     # Only resources might have srcjars (normal srcjar targets are listed in | 406     # Only resources might have srcjars (normal srcjar targets are listed in | 
| 372     # srcjar_deps). A resource's srcjar contains the R.java file for those | 407     # srcjar_deps). A resource's srcjar contains the R.java file for those | 
| 373     # resources, and (like Android's default build system) we allow a library to | 408     # resources, and (like Android's default build system) we allow a library to | 
| 374     # refer to the resources in any of its dependents. | 409     # refer to the resources in any of its dependents. | 
| 375     config['javac']['srcjars'] = [ | 410     config['javac']['srcjars'] = [ | 
| 376         c['srcjar'] for c in all_resources_deps if 'srcjar' in c] | 411         c['srcjar'] for c in all_resources_deps if 'srcjar' in c] | 
| 377 | 412 | 
| 378     # Used to strip out R.class for android_prebuilt()s. | 413     # Used to strip out R.class for android_prebuilt()s. | 
| 379     if options.type == 'java_library': | 414     if options.type == 'java_library': | 
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 542         _MergeAssets(deps.All('android_assets'))) | 577         _MergeAssets(deps.All('android_assets'))) | 
| 543 | 578 | 
| 544   build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 579   build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 
| 545 | 580 | 
| 546   if options.depfile: | 581   if options.depfile: | 
| 547     build_utils.WriteDepfile(options.depfile, all_inputs) | 582     build_utils.WriteDepfile(options.depfile, all_inputs) | 
| 548 | 583 | 
| 549 | 584 | 
| 550 if __name__ == '__main__': | 585 if __name__ == '__main__': | 
| 551   sys.exit(main(sys.argv[1:])) | 586   sys.exit(main(sys.argv[1:])) | 
| OLD | NEW | 
|---|