| 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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 | 311 |
| 312 if options.type in ('java_binary', 'java_library', 'android_apk'): | 312 if options.type in ('java_binary', 'java_library', 'android_apk'): |
| 313 javac_classpath = [c['jar_path'] for c in direct_library_deps] | 313 javac_classpath = [c['jar_path'] for c in direct_library_deps] |
| 314 java_full_classpath = [c['jar_path'] for c in all_library_deps] | 314 java_full_classpath = [c['jar_path'] for c in all_library_deps] |
| 315 deps_info['resources_deps'] = [c['path'] for c in all_resources_deps] | 315 deps_info['resources_deps'] = [c['path'] for c in all_resources_deps] |
| 316 deps_info['jar_path'] = options.jar_path | 316 deps_info['jar_path'] = options.jar_path |
| 317 if options.type == 'android_apk' or options.supports_android: | 317 if options.type == 'android_apk' or options.supports_android: |
| 318 deps_info['dex_path'] = options.dex_path | 318 deps_info['dex_path'] = options.dex_path |
| 319 if options.type == 'android_apk': | 319 if options.type == 'android_apk': |
| 320 deps_info['apk_path'] = options.apk_path | 320 deps_info['apk_path'] = options.apk_path |
| 321 config['javac'] = { | 321 |
| 322 'classpath': javac_classpath, | 322 # Classpath values filled in below (after applying tested_apk_config). |
| 323 } | 323 config['javac'] = {} |
| 324 config['java'] = { | |
| 325 'full_classpath': java_full_classpath | |
| 326 } | |
| 327 | 324 |
| 328 if options.type in ('java_binary', 'java_library'): | 325 if options.type in ('java_binary', 'java_library'): |
| 329 # Only resources might have srcjars (normal srcjar targets are listed in | 326 # Only resources might have srcjars (normal srcjar targets are listed in |
| 330 # srcjar_deps). A resource's srcjar contains the R.java file for those | 327 # srcjar_deps). A resource's srcjar contains the R.java file for those |
| 331 # resources, and (like Android's default build system) we allow a library to | 328 # resources, and (like Android's default build system) we allow a library to |
| 332 # refer to the resources in any of its dependents. | 329 # refer to the resources in any of its dependents. |
| 333 config['javac']['srcjars'] = [ | 330 config['javac']['srcjars'] = [ |
| 334 c['srcjar'] for c in direct_resources_deps if 'srcjar' in c] | 331 c['srcjar'] for c in direct_resources_deps if 'srcjar' in c] |
| 335 | 332 |
| 336 if options.type == 'android_apk': | 333 if options.type == 'android_apk': |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 if proguard_enabled: | 386 if proguard_enabled: |
| 390 deps_info['proguard_info'] = options.proguard_info | 387 deps_info['proguard_info'] = options.proguard_info |
| 391 config['proguard'] = {} | 388 config['proguard'] = {} |
| 392 proguard_config = config['proguard'] | 389 proguard_config = config['proguard'] |
| 393 proguard_config['input_paths'] = [options.jar_path] + java_full_classpath | 390 proguard_config['input_paths'] = [options.jar_path] + java_full_classpath |
| 394 proguard_config['tested_apk_info'] = '' | 391 proguard_config['tested_apk_info'] = '' |
| 395 | 392 |
| 396 # An instrumentation test apk should exclude the dex files that are in the apk | 393 # An instrumentation test apk should exclude the dex files that are in the apk |
| 397 # under test. | 394 # under test. |
| 398 if options.type == 'android_apk' and options.tested_apk_config: | 395 if options.type == 'android_apk' and options.tested_apk_config: |
| 399 tested_apk_deps = Deps([options.tested_apk_config]) | |
| 400 tested_apk_library_deps = tested_apk_deps.All('java_library') | 396 tested_apk_library_deps = tested_apk_deps.All('java_library') |
| 401 tested_apk_deps_dex_files = [c['dex_path'] for c in tested_apk_library_deps] | 397 tested_apk_deps_dex_files = [c['dex_path'] for c in tested_apk_library_deps] |
| 398 # Include in the classpath classes that are added directly to the apk under |
| 399 # test (those that are not a part of a java_library). |
| 400 tested_apk_config = GetDepConfig(options.tested_apk_config) |
| 401 javac_classpath.append(tested_apk_config['jar_path']) |
| 402 # Exclude dex files from the test apk that exist within the apk under test. |
| 402 deps_dex_files = [ | 403 deps_dex_files = [ |
| 403 p for p in deps_dex_files if not p in tested_apk_deps_dex_files] | 404 p for p in deps_dex_files if not p in tested_apk_deps_dex_files] |
| 404 | 405 |
| 405 tested_apk_config = GetDepConfig(options.tested_apk_config) | |
| 406 expected_tested_package = tested_apk_config['package_name'] | 406 expected_tested_package = tested_apk_config['package_name'] |
| 407 AndroidManifest(options.android_manifest).CheckInstrumentation( | 407 AndroidManifest(options.android_manifest).CheckInstrumentation( |
| 408 expected_tested_package) | 408 expected_tested_package) |
| 409 if tested_apk_config['proguard_enabled']: | 409 if tested_apk_config['proguard_enabled']: |
| 410 assert proguard_enabled, ('proguard must be enabled for instrumentation' | 410 assert proguard_enabled, ('proguard must be enabled for instrumentation' |
| 411 ' apks if it\'s enabled for the tested apk') | 411 ' apks if it\'s enabled for the tested apk') |
| 412 proguard_config['tested_apk_info'] = tested_apk_config['proguard_info'] | 412 proguard_config['tested_apk_info'] = tested_apk_config['proguard_info'] |
| 413 | 413 |
| 414 deps_info['tested_apk_path'] = tested_apk_config['apk_path'] | 414 deps_info['tested_apk_path'] = tested_apk_config['apk_path'] |
| 415 | 415 |
| 416 # Dependencies for the final dex file of an apk or a 'deps_dex'. | 416 # Dependencies for the final dex file of an apk or a 'deps_dex'. |
| 417 if options.type in ['android_apk', 'deps_dex']: | 417 if options.type in ['android_apk', 'deps_dex']: |
| 418 config['final_dex'] = {} | 418 config['final_dex'] = {} |
| 419 dex_config = config['final_dex'] | 419 dex_config = config['final_dex'] |
| 420 dex_config['dependency_dex_files'] = deps_dex_files | 420 dex_config['dependency_dex_files'] = deps_dex_files |
| 421 | 421 |
| 422 if options.type in ('java_binary', 'java_library', 'android_apk'): |
| 423 config['javac']['classpath'] = javac_classpath |
| 424 config['java'] = { |
| 425 'full_classpath': java_full_classpath |
| 426 } |
| 427 |
| 422 if options.type == 'android_apk': | 428 if options.type == 'android_apk': |
| 423 config['dist_jar'] = { | 429 config['dist_jar'] = { |
| 424 'dependency_jars': [ | 430 'dependency_jars': [ |
| 425 c['jar_path'] for c in all_library_deps | 431 c['jar_path'] for c in all_library_deps |
| 426 ] | 432 ] |
| 427 } | 433 } |
| 428 manifest = AndroidManifest(options.android_manifest) | 434 manifest = AndroidManifest(options.android_manifest) |
| 429 deps_info['package_name'] = manifest.GetPackageName() | 435 deps_info['package_name'] = manifest.GetPackageName() |
| 430 if not options.tested_apk_config and manifest.GetInstrumentation(): | 436 if not options.tested_apk_config and manifest.GetInstrumentation(): |
| 431 # This must then have instrumentation only for itself. | 437 # This must then have instrumentation only for itself. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 478 build_utils.WriteJson(config, options.build_config, only_if_changed=True) |
| 473 | 479 |
| 474 if options.depfile: | 480 if options.depfile: |
| 475 build_utils.WriteDepfile( | 481 build_utils.WriteDepfile( |
| 476 options.depfile, | 482 options.depfile, |
| 477 deps.AllConfigPaths() + build_utils.GetPythonDependencies()) | 483 deps.AllConfigPaths() + build_utils.GetPythonDependencies()) |
| 478 | 484 |
| 479 | 485 |
| 480 if __name__ == '__main__': | 486 if __name__ == '__main__': |
| 481 sys.exit(main(sys.argv[1:])) | 487 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |