| 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 21 matching lines...) Expand all Loading... |
| 32 import sys | 32 import sys |
| 33 import xml.dom.minidom | 33 import xml.dom.minidom |
| 34 | 34 |
| 35 from util import build_utils | 35 from util import build_utils |
| 36 from util import md5_check | 36 from util import md5_check |
| 37 | 37 |
| 38 import write_ordered_libraries | 38 import write_ordered_libraries |
| 39 | 39 |
| 40 | 40 |
| 41 # Types that should never be used as a dependency of another build config. | 41 # Types that should never be used as a dependency of another build config. |
| 42 _ROOT_TYPES = ('android_apk', 'deps_dex', 'resource_rewriter') | 42 _ROOT_TYPES = ('android_apk', 'deps_dex', 'java_binary', 'resource_rewriter') |
| 43 # Types that should not allow code deps to pass through. | 43 # Types that should not allow code deps to pass through. |
| 44 _RESOURCE_TYPES = ('android_assets', 'android_resources') | 44 _RESOURCE_TYPES = ('android_assets', 'android_resources') |
| 45 | 45 |
| 46 | 46 |
| 47 class AndroidManifest(object): | 47 class AndroidManifest(object): |
| 48 def __init__(self, path): | 48 def __init__(self, path): |
| 49 self.path = path | 49 self.path = path |
| 50 dom = xml.dom.minidom.parse(path) | 50 dom = xml.dom.minidom.parse(path) |
| 51 manifests = dom.getElementsByTagName('manifest') | 51 manifests = dom.getElementsByTagName('manifest') |
| 52 assert len(manifests) == 1 | 52 assert len(manifests) == 1 |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 help='Whether proguard is enabled for this apk.') | 216 help='Whether proguard is enabled for this apk.') |
| 217 parser.add_option('--proguard-info', | 217 parser.add_option('--proguard-info', |
| 218 help='Path to the proguard .info output for this apk.') | 218 help='Path to the proguard .info output for this apk.') |
| 219 | 219 |
| 220 options, args = parser.parse_args(argv) | 220 options, args = parser.parse_args(argv) |
| 221 | 221 |
| 222 if args: | 222 if args: |
| 223 parser.error('No positional arguments should be given.') | 223 parser.error('No positional arguments should be given.') |
| 224 | 224 |
| 225 required_options_map = { | 225 required_options_map = { |
| 226 'java_binary': ['build_config', 'jar_path'], |
| 226 'java_library': ['build_config', 'jar_path'], | 227 'java_library': ['build_config', 'jar_path'], |
| 227 'android_assets': ['build_config'], | 228 'android_assets': ['build_config'], |
| 228 'android_resources': ['build_config', 'resources_zip'], | 229 'android_resources': ['build_config', 'resources_zip'], |
| 229 'android_apk': ['build_config', 'jar_path', 'dex_path', 'resources_zip'], | 230 'android_apk': ['build_config', 'jar_path', 'dex_path', 'resources_zip'], |
| 230 'deps_dex': ['build_config', 'dex_path'], | 231 'deps_dex': ['build_config', 'dex_path'], |
| 231 'resource_rewriter': ['build_config'] | 232 'resource_rewriter': ['build_config'] |
| 232 } | 233 } |
| 233 required_options = required_options_map.get(options.type) | 234 required_options = required_options_map.get(options.type) |
| 234 if not required_options: | 235 if not required_options: |
| 235 raise Exception('Unknown type: <%s>' % options.type) | 236 raise Exception('Unknown type: <%s>' % options.type) |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 config = { | 284 config = { |
| 284 'deps_info': { | 285 'deps_info': { |
| 285 'name': os.path.basename(options.build_config), | 286 'name': os.path.basename(options.build_config), |
| 286 'path': options.build_config, | 287 'path': options.build_config, |
| 287 'type': options.type, | 288 'type': options.type, |
| 288 'deps_configs': direct_deps_config_paths | 289 'deps_configs': direct_deps_config_paths |
| 289 } | 290 } |
| 290 } | 291 } |
| 291 deps_info = config['deps_info'] | 292 deps_info = config['deps_info'] |
| 292 | 293 |
| 293 if (options.type == 'java_library' and not options.bypass_platform_checks): | 294 if (options.type in ('java_binary', 'java_library') and |
| 295 not options.bypass_platform_checks): |
| 294 deps_info['requires_android'] = options.requires_android | 296 deps_info['requires_android'] = options.requires_android |
| 295 deps_info['supports_android'] = options.supports_android | 297 deps_info['supports_android'] = options.supports_android |
| 296 | 298 |
| 297 deps_require_android = (all_resources_deps + | 299 deps_require_android = (all_resources_deps + |
| 298 [d['name'] for d in all_library_deps if d['requires_android']]) | 300 [d['name'] for d in all_library_deps if d['requires_android']]) |
| 299 deps_not_support_android = ( | 301 deps_not_support_android = ( |
| 300 [d['name'] for d in all_library_deps if not d['supports_android']]) | 302 [d['name'] for d in all_library_deps if not d['supports_android']]) |
| 301 | 303 |
| 302 if deps_require_android and not options.requires_android: | 304 if deps_require_android and not options.requires_android: |
| 303 raise Exception('Some deps require building for the Android platform: ' + | 305 raise Exception('Some deps require building for the Android platform: ' + |
| 304 str(deps_require_android)) | 306 str(deps_require_android)) |
| 305 | 307 |
| 306 if deps_not_support_android and options.supports_android: | 308 if deps_not_support_android and options.supports_android: |
| 307 raise Exception('Not all deps support the Android platform: ' + | 309 raise Exception('Not all deps support the Android platform: ' + |
| 308 str(deps_not_support_android)) | 310 str(deps_not_support_android)) |
| 309 | 311 |
| 310 if options.type in ('java_library', 'android_apk'): | 312 if options.type in ('java_binary', 'java_library', 'android_apk'): |
| 311 javac_classpath = [c['jar_path'] for c in direct_library_deps] | 313 javac_classpath = [c['jar_path'] for c in direct_library_deps] |
| 312 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] |
| 313 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] |
| 314 deps_info['jar_path'] = options.jar_path | 316 deps_info['jar_path'] = options.jar_path |
| 315 if options.type == 'android_apk' or options.supports_android: | 317 if options.type == 'android_apk' or options.supports_android: |
| 316 deps_info['dex_path'] = options.dex_path | 318 deps_info['dex_path'] = options.dex_path |
| 317 if options.type == 'android_apk': | 319 if options.type == 'android_apk': |
| 318 deps_info['apk_path'] = options.apk_path | 320 deps_info['apk_path'] = options.apk_path |
| 319 config['javac'] = { | 321 config['javac'] = { |
| 320 'classpath': javac_classpath, | 322 'classpath': javac_classpath, |
| 321 } | 323 } |
| 322 config['java'] = { | 324 config['java'] = { |
| 323 'full_classpath': java_full_classpath | 325 'full_classpath': java_full_classpath |
| 324 } | 326 } |
| 325 | 327 |
| 326 if options.type == 'java_library': | 328 if options.type in ('java_binary', 'java_library'): |
| 327 # Only resources might have srcjars (normal srcjar targets are listed in | 329 # Only resources might have srcjars (normal srcjar targets are listed in |
| 328 # srcjar_deps). A resource's srcjar contains the R.java file for those | 330 # srcjar_deps). A resource's srcjar contains the R.java file for those |
| 329 # resources, and (like Android's default build system) we allow a library to | 331 # resources, and (like Android's default build system) we allow a library to |
| 330 # refer to the resources in any of its dependents. | 332 # refer to the resources in any of its dependents. |
| 331 config['javac']['srcjars'] = [ | 333 config['javac']['srcjars'] = [ |
| 332 c['srcjar'] for c in direct_resources_deps if 'srcjar' in c] | 334 c['srcjar'] for c in direct_resources_deps if 'srcjar' in c] |
| 333 | 335 |
| 334 if options.type == 'android_apk': | 336 if options.type == 'android_apk': |
| 335 # Apks will get their resources srcjar explicitly passed to the java step. | 337 # Apks will get their resources srcjar explicitly passed to the java step. |
| 336 config['javac']['srcjars'] = [] | 338 config['javac']['srcjars'] = [] |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 472 build_utils.WriteJson(config, options.build_config, only_if_changed=True) |
| 471 | 473 |
| 472 if options.depfile: | 474 if options.depfile: |
| 473 build_utils.WriteDepfile( | 475 build_utils.WriteDepfile( |
| 474 options.depfile, | 476 options.depfile, |
| 475 deps.AllConfigPaths() + build_utils.GetPythonDependencies()) | 477 deps.AllConfigPaths() + build_utils.GetPythonDependencies()) |
| 476 | 478 |
| 477 | 479 |
| 478 if __name__ == '__main__': | 480 if __name__ == '__main__': |
| 479 sys.exit(main(sys.argv[1:])) | 481 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |