| 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 "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 return true; | 134 return true; |
| 135 } | 135 } |
| 136 for (const auto& cur_file : target->inputs()) { | 136 for (const auto& cur_file : target->inputs()) { |
| 137 if (cur_file == file) | 137 if (cur_file == file) |
| 138 return true; | 138 return true; |
| 139 } | 139 } |
| 140 for (const auto& cur_file : target->data()) { | 140 for (const auto& cur_file : target->data()) { |
| 141 if (cur_file == file.value()) | 141 if (cur_file == file.value()) |
| 142 return true; | 142 return true; |
| 143 } | 143 } |
| 144 |
| 145 std::vector<SourceFile> outputs; |
| 146 target->action_values().GetOutputsAsSourceFiles(target, &outputs); |
| 147 for (const auto& cur_file : outputs) { |
| 148 if (cur_file == file) |
| 149 return true; |
| 150 } |
| 144 return false; | 151 return false; |
| 145 } | 152 } |
| 146 | 153 |
| 147 void GetTargetsContainingFile(Setup* setup, | 154 void GetTargetsContainingFile(Setup* setup, |
| 148 const std::vector<const Target*>& all_targets, | 155 const std::vector<const Target*>& all_targets, |
| 149 const SourceFile& file, | 156 const SourceFile& file, |
| 150 bool all_toolchains, | 157 bool all_toolchains, |
| 151 UniqueVector<const Target*>* matches) { | 158 UniqueVector<const Target*>* matches) { |
| 152 Label default_toolchain = setup->loader()->default_toolchain_label(); | 159 Label default_toolchain = setup->loader()->default_toolchain_label(); |
| 153 for (const auto& target : all_targets) { | 160 for (const auto& target : all_targets) { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 "\n" | 286 "\n" |
| 280 " - Config label: The result will be which targets list the given\n" | 287 " - Config label: The result will be which targets list the given\n" |
| 281 " config in its \"configs\" or \"public_configs\" list.\n" | 288 " config in its \"configs\" or \"public_configs\" list.\n" |
| 282 "\n" | 289 "\n" |
| 283 " - Label pattern: The result will be which targets depend on any\n" | 290 " - Label pattern: The result will be which targets depend on any\n" |
| 284 " target matching the given pattern. Patterns will not match\n" | 291 " target matching the given pattern. Patterns will not match\n" |
| 285 " configs. These are not general regular expressions, see\n" | 292 " configs. These are not general regular expressions, see\n" |
| 286 " \"gn help label_pattern\" for details.\n" | 293 " \"gn help label_pattern\" for details.\n" |
| 287 "\n" | 294 "\n" |
| 288 " - File name: The result will be which targets list the given file in\n" | 295 " - File name: The result will be which targets list the given file in\n" |
| 289 " its \"inputs\", \"sources\", \"public\", or \"data\". Any input\n" | 296 " its \"inputs\", \"sources\", \"public\", \"data\", or \"outputs\".\n" |
| 290 " that does not contain wildcards and does not match a target or a\n" | 297 " Any input that does not contain wildcards and does not match a\n" |
| 291 " config will be treated as a file.\n" | 298 " target or a config will be treated as a file.\n" |
| 292 "\n" | 299 "\n" |
| 293 " - Response file: If the input starts with an \"@\", it will be\n" | 300 " - Response file: If the input starts with an \"@\", it will be\n" |
| 294 " interpreted as a path to a file containing a list of labels or\n" | 301 " interpreted as a path to a file containing a list of labels or\n" |
| 295 " file names, one per line. This allows us to handle long lists\n" | 302 " file names, one per line. This allows us to handle long lists\n" |
| 296 " of inputs without worrying about command line limits.\n" | 303 " of inputs without worrying about command line limits.\n" |
| 297 "\n" | 304 "\n" |
| 298 "Options\n" | 305 "Options\n" |
| 299 "\n" | 306 "\n" |
| 300 " --all\n" | 307 " --all\n" |
| 301 " When used without --tree, will recurse and display all unique\n" | 308 " When used without --tree, will recurse and display all unique\n" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 .PrintToStdout(); | 391 .PrintToStdout(); |
| 385 return 1; | 392 return 1; |
| 386 } | 393 } |
| 387 | 394 |
| 388 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); | 395 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); |
| 389 bool tree = cmdline->HasSwitch("tree"); | 396 bool tree = cmdline->HasSwitch("tree"); |
| 390 bool all = cmdline->HasSwitch("all"); | 397 bool all = cmdline->HasSwitch("all"); |
| 391 bool all_toolchains = cmdline->HasSwitch("all-toolchains"); | 398 bool all_toolchains = cmdline->HasSwitch("all-toolchains"); |
| 392 | 399 |
| 393 Setup* setup = new Setup; | 400 Setup* setup = new Setup; |
| 394 setup->set_check_for_bad_items(false); | 401 setup->build_settings().set_check_for_bad_items(false); |
| 395 if (!setup->DoSetup(args[0], false) || !setup->Run()) | 402 if (!setup->DoSetup(args[0], false) || !setup->Run()) |
| 396 return 1; | 403 return 1; |
| 397 | 404 |
| 398 // The inputs are everything but the first arg (which is the build dir). | 405 // The inputs are everything but the first arg (which is the build dir). |
| 399 std::vector<std::string> inputs; | 406 std::vector<std::string> inputs; |
| 400 for (size_t i = 1; i < args.size(); i++) { | 407 for (size_t i = 1; i < args.size(); i++) { |
| 401 if (args[i][0] == '@') { | 408 if (args[i][0] == '@') { |
| 402 // The argument is as a path to a response file. | 409 // The argument is as a path to a response file. |
| 403 std::string contents; | 410 std::string contents; |
| 404 std::vector<std::string> lines; | 411 std::vector<std::string> lines; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 | 481 |
| 475 // If you ask for the references of a valid target, but that target has | 482 // If you ask for the references of a valid target, but that target has |
| 476 // nothing referencing it, we'll get here without having printed anything. | 483 // nothing referencing it, we'll get here without having printed anything. |
| 477 if (!quiet && cnt == 0) | 484 if (!quiet && cnt == 0) |
| 478 OutputString("Nothing references this.\n", DECORATION_YELLOW); | 485 OutputString("Nothing references this.\n", DECORATION_YELLOW); |
| 479 | 486 |
| 480 return 0; | 487 return 0; |
| 481 } | 488 } |
| 482 | 489 |
| 483 } // namespace commands | 490 } // namespace commands |
| OLD | NEW |