| 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 |