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

Unified Diff: pylib/gyp/input.py

Issue 24803004: Add an option to prune unwanted targets (Closed) Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: pylib/gyp/input.py
diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py
index 8abfa3d999e3ed71dae961824292fcd702787058..71535294e989bfa265eaba9767e0faeb350628ca 100644
--- a/pylib/gyp/input.py
+++ b/pylib/gyp/input.py
@@ -2562,6 +2562,22 @@ def TurnIntIntoStrInList(the_list):
TurnIntIntoStrInList(item)
+def PruneUnwantedTargets(targets, flat_list, dependency_nodes, build_files):
+ """
+ Return only the targets that are deep dependencies of the targets specified
+ in |build_files|.
+ """
+ wanted_targets = {}
+ for target in flat_list:
+ if gyp.common.BuildFile(target) in build_files:
+ wanted_targets[target] = targets[target]
+ for dependency in dependency_nodes[target].DeepDependencies():
+ wanted_targets[dependency] = targets[dependency]
+
+ wanted_flat_list = [t for t in flat_list if t in wanted_targets]
+ return [wanted_targets, wanted_flat_list]
+
+
def VerifyNoCollidingTargets(targets):
"""Verify that no two targets in the same directory share the same name.
@@ -2590,7 +2606,7 @@ def VerifyNoCollidingTargets(targets):
def Load(build_files, variables, includes, depth, generator_input_info, check,
- circular_check, parallel):
+ circular_check, parallel, prune_targets):
# Set up path_sections and non_configuration_keys with the default data plus
# the generator-specifc data.
global path_sections
@@ -2617,6 +2633,10 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
# for rules.
extra_sources_for_rules = generator_input_info['extra_sources_for_rules']
+ # Normalize paths everywhere. This is important because paths will be
scottmg 2013/09/26 22:11:07 Why did this need to move?
+ # used as keys to the data dict and for references between input files.
+ build_files = [os.path.normpath(i) for i in build_files]
+
# Load build files. This loads every target-containing build file into
# the |data| dictionary such that the keys to |data| are build file names,
# and the values are the entire build file contents after "early" or "pre"
@@ -2627,9 +2647,6 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
data = {'target_build_files': set()}
aux_data = {}
for build_file in build_files:
- # Normalize paths everywhere. This is important because paths will be
- # used as keys to the data dict and for references between input files.
- build_file = os.path.normpath(build_file)
try:
if parallel:
LoadTargetBuildFileParallel(build_file, data, aux_data,
@@ -2678,6 +2695,12 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
[dependency_nodes, flat_list] = BuildDependencyList(targets)
+ if prune_targets:
+ # Remove, from |targets| and |flat_list|, the targets that are not deep
+ # dependencies of the targets specified in |build_files|.
+ [targets, flat_list] = PruneUnwantedTargets(
scottmg 2013/09/26 22:11:07 [ ] around targets, flat_list is odd here. Just re
+ targets, flat_list, dependency_nodes, build_files)
+
# Check that no two targets in the same directory have the same name.
VerifyNoCollidingTargets(flat_list)

Powered by Google App Engine
This is Rietveld 408576698