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

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

Issue 25398003: Revert r1745: "Add an option to prune targets" (Closed) Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 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 | « pylib/gyp/common.py ('k') | test/prune_targets/gyptest-prune-targets.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from compiler.ast import Const 5 from compiler.ast import Const
6 from compiler.ast import Dict 6 from compiler.ast import Dict
7 from compiler.ast import Discard 7 from compiler.ast import Discard
8 from compiler.ast import List 8 from compiler.ast import List
9 from compiler.ast import Module 9 from compiler.ast import Module
10 from compiler.ast import Node 10 from compiler.ast import Node
(...skipping 2544 matching lines...) Expand 10 before | Expand all | Expand 10 after
2555 for index in xrange(0, len(the_list)): 2555 for index in xrange(0, len(the_list)):
2556 item = the_list[index] 2556 item = the_list[index]
2557 if isinstance(item, int): 2557 if isinstance(item, int):
2558 the_list[index] = str(item) 2558 the_list[index] = str(item)
2559 elif isinstance(item, dict): 2559 elif isinstance(item, dict):
2560 TurnIntIntoStrInDict(item) 2560 TurnIntIntoStrInDict(item)
2561 elif isinstance(item, list): 2561 elif isinstance(item, list):
2562 TurnIntIntoStrInList(item) 2562 TurnIntIntoStrInList(item)
2563 2563
2564 2564
2565 def PruneUnwantedTargets(targets, flat_list, dependency_nodes, root_targets):
2566 """Return only the targets that are deep dependencies of |root_targets|."""
2567 qualified_root_targets = []
2568 for target in root_targets:
2569 target = target.strip()
2570 qualified_targets = gyp.common.FindQualifiedTargets(target, flat_list)
2571 if not qualified_targets:
2572 raise GypError("Could not find target %s" % target)
2573 qualified_root_targets.extend(qualified_targets)
2574
2575 wanted_targets = {}
2576 for target in qualified_root_targets:
2577 wanted_targets[target] = targets[target]
2578 for dependency in dependency_nodes[target].DeepDependencies():
2579 wanted_targets[dependency] = targets[dependency]
2580
2581 wanted_flat_list = [t for t in flat_list if t in wanted_targets]
2582 return wanted_targets, wanted_flat_list
2583
2584
2585 def VerifyNoCollidingTargets(targets): 2565 def VerifyNoCollidingTargets(targets):
2586 """Verify that no two targets in the same directory share the same name. 2566 """Verify that no two targets in the same directory share the same name.
2587 2567
2588 Arguments: 2568 Arguments:
2589 targets: A list of targets in the form 'path/to/file.gyp:target_name'. 2569 targets: A list of targets in the form 'path/to/file.gyp:target_name'.
2590 """ 2570 """
2591 # Keep a dict going from 'subdirectory:target_name' to 'foo.gyp'. 2571 # Keep a dict going from 'subdirectory:target_name' to 'foo.gyp'.
2592 used = {} 2572 used = {}
2593 for target in targets: 2573 for target in targets:
2594 # Separate out 'path/to/file.gyp, 'target_name' from 2574 # Separate out 'path/to/file.gyp, 'target_name' from
2595 # 'path/to/file.gyp:target_name'. 2575 # 'path/to/file.gyp:target_name'.
2596 path, name = target.rsplit(':', 1) 2576 path, name = target.rsplit(':', 1)
2597 # Separate out 'path/to', 'file.gyp' from 'path/to/file.gyp'. 2577 # Separate out 'path/to', 'file.gyp' from 'path/to/file.gyp'.
2598 subdir, gyp = os.path.split(path) 2578 subdir, gyp = os.path.split(path)
2599 # Use '.' for the current directory '', so that the error messages make 2579 # Use '.' for the current directory '', so that the error messages make
2600 # more sense. 2580 # more sense.
2601 if not subdir: 2581 if not subdir:
2602 subdir = '.' 2582 subdir = '.'
2603 # Prepare a key like 'path/to:target_name'. 2583 # Prepare a key like 'path/to:target_name'.
2604 key = subdir + ':' + name 2584 key = subdir + ':' + name
2605 if key in used: 2585 if key in used:
2606 # Complain if this target is already used. 2586 # Complain if this target is already used.
2607 raise GypError('Duplicate target name "%s" in directory "%s" used both ' 2587 raise GypError('Duplicate target name "%s" in directory "%s" used both '
2608 'in "%s" and "%s".' % (name, subdir, gyp, used[key])) 2588 'in "%s" and "%s".' % (name, subdir, gyp, used[key]))
2609 used[key] = gyp 2589 used[key] = gyp
2610 2590
2611 2591
2612 def Load(build_files, variables, includes, depth, generator_input_info, check, 2592 def Load(build_files, variables, includes, depth, generator_input_info, check,
2613 circular_check, parallel, root_targets): 2593 circular_check, parallel):
2614 # Set up path_sections and non_configuration_keys with the default data plus 2594 # Set up path_sections and non_configuration_keys with the default data plus
2615 # the generator-specifc data. 2595 # the generator-specifc data.
2616 global path_sections 2596 global path_sections
2617 path_sections = base_path_sections[:] 2597 path_sections = base_path_sections[:]
2618 path_sections.extend(generator_input_info['path_sections']) 2598 path_sections.extend(generator_input_info['path_sections'])
2619 2599
2620 global non_configuration_keys 2600 global non_configuration_keys
2621 non_configuration_keys = base_non_configuration_keys[:] 2601 non_configuration_keys = base_non_configuration_keys[:]
2622 non_configuration_keys.extend(generator_input_info['non_configuration_keys']) 2602 non_configuration_keys.extend(generator_input_info['non_configuration_keys'])
2623 2603
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2691 # Make sure every dependency appears at most once. 2671 # Make sure every dependency appears at most once.
2692 RemoveDuplicateDependencies(targets) 2672 RemoveDuplicateDependencies(targets)
2693 2673
2694 if circular_check: 2674 if circular_check:
2695 # Make sure that any targets in a.gyp don't contain dependencies in other 2675 # Make sure that any targets in a.gyp don't contain dependencies in other
2696 # .gyp files that further depend on a.gyp. 2676 # .gyp files that further depend on a.gyp.
2697 VerifyNoGYPFileCircularDependencies(targets) 2677 VerifyNoGYPFileCircularDependencies(targets)
2698 2678
2699 [dependency_nodes, flat_list] = BuildDependencyList(targets) 2679 [dependency_nodes, flat_list] = BuildDependencyList(targets)
2700 2680
2701 if root_targets:
2702 # Remove, from |targets| and |flat_list|, the targets that are not deep
2703 # dependencies of the targets specified in |root_targets|.
2704 targets, flat_list = PruneUnwantedTargets(
2705 targets, flat_list, dependency_nodes, root_targets)
2706
2707 # Check that no two targets in the same directory have the same name. 2681 # Check that no two targets in the same directory have the same name.
2708 VerifyNoCollidingTargets(flat_list) 2682 VerifyNoCollidingTargets(flat_list)
2709 2683
2710 # Handle dependent settings of various types. 2684 # Handle dependent settings of various types.
2711 for settings_type in ['all_dependent_settings', 2685 for settings_type in ['all_dependent_settings',
2712 'direct_dependent_settings', 2686 'direct_dependent_settings',
2713 'link_settings']: 2687 'link_settings']:
2714 DoDependentSettings(settings_type, flat_list, targets, dependency_nodes) 2688 DoDependentSettings(settings_type, flat_list, targets, dependency_nodes)
2715 2689
2716 # Take out the dependent settings now that they've been published to all 2690 # Take out the dependent settings now that they've been published to all
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2767 ValidateRunAsInTarget(target, target_dict, build_file) 2741 ValidateRunAsInTarget(target, target_dict, build_file)
2768 ValidateActionsInTarget(target, target_dict, build_file) 2742 ValidateActionsInTarget(target, target_dict, build_file)
2769 2743
2770 # Generators might not expect ints. Turn them into strs. 2744 # Generators might not expect ints. Turn them into strs.
2771 TurnIntIntoStrInDict(data) 2745 TurnIntIntoStrInDict(data)
2772 2746
2773 # TODO(mark): Return |data| for now because the generator needs a list of 2747 # TODO(mark): Return |data| for now because the generator needs a list of
2774 # build files that came in. In the future, maybe it should just accept 2748 # build files that came in. In the future, maybe it should just accept
2775 # a list, and not the whole data dict. 2749 # a list, and not the whole data dict.
2776 return [flat_list, targets, data] 2750 return [flat_list, targets, data]
OLDNEW
« no previous file with comments | « pylib/gyp/common.py ('k') | test/prune_targets/gyptest-prune-targets.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698