OLD | NEW |
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 <map> | 5 #include <map> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "tools/gn/commands.h" | 9 #include "tools/gn/commands.h" |
| 10 #include "tools/gn/deps_iterator.h" |
10 #include "tools/gn/filesystem_utils.h" | 11 #include "tools/gn/filesystem_utils.h" |
11 #include "tools/gn/input_file.h" | 12 #include "tools/gn/input_file.h" |
12 #include "tools/gn/item.h" | 13 #include "tools/gn/item.h" |
13 #include "tools/gn/setup.h" | 14 #include "tools/gn/setup.h" |
14 #include "tools/gn/standard_out.h" | 15 #include "tools/gn/standard_out.h" |
15 #include "tools/gn/target.h" | 16 #include "tools/gn/target.h" |
16 | 17 |
17 namespace commands { | 18 namespace commands { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 typedef std::set<const Target*> TargetSet; | 22 typedef std::set<const Target*> TargetSet; |
22 typedef std::vector<const Target*> TargetVector; | 23 typedef std::vector<const Target*> TargetVector; |
23 | 24 |
24 // Maps targets to the list of targets that depend on them. | 25 // Maps targets to the list of targets that depend on them. |
25 typedef std::multimap<const Target*, const Target*> DepMap; | 26 typedef std::multimap<const Target*, const Target*> DepMap; |
26 | 27 |
27 // Populates the reverse dependency map for the targets in the Setup. | 28 // Populates the reverse dependency map for the targets in the Setup. |
28 void FillDepMap(Setup* setup, DepMap* dep_map) { | 29 void FillDepMap(Setup* setup, DepMap* dep_map) { |
29 std::vector<const Target*> targets = | 30 std::vector<const Target*> targets = |
30 setup->builder()->GetAllResolvedTargets(); | 31 setup->builder()->GetAllResolvedTargets(); |
31 | 32 |
32 for (size_t target_i = 0; target_i < targets.size(); target_i++) { | 33 for (size_t target_i = 0; target_i < targets.size(); target_i++) { |
33 const Target* target = targets[target_i]; | 34 for (DepsIterator iter(targets[target_i]); !iter.done(); iter.Advance()) |
34 | 35 dep_map->insert(std::make_pair(iter.target(), targets[target_i])); |
35 // Add all deps to the map. | |
36 const LabelTargetVector& deps = target->deps(); | |
37 for (size_t dep_i = 0; dep_i < deps.size(); dep_i++) | |
38 dep_map->insert(std::make_pair(deps[dep_i].ptr, target)); | |
39 | |
40 // Include data deps as well. | |
41 const LabelTargetVector& datadeps = target->datadeps(); | |
42 for (size_t dep_i = 0; dep_i < datadeps.size(); dep_i++) | |
43 dep_map->insert(std::make_pair(datadeps[dep_i].ptr, target)); | |
44 } | 36 } |
45 } | 37 } |
46 | 38 |
47 // Returns the file path generating this item. | 39 // Returns the file path generating this item. |
48 base::FilePath FilePathForItem(const Item* item) { | 40 base::FilePath FilePathForItem(const Item* item) { |
49 return item->defined_from()->GetRange().begin().file()->physical_name(); | 41 return item->defined_from()->GetRange().begin().file()->physical_name(); |
50 } | 42 } |
51 | 43 |
52 // Prints the targets which are the result of a query. This list is sorted | 44 // Prints the targets which are the result of a query. This list is sorted |
53 // and, if as_files is set, the unique filenames matching those targets will | 45 // and, if as_files is set, the unique filenames matching those targets will |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 cur_dep != dep_end; cur_dep++) | 275 cur_dep != dep_end; cur_dep++) |
284 results.insert(cur_dep->second); | 276 results.insert(cur_dep->second); |
285 } | 277 } |
286 OutputResultSet(results, files); | 278 OutputResultSet(results, files); |
287 } | 279 } |
288 | 280 |
289 return 0; | 281 return 0; |
290 } | 282 } |
291 | 283 |
292 } // namespace commands | 284 } // namespace commands |
OLD | NEW |