Apply arflags to dependent configs in GN.

Previously they were not copied from child configs so they wouldn't work in
all cases.

This also adds arflags support for "gn desc", and changes ldflags to no longer be printed for static libraries and source sets (since it doesn't apply, this is unnecessary and confusing).

Review URL: https://codereview.chromium.org/1919813003

Cr-Original-Commit-Position: refs/heads/master@{#389565}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 10b4460a4180b1cff25517c1e4cdae3b9e5c02cb
diff --git a/tools/gn/command_desc.cc b/tools/gn/command_desc.cc
index 15efe77..021232c 100644
--- a/tools/gn/command_desc.cc
+++ b/tools/gn/command_desc.cc
@@ -524,6 +524,7 @@
     "  outputs\n"
     "      Outputs for script and copy target types.\n"
     "\n"
+    "  arflags       [--blame]\n"
     "  defines       [--blame]\n"
     "  include_dirs  [--blame]\n"
     "  cflags        [--blame]\n"
@@ -662,9 +663,11 @@
       PrintLibs(target, false);
     } else if (what == "runtime_deps") {
       PrintRuntimeDeps(target);
+//  }  Hidden closing brace in macro below.
 
     CONFIG_VALUE_HANDLER(defines, std::string)
     CONFIG_VALUE_HANDLER(include_dirs, SourceDir)
+    CONFIG_VALUE_HANDLER(arflags, std::string)
     CONFIG_VALUE_HANDLER(asmflags, std::string)
     CONFIG_VALUE_HANDLER(cflags, std::string)
     CONFIG_VALUE_HANDLER(cflags_c, std::string)
@@ -733,7 +736,11 @@
     OUTPUT_CONFIG_VALUE(cflags_cc, std::string)
     OUTPUT_CONFIG_VALUE(cflags_objc, std::string)
     OUTPUT_CONFIG_VALUE(cflags_objcc, std::string)
-    OUTPUT_CONFIG_VALUE(ldflags, std::string)
+
+    if (target->output_type() == Target::STATIC_LIBRARY)
+      OUTPUT_CONFIG_VALUE(arflags, std::string)
+    else if (target->output_type() != Target::SOURCE_SET)
+      OUTPUT_CONFIG_VALUE(ldflags, std::string)
   }
 
   if (target->output_type() == Target::ACTION ||
diff --git a/tools/gn/config_values.cc b/tools/gn/config_values.cc
index 73486cd..cfcb9e4 100644
--- a/tools/gn/config_values.cc
+++ b/tools/gn/config_values.cc
@@ -24,6 +24,7 @@
 
 void ConfigValues::AppendValues(const ConfigValues& append) {
   VectorAppend(&asmflags_,     append.asmflags_);
+  VectorAppend(&arflags_,      append.arflags_);
   VectorAppend(&cflags_,       append.cflags_);
   VectorAppend(&cflags_c_,     append.cflags_c_);
   VectorAppend(&cflags_cc_,    append.cflags_cc_);
diff --git a/tools/gn/config_values.h b/tools/gn/config_values.h
index b6f153b..b24ae21 100644
--- a/tools/gn/config_values.h
+++ b/tools/gn/config_values.h
@@ -30,6 +30,9 @@
     const std::vector<SourceDir>& name() const { return name##_; } \
     std::vector<SourceDir>& name() { return name##_; }
 
+  // ==================================================================
+  // IMPORTANT: If you add a new one, be sure to update AppendValues().
+  // ==================================================================
   STRING_VALUES_ACCESSOR(arflags)
   STRING_VALUES_ACCESSOR(asmflags)
   STRING_VALUES_ACCESSOR(cflags)
@@ -41,7 +44,9 @@
   DIR_VALUES_ACCESSOR   (include_dirs)
   STRING_VALUES_ACCESSOR(ldflags)
   DIR_VALUES_ACCESSOR   (lib_dirs)
-  // If you add a new one, be sure to update AppendValues().
+  // ==================================================================
+  // IMPORTANT: If you add a new one, be sure to update AppendValues().
+  // ==================================================================
 
 #undef STRING_VALUES_ACCESSOR
 #undef DIR_VALUES_ACCESSOR