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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 FilterAndPrintTargetSet(false, results); | 278 FilterAndPrintTargetSet(false, results); |
279 return results.size(); | 279 return results.size(); |
280 } | 280 } |
281 | 281 |
282 } // namespace | 282 } // namespace |
283 | 283 |
284 const char kRefs[] = "refs"; | 284 const char kRefs[] = "refs"; |
285 const char kRefs_HelpShort[] = | 285 const char kRefs_HelpShort[] = |
286 "refs: Find stuff referencing a target or file."; | 286 "refs: Find stuff referencing a target or file."; |
287 const char kRefs_Help[] = | 287 const char kRefs_Help[] = |
288 "gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)* " | 288 R"(gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)* [--a
ll] |
289 "[--all]\n" | 289 [--all-toolchains] [--as=...] [--testonly=...] [--type=...] |
290 " [--all-toolchains] [--as=...] [--testonly=...] [--type=...]\n" | 290 |
291 "\n" | 291 Finds reverse dependencies (which targets reference something). The input is |
292 " Finds reverse dependencies (which targets reference something). The\n" | 292 a list containing: |
293 " input is a list containing:\n" | 293 |
294 "\n" | 294 - Target label: The result will be which targets depend on it. |
295 " - Target label: The result will be which targets depend on it.\n" | 295 |
296 "\n" | 296 - Config label: The result will be which targets list the given config in |
297 " - Config label: The result will be which targets list the given\n" | 297 its "configs" or "public_configs" list. |
298 " config in its \"configs\" or \"public_configs\" list.\n" | 298 |
299 "\n" | 299 - Label pattern: The result will be which targets depend on any target |
300 " - Label pattern: The result will be which targets depend on any\n" | 300 matching the given pattern. Patterns will not match configs. These are not |
301 " target matching the given pattern. Patterns will not match\n" | 301 general regular expressions, see "gn help label_pattern" for details. |
302 " configs. These are not general regular expressions, see\n" | 302 |
303 " \"gn help label_pattern\" for details.\n" | 303 - File name: The result will be which targets list the given file in its |
304 "\n" | 304 "inputs", "sources", "public", "data", or "outputs". Any input that does |
305 " - File name: The result will be which targets list the given file in\n" | 305 not contain wildcards and does not match a target or a config will be |
306 " its \"inputs\", \"sources\", \"public\", \"data\", or \"outputs\".\n" | 306 treated as a file. |
307 " Any input that does not contain wildcards and does not match a\n" | 307 |
308 " target or a config will be treated as a file.\n" | 308 - Response file: If the input starts with an "@", it will be interpreted as |
309 "\n" | 309 a path to a file containing a list of labels or file names, one per line. |
310 " - Response file: If the input starts with an \"@\", it will be\n" | 310 This allows us to handle long lists of inputs without worrying about |
311 " interpreted as a path to a file containing a list of labels or\n" | 311 command line limits. |
312 " file names, one per line. This allows us to handle long lists\n" | 312 |
313 " of inputs without worrying about command line limits.\n" | 313 Options |
314 "\n" | 314 |
315 "Options\n" | 315 --all |
316 "\n" | 316 When used without --tree, will recurse and display all unique |
317 " --all\n" | 317 dependencies of the given targets. For example, if the input is a target, |
318 " When used without --tree, will recurse and display all unique\n" | 318 this will output all targets that depend directly or indirectly on the |
319 " dependencies of the given targets. For example, if the input is\n" | 319 input. If the input is a file, this will output all targets that depend |
320 " a target, this will output all targets that depend directly or\n" | 320 directly or indirectly on that file. |
321 " indirectly on the input. If the input is a file, this will output\n" | 321 |
322 " all targets that depend directly or indirectly on that file.\n" | 322 When used with --tree, turns off eliding to show a complete tree. |
323 "\n" | 323 )" |
324 " When used with --tree, turns off eliding to show a complete tree.\n" | 324 |
325 "\n" | 325 ALL_TOOLCHAINS_SWITCH_HELP |
326 ALL_TOOLCHAINS_SWITCH_HELP | 326 "\n" |
327 "\n" | 327 TARGET_PRINTING_MODE_COMMAND_LINE_HELP |
328 TARGET_PRINTING_MODE_COMMAND_LINE_HELP | 328 |
329 "\n" | 329 R"( |
330 " -q\n" | 330 -q |
331 " Quiet. If nothing matches, don't print any output. Without this\n" | 331 Quiet. If nothing matches, don't print any output. Without this option, if |
332 " option, if there are no matches there will be an informational\n" | 332 there are no matches there will be an informational message printed which |
333 " message printed which might interfere with scripts processing the\n" | 333 might interfere with scripts processing the output. |
334 " output.\n" | 334 )" |
335 "\n" | 335 |
336 TARGET_TESTONLY_FILTER_COMMAND_LINE_HELP | 336 TARGET_TESTONLY_FILTER_COMMAND_LINE_HELP |
337 "\n" | 337 |
338 " --tree\n" | 338 R"( |
339 " Outputs a reverse dependency tree from the given target.\n" | 339 --tree |
340 " Duplicates will be elided. Combine with --all to see a full\n" | 340 Outputs a reverse dependency tree from the given target. Duplicates will |
341 " dependency tree.\n" | 341 be elided. Combine with --all to see a full dependency tree. |
342 "\n" | 342 |
343 " Tree output can not be used with the filtering or output flags:\n" | 343 Tree output can not be used with the filtering or output flags: --as, |
344 " --as, --type, --testonly.\n" | 344 --type, --testonly. |
345 "\n" | 345 )" |
346 TARGET_TYPE_FILTER_COMMAND_LINE_HELP | 346 |
347 "\n" | 347 TARGET_TYPE_FILTER_COMMAND_LINE_HELP |
348 "Examples (target input)\n" | 348 |
349 "\n" | 349 R"( |
350 " gn refs out/Debug //tools/gn:gn\n" | 350 |
351 " Find all targets depending on the given exact target name.\n" | 351 Examples (target input) |
352 "\n" | 352 |
353 " gn refs out/Debug //base:i18n --as=buildfiles | xargs gvim\n" | 353 gn refs out/Debug //tools/gn:gn |
354 " Edit all .gn files containing references to //base:i18n\n" | 354 Find all targets depending on the given exact target name. |
355 "\n" | 355 |
356 " gn refs out/Debug //base --all\n" | 356 gn refs out/Debug //base:i18n --as=buildfiles | xargs gvim |
357 " List all targets depending directly or indirectly on //base:base.\n" | 357 Edit all .gn files containing references to //base:i18n |
358 "\n" | 358 |
359 " gn refs out/Debug \"//base/*\"\n" | 359 gn refs out/Debug //base --all |
360 " List all targets depending directly on any target in //base or\n" | 360 List all targets depending directly or indirectly on //base:base. |
361 " its subdirectories.\n" | 361 |
362 "\n" | 362 gn refs out/Debug "//base/*" |
363 " gn refs out/Debug \"//base:*\"\n" | 363 List all targets depending directly on any target in //base or |
364 " List all targets depending directly on any target in\n" | 364 its subdirectories. |
365 " //base/BUILD.gn.\n" | 365 |
366 "\n" | 366 gn refs out/Debug "//base:*" |
367 " gn refs out/Debug //base --tree\n" | 367 List all targets depending directly on any target in |
368 " Print a reverse dependency tree of //base:base\n" | 368 //base/BUILD.gn. |
369 "\n" | 369 |
370 "Examples (file input)\n" | 370 gn refs out/Debug //base --tree |
371 "\n" | 371 Print a reverse dependency tree of //base:base |
372 " gn refs out/Debug //base/macros.h\n" | 372 |
373 " Print target(s) listing //base/macros.h as a source.\n" | 373 Examples (file input) |
374 "\n" | 374 |
375 " gn refs out/Debug //base/macros.h --tree\n" | 375 gn refs out/Debug //base/macros.h |
376 " Display a reverse dependency tree to get to the given file. This\n" | 376 Print target(s) listing //base/macros.h as a source. |
377 " will show how dependencies will reference that file.\n" | 377 |
378 "\n" | 378 gn refs out/Debug //base/macros.h --tree |
379 " gn refs out/Debug //base/macros.h //base/at_exit.h --all\n" | 379 Display a reverse dependency tree to get to the given file. This |
380 " Display all unique targets with some dependency path to a target\n" | 380 will show how dependencies will reference that file. |
381 " containing either of the given files as a source.\n" | 381 |
382 "\n" | 382 gn refs out/Debug //base/macros.h //base/at_exit.h --all |
383 " gn refs out/Debug //base/macros.h --testonly=true --type=executable\n" | 383 Display all unique targets with some dependency path to a target |
384 " --all --as=output\n" | 384 containing either of the given files as a source. |
385 " Display the executable file names of all test executables\n" | 385 |
386 " potentially affected by a change to the given file.\n"; | 386 gn refs out/Debug //base/macros.h --testonly=true --type=executable |
| 387 --all --as=output |
| 388 Display the executable file names of all test executables |
| 389 potentially affected by a change to the given file.)"; |
387 | 390 |
388 int RunRefs(const std::vector<std::string>& args) { | 391 int RunRefs(const std::vector<std::string>& args) { |
389 if (args.size() <= 1) { | 392 if (args.size() <= 1) { |
390 Err(Location(), "You're holding it wrong.", | 393 Err(Location(), "You're holding it wrong.", |
391 "Usage: \"gn refs <out_dir> (<label_pattern>|<file>)*\"") | 394 "Usage: \"gn refs <out_dir> (<label_pattern>|<file>)*\"") |
392 .PrintToStdout(); | 395 .PrintToStdout(); |
393 return 1; | 396 return 1; |
394 } | 397 } |
395 | 398 |
396 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); | 399 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 | 484 |
482 // If you ask for the references of a valid target, but that target has | 485 // If you ask for the references of a valid target, but that target has |
483 // nothing referencing it, we'll get here without having printed anything. | 486 // nothing referencing it, we'll get here without having printed anything. |
484 if (!quiet && cnt == 0) | 487 if (!quiet && cnt == 0) |
485 OutputString("Nothing references this.\n", DECORATION_YELLOW); | 488 OutputString("Nothing references this.\n", DECORATION_YELLOW); |
486 | 489 |
487 return 0; | 490 return 0; |
488 } | 491 } |
489 | 492 |
490 } // namespace commands | 493 } // namespace commands |
OLD | NEW |