| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 help='List of paths for dependency\'s build_config files. Some ' | 65 help='List of paths for dependency\'s build_config files. Some ' |
| 66 'dependencies may not write build_config files. Missing build_config ' | 66 'dependencies may not write build_config files. Missing build_config ' |
| 67 'files are handled differently based on the type of this target.') | 67 'files are handled differently based on the type of this target.') |
| 68 | 68 |
| 69 # android_resources/apk options | 69 # android_resources/apk options |
| 70 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.') | 70 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.') |
| 71 parser.add_option('--resources-zip', help='Path to target\'s resources zip.') | 71 parser.add_option('--resources-zip', help='Path to target\'s resources zip.') |
| 72 | 72 |
| 73 # android_library/apk options | 73 # android_library/apk options |
| 74 parser.add_option('--jar-path', help='Path to target\'s jar output.') | 74 parser.add_option('--jar-path', help='Path to target\'s jar output.') |
| 75 parser.add_option('--dex-path', help='Path to target\'s dex output.') |
| 75 | 76 |
| 76 options, args = parser.parse_args(argv) | 77 options, args = parser.parse_args(argv) |
| 77 | 78 |
| 78 if args: | 79 if args: |
| 79 parser.error('No positional arguments should be given.') | 80 parser.error('No positional arguments should be given.') |
| 80 | 81 |
| 81 | 82 |
| 82 if not options.type in [ | 83 if not options.type in [ |
| 83 'android_library', 'android_resources', 'android_apk']: | 84 'android_library', 'android_resources', 'android_apk']: |
| 84 raise Exception('Unknown type: <%s>' % options.type) | 85 raise Exception('Unknown type: <%s>' % options.type) |
| 85 | 86 |
| 86 | 87 |
| 87 required_options = ['build_config'] + { | 88 required_options = ['build_config'] + { |
| 88 'android_library': ['jar_path'], | 89 'android_library': ['jar_path', 'dex_path'], |
| 89 'android_resources': ['resources_zip'], | 90 'android_resources': ['resources_zip'], |
| 90 'android_apk': ['jar_path', 'resources_zip'] | 91 'android_apk': ['jar_path', 'dex_path', 'resources_zip'] |
| 91 }[options.type] | 92 }[options.type] |
| 92 | 93 |
| 93 build_utils.CheckOptions(options, parser, required_options) | 94 build_utils.CheckOptions(options, parser, required_options) |
| 94 | 95 |
| 95 possible_deps_config_paths = build_utils.ParseGypList( | 96 possible_deps_config_paths = build_utils.ParseGypList( |
| 96 options.possible_deps_configs) | 97 options.possible_deps_configs) |
| 97 | 98 |
| 98 | 99 |
| 99 | 100 |
| 100 | 101 |
| 101 allow_unknown_deps = options.type == 'android_apk' | 102 allow_unknown_deps = options.type == 'android_apk' |
| 102 unknown_deps = [ | 103 unknown_deps = [ |
| 103 c for c in possible_deps_config_paths if not os.path.exists(c)] | 104 c for c in possible_deps_config_paths if not os.path.exists(c)] |
| 104 if unknown_deps and not allow_unknown_deps: | 105 if unknown_deps and not allow_unknown_deps: |
| 105 raise Exception('Unknown deps: ' + unknown_deps) | 106 raise Exception('Unknown deps: ' + unknown_deps) |
| 106 | 107 |
| 107 direct_deps_config_paths = [ | 108 direct_deps_config_paths = [ |
| 108 c for c in possible_deps_config_paths if not c in unknown_deps] | 109 c for c in possible_deps_config_paths if not c in unknown_deps] |
| 109 all_deps_config_paths = GetAllDepsConfigsInOrder(direct_deps_config_paths) | 110 all_deps_config_paths = GetAllDepsConfigsInOrder(direct_deps_config_paths) |
| 110 | 111 |
| 111 direct_deps_configs = [GetDepConfig(p) for p in direct_deps_config_paths] | 112 direct_deps_configs = [GetDepConfig(p) for p in direct_deps_config_paths] |
| 112 all_deps_configs = [GetDepConfig(p) for p in all_deps_config_paths] | 113 all_deps_configs = [GetDepConfig(p) for p in all_deps_config_paths] |
| 113 | 114 |
| 114 direct_library_deps = DepsOfType('android_library', direct_deps_configs) | 115 direct_library_deps = DepsOfType('android_library', direct_deps_configs) |
| 115 all_resources_deps = DepsOfType('android_resources', all_deps_configs) | 116 all_resources_deps = DepsOfType('android_resources', all_deps_configs) |
| 117 all_library_deps = DepsOfType('android_library', all_deps_configs) |
| 116 | 118 |
| 117 # Initialize some common config. | 119 # Initialize some common config. |
| 118 config = { | 120 config = { |
| 119 'deps_info': { | 121 'deps_info': { |
| 120 'path': options.build_config, | 122 'path': options.build_config, |
| 121 'type': options.type, | 123 'type': options.type, |
| 122 'deps_configs': direct_deps_config_paths, | 124 'deps_configs': direct_deps_config_paths, |
| 123 } | 125 } |
| 124 } | 126 } |
| 125 deps_info = config['deps_info'] | 127 deps_info = config['deps_info'] |
| 126 | 128 |
| 127 if options.type in ['android_library', 'android_apk']: | 129 if options.type in ['android_library', 'android_apk']: |
| 128 javac_classpath = [c['jar_path'] for c in direct_library_deps] | 130 javac_classpath = [c['jar_path'] for c in direct_library_deps] |
| 129 deps_info['resources_deps'] = [c['path'] for c in all_resources_deps] | 131 deps_info['resources_deps'] = [c['path'] for c in all_resources_deps] |
| 130 deps_info['jar_path'] = options.jar_path | 132 deps_info['jar_path'] = options.jar_path |
| 133 deps_info['dex_path'] = options.dex_path |
| 131 config['javac'] = { | 134 config['javac'] = { |
| 132 'classpath': javac_classpath, | 135 'classpath': javac_classpath, |
| 133 } | 136 } |
| 134 # Only resources might have srcjars (normal srcjar targets are listed in | 137 # Only resources might have srcjars (normal srcjar targets are listed in |
| 135 # srcjar_deps). A resource's srcjar contains the R.java file for those | 138 # srcjar_deps). A resource's srcjar contains the R.java file for those |
| 136 # resources, and (like Android's default build system) we allow a library to | 139 # resources, and (like Android's default build system) we allow a library to |
| 137 # refer to the resources in any of its dependents. | 140 # refer to the resources in any of its dependents. |
| 138 config['javac']['srcjars'] = [ | 141 config['javac']['srcjars'] = [ |
| 139 c['srcjar'] for c in all_resources_deps if 'srcjar' in c] | 142 c['srcjar'] for c in all_resources_deps if 'srcjar' in c] |
| 140 | 143 |
| 141 if options.type == 'android_resources' or options.type == 'android_apk': | 144 if options.type == 'android_resources' or options.type == 'android_apk': |
| 142 deps_info['resources_zip'] = options.resources_zip | 145 deps_info['resources_zip'] = options.resources_zip |
| 143 if options.srcjar: | 146 if options.srcjar: |
| 144 deps_info['srcjar'] = options.srcjar | 147 deps_info['srcjar'] = options.srcjar |
| 145 | 148 |
| 146 config['resources'] = {} | 149 config['resources'] = {} |
| 147 config['resources']['dependency_zips'] = [ | 150 config['resources']['dependency_zips'] = [ |
| 148 c['resources_zip'] for c in all_resources_deps] | 151 c['resources_zip'] for c in all_resources_deps] |
| 149 | 152 |
| 153 if options.type == 'android_apk': |
| 154 config['apk_dex'] = {} |
| 155 dex_config = config['apk_dex'] |
| 156 # TODO(cjhopman): proguard version |
| 157 dex_deps_files = [c['dex_path'] for c in all_library_deps] |
| 158 dex_config['dependency_dex_files'] = dex_deps_files |
| 159 |
| 150 build_utils.WriteJson(config, options.build_config, only_if_changed=True) | 160 build_utils.WriteJson(config, options.build_config, only_if_changed=True) |
| 151 | 161 |
| 152 if options.depfile: | 162 if options.depfile: |
| 153 build_utils.WriteDepfile( | 163 build_utils.WriteDepfile( |
| 154 options.depfile, | 164 options.depfile, |
| 155 all_deps_config_paths + build_utils.GetPythonDependencies()) | 165 all_deps_config_paths + build_utils.GetPythonDependencies()) |
| 156 | 166 |
| 157 | 167 |
| 158 if __name__ == '__main__': | 168 if __name__ == '__main__': |
| 159 sys.exit(main(sys.argv[1:])) | 169 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |