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

Side by Side Diff: pylib/gyp/input.py

Issue 6904020: This change supports '!' and '/' operators for 'dependencies' section. (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 8 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 | Annotate | Revision Log
« 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/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2011 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 from compiler.ast import Const 7 from compiler.ast import Const
8 from compiler.ast import Dict 8 from compiler.ast import Dict
9 from compiler.ast import Discard 9 from compiler.ast import Discard
10 from compiler.ast import List 10 from compiler.ast import List
(...skipping 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 """Make dependency links fully-qualified relative to the current directory. 1035 """Make dependency links fully-qualified relative to the current directory.
1036 1036
1037 |targets| is a dict mapping fully-qualified target names to their target 1037 |targets| is a dict mapping fully-qualified target names to their target
1038 dicts. For each target in this dict, keys known to contain dependency 1038 dicts. For each target in this dict, keys known to contain dependency
1039 links are examined, and any dependencies referenced will be rewritten 1039 links are examined, and any dependencies referenced will be rewritten
1040 so that they are fully-qualified and relative to the current directory. 1040 so that they are fully-qualified and relative to the current directory.
1041 All rewritten dependencies are suitable for use as keys to |targets| or a 1041 All rewritten dependencies are suitable for use as keys to |targets| or a
1042 similar dict. 1042 similar dict.
1043 """ 1043 """
1044 1044
1045 all_dependency_sections = [dep + op
1046 for dep in dependency_sections
1047 for op in ('', '!', '/')]
1048
1045 for target, target_dict in targets.iteritems(): 1049 for target, target_dict in targets.iteritems():
1046 target_build_file = gyp.common.BuildFile(target) 1050 target_build_file = gyp.common.BuildFile(target)
1047 toolset = target_dict['toolset'] 1051 toolset = target_dict['toolset']
1048 for dependency_key in dependency_sections: 1052 for dependency_key in all_dependency_sections:
1049 dependencies = target_dict.get(dependency_key, []) 1053 dependencies = target_dict.get(dependency_key, [])
1050 for index in xrange(0, len(dependencies)): 1054 for index in xrange(0, len(dependencies)):
1051 dep_file, dep_target, dep_toolset = gyp.common.ResolveTarget( 1055 dep_file, dep_target, dep_toolset = gyp.common.ResolveTarget(
1052 target_build_file, dependencies[index], toolset) 1056 target_build_file, dependencies[index], toolset)
1053 global multiple_toolsets 1057 global multiple_toolsets
1054 if not multiple_toolsets: 1058 if not multiple_toolsets:
1055 # Ignore toolset specification in the dependency if it is specified. 1059 # Ignore toolset specification in the dependency if it is specified.
1056 dep_toolset = toolset 1060 dep_toolset = toolset
1057 dependency = gyp.common.QualifiedTarget(dep_file, 1061 dependency = gyp.common.QualifiedTarget(dep_file,
1058 dep_target, 1062 dep_target,
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 # Set up the dependency links. Targets that have no dependencies are treated 1350 # Set up the dependency links. Targets that have no dependencies are treated
1347 # as dependent on root_node. 1351 # as dependent on root_node.
1348 root_node = DependencyGraphNode(None) 1352 root_node = DependencyGraphNode(None)
1349 for target, spec in targets.iteritems(): 1353 for target, spec in targets.iteritems():
1350 target_node = dependency_nodes[target] 1354 target_node = dependency_nodes[target]
1351 target_build_file = gyp.common.BuildFile(target) 1355 target_build_file = gyp.common.BuildFile(target)
1352 if not 'dependencies' in spec or len(spec['dependencies']) == 0: 1356 if not 'dependencies' in spec or len(spec['dependencies']) == 0:
1353 target_node.dependencies = [root_node] 1357 target_node.dependencies = [root_node]
1354 root_node.dependents.append(target_node) 1358 root_node.dependents.append(target_node)
1355 else: 1359 else:
1356 dependencies = spec['dependencies'] 1360 deps_dict = {}
1361 for op in ('', '!', '/'):
1362 key = 'dependencies' + op
1363 if key in spec and len(spec[key]) > 0:
1364 deps_dict[key] = spec[key]
1365 ProcessListFiltersInDict(target, deps_dict)
1366
1367 dependencies = deps_dict['dependencies']
1357 for index in xrange(0, len(dependencies)): 1368 for index in xrange(0, len(dependencies)):
1358 try: 1369 try:
1359 dependency = dependencies[index] 1370 dependency = dependencies[index]
1360 dependency_node = dependency_nodes[dependency] 1371 dependency_node = dependency_nodes[dependency]
1361 target_node.dependencies.append(dependency_node) 1372 target_node.dependencies.append(dependency_node)
1362 dependency_node.dependents.append(target_node) 1373 dependency_node.dependents.append(target_node)
1363 except KeyError, e: 1374 except KeyError, e:
1364 gyp.common.ExceptionAppend(e, 1375 gyp.common.ExceptionAppend(e,
1365 'while trying to load target %s' % target) 1376 'while trying to load target %s' % target)
1366 raise 1377 raise
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 """Process regular expression and exclusion-based filters on lists. 1822 """Process regular expression and exclusion-based filters on lists.
1812 1823
1813 An exclusion list is in a dict key named with a trailing "!", like 1824 An exclusion list is in a dict key named with a trailing "!", like
1814 "sources!". Every item in such a list is removed from the associated 1825 "sources!". Every item in such a list is removed from the associated
1815 main list, which in this example, would be "sources". Removed items are 1826 main list, which in this example, would be "sources". Removed items are
1816 placed into a "sources_excluded" list in the dict. 1827 placed into a "sources_excluded" list in the dict.
1817 1828
1818 Regular expression (regex) filters are contained in dict keys named with a 1829 Regular expression (regex) filters are contained in dict keys named with a
1819 trailing "/", such as "sources/" to operate on the "sources" list. Regex 1830 trailing "/", such as "sources/" to operate on the "sources" list. Regex
1820 filters in a dict take the form: 1831 filters in a dict take the form:
1821 'sources/': [ ['exclude', '_(linux|mac|win)\\.cc$'] ], 1832 'sources/': [ ['exclude', '_(linux|mac|win)\\.cc$'],
1822 ['include', '_mac\\.cc$'] ], 1833 ['include', '_mac\\.cc$'] ],
1823 The first filter says to exclude all files ending in _linux.cc, _mac.cc, and 1834 The first filter says to exclude all files ending in _linux.cc, _mac.cc, and
1824 _win.cc. The second filter then includes all files ending in _mac.cc that 1835 _win.cc. The second filter then includes all files ending in _mac.cc that
1825 are now or were once in the "sources" list. Items matching an "exclude" 1836 are now or were once in the "sources" list. Items matching an "exclude"
1826 filter are subject to the same processing as would occur if they were listed 1837 filter are subject to the same processing as would occur if they were listed
1827 by name in an exclusion list (ending in "!"). Items matching an "include" 1838 by name in an exclusion list (ending in "!"). Items matching an "include"
1828 filter are brought back into the main list if previously excluded by an 1839 filter are brought back into the main list if previously excluded by an
1829 exclusion list or exclusion regex filter. Subsequent matching "exclude" 1840 exclusion list or exclusion regex filter. Subsequent matching "exclude"
1830 patterns can still cause items to be excluded after matching an "include". 1841 patterns can still cause items to be excluded after matching an "include".
1831 """ 1842 """
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
2221 build_file) 2232 build_file)
2222 2233
2223 # Move everything that can go into a "configurations" section into one. 2234 # Move everything that can go into a "configurations" section into one.
2224 for target in flat_list: 2235 for target in flat_list:
2225 target_dict = targets[target] 2236 target_dict = targets[target]
2226 SetUpConfigurations(target, target_dict) 2237 SetUpConfigurations(target, target_dict)
2227 2238
2228 # Apply exclude (!) and regex (/) list filters. 2239 # Apply exclude (!) and regex (/) list filters.
2229 for target in flat_list: 2240 for target in flat_list:
2230 target_dict = targets[target] 2241 target_dict = targets[target]
2231 ProcessListFiltersInDict(target, target_dict) 2242 ProcessListFiltersInDict(target, target_dict)
Mark Mentovai 2011/04/26 19:12:24 This will process the filters on dependencies agai
Yuki Shiino 2011/04/27 08:45:37 Done. I changed the code to remove '!' and '/' key
2232 2243
2233 # Make sure that the rules make sense, and build up rule_sources lists as 2244 # Make sure that the rules make sense, and build up rule_sources lists as
2234 # needed. Not all generators will need to use the rule_sources lists, but 2245 # needed. Not all generators will need to use the rule_sources lists, but
2235 # some may, and it seems best to build the list in a common spot. 2246 # some may, and it seems best to build the list in a common spot.
2236 # Also validate actions and run_as elements in targets. 2247 # Also validate actions and run_as elements in targets.
2237 for target in flat_list: 2248 for target in flat_list:
2238 target_dict = targets[target] 2249 target_dict = targets[target]
2239 build_file = gyp.common.BuildFile(target) 2250 build_file = gyp.common.BuildFile(target)
2240 ValidateRulesInTarget(target, target_dict, extra_sources_for_rules) 2251 ValidateRulesInTarget(target, target_dict, extra_sources_for_rules)
2241 ValidateRunAsInTarget(target, target_dict, build_file) 2252 ValidateRunAsInTarget(target, target_dict, build_file)
2242 ValidateActionsInTarget(target, target_dict, build_file) 2253 ValidateActionsInTarget(target, target_dict, build_file)
2243 2254
2244 # Generators might not expect ints. Turn them into strs. 2255 # Generators might not expect ints. Turn them into strs.
2245 TurnIntIntoStrInDict(data) 2256 TurnIntIntoStrInDict(data)
2246 2257
2247 # TODO(mark): Return |data| for now because the generator needs a list of 2258 # TODO(mark): Return |data| for now because the generator needs a list of
2248 # build files that came in. In the future, maybe it should just accept 2259 # build files that came in. In the future, maybe it should just accept
2249 # a list, and not the whole data dict. 2260 # a list, and not the whole data dict.
2250 return [flat_list, targets, data] 2261 return [flat_list, targets, data]
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