| Index: tools/gn/command_desc.cc
|
| diff --git a/tools/gn/command_desc.cc b/tools/gn/command_desc.cc
|
| index 4fea269b5814ff39dcf7550267d0203e08bfdd7a..f4e97bfae73ea08b6fe78209b60c0fff9c4d1ad6 100644
|
| --- a/tools/gn/command_desc.cc
|
| +++ b/tools/gn/command_desc.cc
|
| @@ -69,6 +69,17 @@ void RecursivePrintDeps(const Target* target,
|
|
|
| std::string indent(indent_level * 2, ' ');
|
| for (size_t i = 0; i < sorted_deps.size(); i++) {
|
| + // Don't print groups. Groups are flattened such that the deps of the
|
| + // group are added directly to the target that depended on the group.
|
| + // Printing and recursing into groups here will cause such targets to be
|
| + // duplicated.
|
| + //
|
| + // It would be much more intuitive to do the opposite and not display the
|
| + // deps that were copied from the group to the target and instead display
|
| + // the group, but the source of those dependencies is not tracked.
|
| + if (sorted_deps[i].ptr->output_type() == Target::GROUP)
|
| + continue;
|
| +
|
| OutputString(indent +
|
| sorted_deps[i].label.GetUserVisibleName(default_toolchain) + "\n");
|
| RecursivePrintDeps(sorted_deps[i].ptr, default_toolchain, indent_level + 1);
|
| @@ -145,6 +156,28 @@ void PrintLibs(const Target* target, bool display_header) {
|
| OutputString(" " + libs[i] + "\n");
|
| }
|
|
|
| +void PrintPublic(const Target* target, bool display_header) {
|
| + if (display_header)
|
| + OutputString("\npublic\n");
|
| +
|
| + if (target->all_headers_public()) {
|
| + OutputString(" [All headers listed in the sources are public.]\n");
|
| + return;
|
| + }
|
| +
|
| + Target::FileList public_headers = target->public_headers();
|
| + std::sort(public_headers.begin(), public_headers.end());
|
| + for (size_t i = 0; i < public_headers.size(); i++)
|
| + OutputString(" " + public_headers[i].value() + "\n");
|
| +}
|
| +
|
| +void PrintVisibility(const Target* target, bool display_header) {
|
| + if (display_header)
|
| + OutputString("\nvisibility\n");
|
| +
|
| + OutputString(target->visibility().Describe(2, false));
|
| +}
|
| +
|
| void PrintConfigs(const Target* target, bool display_header) {
|
| // Configs (don't sort since the order determines how things are processed).
|
| if (display_header)
|
| @@ -247,6 +280,12 @@ const char kDesc_Help[] =
|
| " sources\n"
|
| " Source files.\n"
|
| "\n"
|
| + " public\n"
|
| + " Public header files.\n"
|
| + "\n"
|
| + " visibility\n"
|
| + " Prints which targets can depend on this one.\n"
|
| + "\n"
|
| " configs\n"
|
| " Shows configs applied to the given target, sorted in the order\n"
|
| " they're specified. This includes both configs specified in the\n"
|
| @@ -320,6 +359,10 @@ int RunDesc(const std::vector<std::string>& args) {
|
| PrintConfigs(target, false);
|
| } else if (what == "sources") {
|
| PrintSources(target, false);
|
| + } else if (what == "public") {
|
| + PrintPublic(target, false);
|
| + } else if (what == "visibility") {
|
| + PrintVisibility(target, false);
|
| } else if (what == "deps") {
|
| PrintDeps(target, false);
|
| } else if (what == "lib_dirs") {
|
| @@ -362,6 +405,8 @@ int RunDesc(const std::vector<std::string>& args) {
|
| OutputString(target_toolchain.GetUserVisibleName(false) + "\n");
|
|
|
| PrintSources(target, true);
|
| + PrintPublic(target, true);
|
| + PrintVisibility(target, true);
|
| PrintConfigs(target, true);
|
|
|
| OUTPUT_CONFIG_VALUE(defines, std::string)
|
|
|