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

Side by Side Diff: tools/gn/command_desc.cc

Issue 561273003: Add public deps to GN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 6 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 unified diff | Download patch
« no previous file with comments | « tools/gn/builder_unittest.cc ('k') | tools/gn/command_refs.cc » ('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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. 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 #include <algorithm> 5 #include <algorithm>
6 #include <set> 6 #include <set>
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "tools/gn/commands.h" 10 #include "tools/gn/commands.h"
11 #include "tools/gn/config.h" 11 #include "tools/gn/config.h"
12 #include "tools/gn/config_values_extractors.h" 12 #include "tools/gn/config_values_extractors.h"
13 #include "tools/gn/deps_iterator.h"
13 #include "tools/gn/filesystem_utils.h" 14 #include "tools/gn/filesystem_utils.h"
14 #include "tools/gn/item.h" 15 #include "tools/gn/item.h"
15 #include "tools/gn/label.h" 16 #include "tools/gn/label.h"
16 #include "tools/gn/setup.h" 17 #include "tools/gn/setup.h"
17 #include "tools/gn/standard_out.h" 18 #include "tools/gn/standard_out.h"
18 #include "tools/gn/substitution_writer.h" 19 #include "tools/gn/substitution_writer.h"
19 #include "tools/gn/target.h" 20 #include "tools/gn/target.h"
20 #include "tools/gn/variables.h" 21 #include "tools/gn/variables.h"
21 22
22 namespace commands { 23 namespace commands {
(...skipping 20 matching lines...) Expand all
43 44
44 void RecursiveCollectDeps(const Target* target, std::set<Label>* result) { 45 void RecursiveCollectDeps(const Target* target, std::set<Label>* result) {
45 if (result->find(target->label()) != result->end()) 46 if (result->find(target->label()) != result->end())
46 return; // Already did this target. 47 return; // Already did this target.
47 result->insert(target->label()); 48 result->insert(target->label());
48 49
49 RecursiveCollectChildDeps(target, result); 50 RecursiveCollectChildDeps(target, result);
50 } 51 }
51 52
52 void RecursiveCollectChildDeps(const Target* target, std::set<Label>* result) { 53 void RecursiveCollectChildDeps(const Target* target, std::set<Label>* result) {
53 const LabelTargetVector& deps = target->deps(); 54 for (DepsIterator iter(target); !iter.done(); iter.Advance())
54 for (size_t i = 0; i < deps.size(); i++) 55 RecursiveCollectDeps(iter.target(), result);
55 RecursiveCollectDeps(deps[i].ptr, result);
56
57 const LabelTargetVector& datadeps = target->datadeps();
58 for (size_t i = 0; i < datadeps.size(); i++)
59 RecursiveCollectDeps(datadeps[i].ptr, result);
60 } 56 }
61 57
62 // Prints dependencies of the given target (not the target itself). If the 58 // Prints dependencies of the given target (not the target itself). If the
63 // set is non-null, new targets encountered will be added to the set, and if 59 // set is non-null, new targets encountered will be added to the set, and if
64 // a dependency is in the set already, it will not be recused into. When the 60 // a dependency is in the set already, it will not be recused into. When the
65 // set is null, all dependencies will be printed. 61 // set is null, all dependencies will be printed.
66 void RecursivePrintDeps(const Target* target, 62 void RecursivePrintDeps(const Target* target,
67 const Label& default_toolchain, 63 const Label& default_toolchain,
68 std::set<const Target*>* seen_targets, 64 std::set<const Target*>* seen_targets,
69 int indent_level) { 65 int indent_level) {
70 LabelTargetVector sorted_deps = target->deps(); 66 // Combine all deps into one sorted list.
71 const LabelTargetVector& datadeps = target->datadeps(); 67 std::vector<LabelTargetPair> sorted_deps;
72 sorted_deps.insert(sorted_deps.end(), datadeps.begin(), datadeps.end()); 68 for (DepsIterator iter(target); !iter.done(); iter.Advance())
69 sorted_deps.push_back(iter.pair());
73 std::sort(sorted_deps.begin(), sorted_deps.end(), 70 std::sort(sorted_deps.begin(), sorted_deps.end(),
74 LabelPtrLabelLess<Target>()); 71 LabelPtrLabelLess<Target>());
75 72
76 std::string indent(indent_level * 2, ' '); 73 std::string indent(indent_level * 2, ' ');
77 for (size_t i = 0; i < sorted_deps.size(); i++) { 74 for (size_t i = 0; i < sorted_deps.size(); i++) {
78 const Target* cur_dep = sorted_deps[i].ptr; 75 const Target* cur_dep = sorted_deps[i].ptr;
79 76
80 // Don't print groups. Groups are flattened such that the deps of the
81 // group are added directly to the target that depended on the group.
82 // Printing and recursing into groups here will cause such targets to be
83 // duplicated.
84 //
85 // It would be much more intuitive to do the opposite and not display the
86 // deps that were copied from the group to the target and instead display
87 // the group, but the source of those dependencies is not tracked.
88 if (cur_dep->output_type() == Target::GROUP)
89 continue;
90
91 OutputString(indent + 77 OutputString(indent +
92 cur_dep->label().GetUserVisibleName(default_toolchain)); 78 cur_dep->label().GetUserVisibleName(default_toolchain));
93 bool print_children = true; 79 bool print_children = true;
94 if (seen_targets) { 80 if (seen_targets) {
95 if (seen_targets->find(cur_dep) == seen_targets->end()) { 81 if (seen_targets->find(cur_dep) == seen_targets->end()) {
96 // New target, mark it visited. 82 // New target, mark it visited.
97 seen_targets->insert(cur_dep); 83 seen_targets->insert(cur_dep);
98 } else { 84 } else {
99 // Already seen. 85 // Already seen.
100 print_children = false; 86 print_children = false;
101 // Only print "..." if something is actually elided, which means that 87 // Only print "..." if something is actually elided, which means that
102 // the current target has children. 88 // the current target has children.
103 if (!cur_dep->deps().empty() || !cur_dep->datadeps().empty()) 89 if (!cur_dep->public_deps().empty() ||
90 !cur_dep->private_deps().empty() ||
91 !cur_dep->data_deps().empty())
104 OutputString("..."); 92 OutputString("...");
105 } 93 }
106 } 94 }
107 95
108 OutputString("\n"); 96 OutputString("\n");
109 if (print_children) { 97 if (print_children) {
110 RecursivePrintDeps(cur_dep, default_toolchain, seen_targets, 98 RecursivePrintDeps(cur_dep, default_toolchain, seen_targets,
111 indent_level + 1); 99 indent_level + 1);
112 } 100 }
113 } 101 }
(...skipping 15 matching lines...) Expand all
129 // Don't recurse into duplicates. 117 // Don't recurse into duplicates.
130 std::set<const Target*> seen_targets; 118 std::set<const Target*> seen_targets;
131 RecursivePrintDeps(target, toolchain_label, &seen_targets, 1); 119 RecursivePrintDeps(target, toolchain_label, &seen_targets, 1);
132 } 120 }
133 return; 121 return;
134 } 122 }
135 123
136 // Collect the deps to display. 124 // Collect the deps to display.
137 std::vector<Label> deps; 125 std::vector<Label> deps;
138 if (cmdline->HasSwitch("all")) { 126 if (cmdline->HasSwitch("all")) {
127 // Show all dependencies.
139 if (display_header) 128 if (display_header)
140 OutputString("\nAll recursive dependencies:\n"); 129 OutputString("\nAll recursive dependencies:\n");
141 130
142 std::set<Label> all_deps; 131 std::set<Label> all_deps;
143 RecursiveCollectChildDeps(target, &all_deps); 132 RecursiveCollectChildDeps(target, &all_deps);
144 for (std::set<Label>::iterator i = all_deps.begin(); 133 for (std::set<Label>::iterator i = all_deps.begin();
145 i != all_deps.end(); ++i) 134 i != all_deps.end(); ++i)
146 deps.push_back(*i); 135 deps.push_back(*i);
147 } else { 136 } else {
137 // Show direct dependencies only.
148 if (display_header) { 138 if (display_header) {
149 OutputString( 139 OutputString(
150 "\nDirect dependencies " 140 "\nDirect dependencies "
151 "(try also \"--all\", \"--tree\", or even \"--all --tree\"):\n"); 141 "(try also \"--all\", \"--tree\", or even \"--all --tree\"):\n");
152 } 142 }
153 143 for (DepsIterator iter(target); !iter.done(); iter.Advance())
154 const LabelTargetVector& target_deps = target->deps(); 144 deps.push_back(iter.label());
155 for (size_t i = 0; i < target_deps.size(); i++)
156 deps.push_back(target_deps[i].label);
157
158 const LabelTargetVector& target_datadeps = target->datadeps();
159 for (size_t i = 0; i < target_datadeps.size(); i++)
160 deps.push_back(target_datadeps[i].label);
161 } 145 }
162 146
163 std::sort(deps.begin(), deps.end()); 147 std::sort(deps.begin(), deps.end());
164 for (size_t i = 0; i < deps.size(); i++) 148 for (size_t i = 0; i < deps.size(); i++)
165 OutputString(" " + deps[i].GetUserVisibleName(toolchain_label) + "\n"); 149 OutputString(" " + deps[i].GetUserVisibleName(toolchain_label) + "\n");
166 } 150 }
167 151
168 void PrintForwardDependentConfigsFrom(const Target* target, 152 void PrintForwardDependentConfigsFrom(const Target* target,
169 bool display_header) { 153 bool display_header) {
170 if (target->forward_dependent_configs().empty()) 154 if (target->forward_dependent_configs().empty())
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 OutputString(" " + 282 OutputString(" " +
299 configs[i].label.GetUserVisibleName(toolchain_label) + "\n"); 283 configs[i].label.GetUserVisibleName(toolchain_label) + "\n");
300 } 284 }
301 } 285 }
302 286
303 void PrintConfigs(const Target* target, bool display_header) { 287 void PrintConfigs(const Target* target, bool display_header) {
304 PrintConfigsVector(target, target->configs().vector(), "configs", 288 PrintConfigsVector(target, target->configs().vector(), "configs",
305 display_header); 289 display_header);
306 } 290 }
307 291
308 void PrintDirectDependentConfigs(const Target* target, bool display_header) { 292 void PrintPublicConfigs(const Target* target, bool display_header) {
309 PrintConfigsVector(target, target->direct_dependent_configs(), 293 PrintConfigsVector(target, target->public_configs(),
310 "direct_dependent_configs", display_header); 294 "public_configs", display_header);
311 } 295 }
312 296
313 void PrintAllDependentConfigs(const Target* target, bool display_header) { 297 void PrintAllDependentConfigs(const Target* target, bool display_header) {
314 PrintConfigsVector(target, target->all_dependent_configs(), 298 PrintConfigsVector(target, target->all_dependent_configs(),
315 "all_dependent_configs", display_header); 299 "all_dependent_configs", display_header);
316 } 300 }
317 301
318 void PrintFileList(const Target::FileList& files, 302 void PrintFileList(const Target::FileList& files,
319 const std::string& header, 303 const std::string& header,
320 bool indent_extra, 304 bool indent_extra,
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 " they're specified. This includes both configs specified in the\n" 487 " they're specified. This includes both configs specified in the\n"
504 " \"configs\" variable, as well as configs pushed onto this target\n" 488 " \"configs\" variable, as well as configs pushed onto this target\n"
505 " via dependencies specifying \"all\" or \"direct\" dependent\n" 489 " via dependencies specifying \"all\" or \"direct\" dependent\n"
506 " configs.\n" 490 " configs.\n"
507 "\n" 491 "\n"
508 " deps [--all | --tree]\n" 492 " deps [--all | --tree]\n"
509 " Show immediate (or, when \"--all\" or \"--tree\" is specified,\n" 493 " Show immediate (or, when \"--all\" or \"--tree\" is specified,\n"
510 " recursive) dependencies of the given target. \"--tree\" shows them\n" 494 " recursive) dependencies of the given target. \"--tree\" shows them\n"
511 " in a tree format with duplicates elided (noted by \"...\").\n" 495 " in a tree format with duplicates elided (noted by \"...\").\n"
512 " \"--all\" shows them sorted alphabetically. Using both flags will\n" 496 " \"--all\" shows them sorted alphabetically. Using both flags will\n"
513 " print a tree with no omissions. Both \"deps\" and \"datadeps\"\n" 497 " print a tree with no omissions. The \"deps\", \"public_deps\", and\n"
514 " will be included.\n" 498 " \"data_deps\" will all be included.\n"
515 "\n" 499 "\n"
516 " direct_dependent_configs\n" 500 " public_configs\n"
517 " all_dependent_configs\n" 501 " all_dependent_configs\n"
518 " Shows the labels of configs applied to targets that depend on this\n" 502 " Shows the labels of configs applied to targets that depend on this\n"
519 " one (either directly or all of them).\n" 503 " one (either directly or all of them).\n"
520 "\n" 504 "\n"
521 " forward_dependent_configs_from\n" 505 " forward_dependent_configs_from\n"
522 " Shows the labels of dependencies for which dependent configs will\n" 506 " Shows the labels of dependencies for which dependent configs will\n"
523 " be pushed to targets depending on the current one.\n" 507 " be pushed to targets depending on the current one.\n"
524 "\n" 508 "\n"
525 " script\n" 509 " script\n"
526 " args\n" 510 " args\n"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 return 1; 573 return 1;
590 574
591 #define CONFIG_VALUE_HANDLER(name, type) \ 575 #define CONFIG_VALUE_HANDLER(name, type) \
592 } else if (what == #name) { OUTPUT_CONFIG_VALUE(name, type) 576 } else if (what == #name) { OUTPUT_CONFIG_VALUE(name, type)
593 577
594 if (args.size() == 3) { 578 if (args.size() == 3) {
595 // User specified one thing to display. 579 // User specified one thing to display.
596 const std::string& what = args[2]; 580 const std::string& what = args[2];
597 if (what == variables::kConfigs) { 581 if (what == variables::kConfigs) {
598 PrintConfigs(target, false); 582 PrintConfigs(target, false);
599 } else if (what == variables::kDirectDependentConfigs) { 583 } else if (what == variables::kPublicConfigs) {
600 PrintDirectDependentConfigs(target, false); 584 PrintPublicConfigs(target, false);
601 } else if (what == variables::kAllDependentConfigs) { 585 } else if (what == variables::kAllDependentConfigs) {
602 PrintAllDependentConfigs(target, false); 586 PrintAllDependentConfigs(target, false);
603 } else if (what == variables::kForwardDependentConfigsFrom) { 587 } else if (what == variables::kForwardDependentConfigsFrom) {
604 PrintForwardDependentConfigsFrom(target, false); 588 PrintForwardDependentConfigsFrom(target, false);
605 } else if (what == variables::kSources) { 589 } else if (what == variables::kSources) {
606 PrintSources(target, false); 590 PrintSources(target, false);
607 } else if (what == variables::kPublic) { 591 } else if (what == variables::kPublic) {
608 PrintPublic(target, false); 592 PrintPublic(target, false);
609 } else if (what == variables::kCheckIncludes) { 593 } else if (what == variables::kCheckIncludes) {
610 PrintCheckIncludes(target, false); 594 PrintCheckIncludes(target, false);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 PrintPublic(target, true); 661 PrintPublic(target, true);
678 PrintCheckIncludes(target, true); 662 PrintCheckIncludes(target, true);
679 PrintAllowCircularIncludesFrom(target, true); 663 PrintAllowCircularIncludesFrom(target, true);
680 } 664 }
681 PrintVisibility(target, true); 665 PrintVisibility(target, true);
682 if (is_binary_output) { 666 if (is_binary_output) {
683 PrintTestonly(target, true); 667 PrintTestonly(target, true);
684 PrintConfigs(target, true); 668 PrintConfigs(target, true);
685 } 669 }
686 670
687 PrintDirectDependentConfigs(target, true); 671 PrintPublicConfigs(target, true);
688 PrintAllDependentConfigs(target, true); 672 PrintAllDependentConfigs(target, true);
689 PrintForwardDependentConfigsFrom(target, true); 673 PrintForwardDependentConfigsFrom(target, true);
690 674
691 PrintInputs(target, true); 675 PrintInputs(target, true);
692 676
693 if (is_binary_output) { 677 if (is_binary_output) {
694 OUTPUT_CONFIG_VALUE(defines, std::string) 678 OUTPUT_CONFIG_VALUE(defines, std::string)
695 OUTPUT_CONFIG_VALUE(include_dirs, SourceDir) 679 OUTPUT_CONFIG_VALUE(include_dirs, SourceDir)
696 OUTPUT_CONFIG_VALUE(cflags, std::string) 680 OUTPUT_CONFIG_VALUE(cflags, std::string)
697 OUTPUT_CONFIG_VALUE(cflags_c, std::string) 681 OUTPUT_CONFIG_VALUE(cflags_c, std::string)
(...skipping 20 matching lines...) Expand all
718 // so always display them, even for groups and such. 702 // so always display them, even for groups and such.
719 PrintLibs(target, true); 703 PrintLibs(target, true);
720 PrintLibDirs(target, true); 704 PrintLibDirs(target, true);
721 705
722 PrintDeps(target, true); 706 PrintDeps(target, true);
723 707
724 return 0; 708 return 0;
725 } 709 }
726 710
727 } // namespace commands 711 } // namespace commands
OLDNEW
« no previous file with comments | « tools/gn/builder_unittest.cc ('k') | tools/gn/command_refs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698