Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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: |
| 1360 # Apply the list filters ('!' and '/') to dependencies list. | |
| 1361 deps_dict = {} | |
| 1362 for op in ('', '!', '/'): | |
| 1363 key = 'dependencies' + op | |
| 1364 if key in spec and len(spec[key]) > 0: | |
| 1365 deps_dict[key] = spec[key] | |
| 1366 del spec[key] # Remove the key applied. | |
| 1367 ProcessListFiltersInDict(target, deps_dict) | |
| 1368 # Write the result back to |spec|. | |
| 1369 spec['dependencies'] = deps_dict['dependencies'] | |
|
Mark Mentovai
2011/05/03 18:32:35
1. I don’t want to set spec['dependencies'] at all
Yuki Shiino
2011/05/04 10:52:11
I've changed the way, but I explain what I thought
| |
| 1370 | |
| 1356 dependencies = spec['dependencies'] | 1371 dependencies = spec['dependencies'] |
| 1357 for index in xrange(0, len(dependencies)): | 1372 for index in xrange(0, len(dependencies)): |
| 1358 try: | 1373 try: |
| 1359 dependency = dependencies[index] | 1374 dependency = dependencies[index] |
| 1360 dependency_node = dependency_nodes[dependency] | 1375 dependency_node = dependency_nodes[dependency] |
| 1361 target_node.dependencies.append(dependency_node) | 1376 target_node.dependencies.append(dependency_node) |
| 1362 dependency_node.dependents.append(target_node) | 1377 dependency_node.dependents.append(target_node) |
| 1363 except KeyError, e: | 1378 except KeyError, e: |
| 1364 gyp.common.ExceptionAppend(e, | 1379 gyp.common.ExceptionAppend(e, |
| 1365 'while trying to load target %s' % target) | 1380 'while trying to load target %s' % target) |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1811 """Process regular expression and exclusion-based filters on lists. | 1826 """Process regular expression and exclusion-based filters on lists. |
| 1812 | 1827 |
| 1813 An exclusion list is in a dict key named with a trailing "!", like | 1828 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 | 1829 "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 | 1830 main list, which in this example, would be "sources". Removed items are |
| 1816 placed into a "sources_excluded" list in the dict. | 1831 placed into a "sources_excluded" list in the dict. |
| 1817 | 1832 |
| 1818 Regular expression (regex) filters are contained in dict keys named with a | 1833 Regular expression (regex) filters are contained in dict keys named with a |
| 1819 trailing "/", such as "sources/" to operate on the "sources" list. Regex | 1834 trailing "/", such as "sources/" to operate on the "sources" list. Regex |
| 1820 filters in a dict take the form: | 1835 filters in a dict take the form: |
| 1821 'sources/': [ ['exclude', '_(linux|mac|win)\\.cc$'] ], | 1836 'sources/': [ ['exclude', '_(linux|mac|win)\\.cc$'], |
| 1822 ['include', '_mac\\.cc$'] ], | 1837 ['include', '_mac\\.cc$'] ], |
| 1823 The first filter says to exclude all files ending in _linux.cc, _mac.cc, and | 1838 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 | 1839 _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" | 1840 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 | 1841 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" | 1842 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 | 1843 filter are brought back into the main list if previously excluded by an |
| 1829 exclusion list or exclusion regex filter. Subsequent matching "exclude" | 1844 exclusion list or exclusion regex filter. Subsequent matching "exclude" |
| 1830 patterns can still cause items to be excluded after matching an "include". | 1845 patterns can still cause items to be excluded after matching an "include". |
| 1831 """ | 1846 """ |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2241 ValidateRunAsInTarget(target, target_dict, build_file) | 2256 ValidateRunAsInTarget(target, target_dict, build_file) |
| 2242 ValidateActionsInTarget(target, target_dict, build_file) | 2257 ValidateActionsInTarget(target, target_dict, build_file) |
| 2243 | 2258 |
| 2244 # Generators might not expect ints. Turn them into strs. | 2259 # Generators might not expect ints. Turn them into strs. |
| 2245 TurnIntIntoStrInDict(data) | 2260 TurnIntIntoStrInDict(data) |
| 2246 | 2261 |
| 2247 # TODO(mark): Return |data| for now because the generator needs a list of | 2262 # 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 | 2263 # build files that came in. In the future, maybe it should just accept |
| 2249 # a list, and not the whole data dict. | 2264 # a list, and not the whole data dict. |
| 2250 return [flat_list, targets, data] | 2265 return [flat_list, targets, data] |
| OLD | NEW |