Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(348)

Side by Side Diff: build/android/gyp/write_build_config.py

Issue 2141153002: Fix java_group() handling in write_build_config.py. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added some comments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 def DepsOfType(wanted_type, configs): 84 def DepsOfType(wanted_type, configs):
85 return [c for c in configs if c['type'] == wanted_type] 85 return [c for c in configs if c['type'] == wanted_type]
86 86
87 87
88 def GetAllDepsConfigsInOrder(deps_config_paths): 88 def GetAllDepsConfigsInOrder(deps_config_paths):
89 def GetDeps(path): 89 def GetDeps(path):
90 return set(GetDepConfig(path)['deps_configs']) 90 return set(GetDepConfig(path)['deps_configs'])
91 return build_utils.GetSortedTransitiveDependencies(deps_config_paths, GetDeps) 91 return build_utils.GetSortedTransitiveDependencies(deps_config_paths, GetDeps)
92 92
93 93
94 def ResolveGroups(configs):
95 while True:
96 groups = DepsOfType('group', configs)
97 if not groups:
98 return configs
99 for config in groups:
100 index = configs.index(config)
101 expanded_configs = [GetDepConfig(p) for p in config['deps_configs']]
102 configs[index:index + 1] = expanded_configs
103
104
105 class Deps(object): 94 class Deps(object):
106 def __init__(self, direct_deps_config_paths): 95 def __init__(self, direct_deps_config_paths):
107 self.all_deps_config_paths = GetAllDepsConfigsInOrder( 96 self.all_deps_config_paths = GetAllDepsConfigsInOrder(
108 direct_deps_config_paths) 97 direct_deps_config_paths)
109 self.direct_deps_configs = ResolveGroups( 98 self.direct_deps_configs = [
110 [GetDepConfig(p) for p in direct_deps_config_paths]) 99 GetDepConfig(p) for p in direct_deps_config_paths]
111 self.all_deps_configs = [ 100 self.all_deps_configs = [
112 GetDepConfig(p) for p in self.all_deps_config_paths] 101 GetDepConfig(p) for p in self.all_deps_config_paths]
113 self.direct_deps_config_paths = direct_deps_config_paths 102 self.direct_deps_config_paths = direct_deps_config_paths
114 103
115 def All(self, wanted_type=None): 104 def All(self, wanted_type=None):
116 if type is None: 105 if type is None:
117 return self.all_deps_configs 106 return self.all_deps_configs
118 return DepsOfType(wanted_type, self.all_deps_configs) 107 return DepsOfType(wanted_type, self.all_deps_configs)
119 108
120 def Direct(self, wanted_type=None): 109 def Direct(self, wanted_type=None):
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 156
168 def create_list(asset_map): 157 def create_list(asset_map):
169 ret = ['%s:%s' % (src, dest) for dest, src in asset_map.iteritems()] 158 ret = ['%s:%s' % (src, dest) for dest, src in asset_map.iteritems()]
170 # Sort to ensure deterministic ordering. 159 # Sort to ensure deterministic ordering.
171 ret.sort() 160 ret.sort()
172 return ret 161 return ret
173 162
174 return create_list(compressed), create_list(uncompressed) 163 return create_list(compressed), create_list(uncompressed)
175 164
176 165
177 def _FilterUnwantedDepsPaths(dep_paths, target_type): 166 def _ResolveGroups(configs):
167 """Returns a list of configs with all groups inlined."""
168 ret = list(configs)
169 while True:
170 groups = DepsOfType('group', ret)
171 if not groups:
172 return ret
173 for config in groups:
174 index = ret.index(config)
175 expanded_configs = [GetDepConfig(p) for p in config['deps_configs']]
176 ret[index:index + 1] = expanded_configs
177
178
179 def _FilterDepsPaths(dep_paths, target_type):
180 """Resolves all groups and trims dependency branches that we never want.
181
182 E.g. When a resource or asset depends on an apk target, the intent is to
183 include the .apk as a resource/asset, not to have the apk's classpath added.
Ian Wen 2016/07/14 17:14:53 This makes so much sense! Thanks for the comment!
184 """
185 configs = [GetDepConfig(p) for p in dep_paths]
186 configs = _ResolveGroups(configs)
178 # Don't allow root targets to be considered as a dep. 187 # Don't allow root targets to be considered as a dep.
179 ret = [p for p in dep_paths if GetDepConfig(p)['type'] not in _ROOT_TYPES] 188 configs = [c for c in configs if c['type'] not in _ROOT_TYPES]
180 189
181 # Don't allow java libraries to cross through assets/resources. 190 # Don't allow java libraries to cross through assets/resources.
182 if target_type in _RESOURCE_TYPES: 191 if target_type in _RESOURCE_TYPES:
183 ret = [p for p in ret if GetDepConfig(p)['type'] in _RESOURCE_TYPES] 192 configs = [c for c in configs if c['type'] in _RESOURCE_TYPES]
184 return ret 193 return [c['path'] for c in configs]
185 194
186 195
187 def _AsInterfaceJar(jar_path): 196 def _AsInterfaceJar(jar_path):
188 return jar_path[:-3] + 'interface.jar' 197 return jar_path[:-3] + 'interface.jar'
189 198
190 199
191 def _ExtractSharedLibsFromRuntimeDeps(runtime_deps_files): 200 def _ExtractSharedLibsFromRuntimeDeps(runtime_deps_files):
192 ret = [] 201 ret = []
193 for path in runtime_deps_files: 202 for path in runtime_deps_files:
194 with open(path) as f: 203 with open(path) as f:
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 309
301 if options.type == 'java_library': 310 if options.type == 'java_library':
302 if options.supports_android and not options.dex_path: 311 if options.supports_android and not options.dex_path:
303 raise Exception('java_library that supports Android requires a dex path.') 312 raise Exception('java_library that supports Android requires a dex path.')
304 313
305 if options.requires_android and not options.supports_android: 314 if options.requires_android and not options.supports_android:
306 raise Exception( 315 raise Exception(
307 '--supports-android is required when using --requires-android') 316 '--supports-android is required when using --requires-android')
308 317
309 direct_deps_config_paths = build_utils.ParseGypList(options.deps_configs) 318 direct_deps_config_paths = build_utils.ParseGypList(options.deps_configs)
310 direct_deps_config_paths = _FilterUnwantedDepsPaths(direct_deps_config_paths, 319 direct_deps_config_paths = _FilterDepsPaths(direct_deps_config_paths,
311 options.type) 320 options.type)
312 321
313 deps = Deps(direct_deps_config_paths) 322 deps = Deps(direct_deps_config_paths)
314 all_inputs = deps.AllConfigPaths() + build_utils.GetPythonDependencies() 323 all_inputs = deps.AllConfigPaths() + build_utils.GetPythonDependencies()
315 324
316 # Remove other locale resources if there is alternative_locale_resource in 325 # Remove other locale resources if there is alternative_locale_resource in
317 # direct deps. 326 # direct deps.
318 if options.has_alternative_locale_resource: 327 if options.has_alternative_locale_resource:
319 alternative = [r['path'] for r in deps.Direct('android_resources') 328 alternative = [r['path'] for r in deps.Direct('android_resources')
320 if r.get('is_locale_resource')] 329 if r.get('is_locale_resource')]
321 # We can only have one locale resources in direct deps. 330 # We can only have one locale resources in direct deps.
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 _MergeAssets(deps.All('android_assets'))) 599 _MergeAssets(deps.All('android_assets')))
591 600
592 build_utils.WriteJson(config, options.build_config, only_if_changed=True) 601 build_utils.WriteJson(config, options.build_config, only_if_changed=True)
593 602
594 if options.depfile: 603 if options.depfile:
595 build_utils.WriteDepfile(options.depfile, all_inputs) 604 build_utils.WriteDepfile(options.depfile, all_inputs)
596 605
597 606
598 if __name__ == '__main__': 607 if __name__ == '__main__':
599 sys.exit(main(sys.argv[1:])) 608 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698