tools/gn: Remove code for forward_dependent_configs_from variable.

This patch removes the supporting code for this variable, which is
deprecated. Before that all the projects using this variable were
updated and its usage were either updated to 'public_deps' or removed.

BUG=None
R=brettw@chromium.org

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

Cr-Original-Commit-Position: refs/heads/master@{#353144}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: b445e7ccd70f09e53a6c93dee8a269d6bf7ee6f0
diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index ca11e88..5548d2b 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -416,7 +416,6 @@
         !ResolveConfigs(&target->configs(), err) ||
         !ResolveConfigs(&target->all_dependent_configs(), err) ||
         !ResolveConfigs(&target->public_configs(), err) ||
-        !ResolveForwardDependentConfigs(target, err) ||
         !ResolveToolchain(target, err))
       return false;
   } else if (record->type() == BuilderRecord::ITEM_CONFIG) {
@@ -477,37 +476,6 @@
   return true;
 }
 
-// "Forward dependent configs" should refer to targets in the deps that should
-// have their configs forwarded.
-bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) {
-  const UniqueVector<LabelTargetPair>& configs =
-      target->forward_dependent_configs();
-
-  // Assume that the lists are small so that brute-force n^2 is appropriate.
-  for (const auto& config : configs) {
-    for (const auto& dep_pair : target->GetDeps(Target::DEPS_LINKED)) {
-      if (config.label == dep_pair.label) {
-        DCHECK(dep_pair.ptr);  // Should already be resolved.
-        // UniqueVector's contents are constant so uniqueness is preserved, but
-        // we want to update this pointer which doesn't change uniqueness
-        // (uniqueness in this vector is determined by the label only).
-        const_cast<LabelTargetPair&>(config).ptr = dep_pair.ptr;
-        break;
-      }
-    }
-    if (!config.ptr) {
-      *err = Err(target->defined_from(),
-          "Target in forward_dependent_configs_from was not listed in the deps",
-          "This target has a forward_dependent_configs_from entry that was "
-          "not present in\nthe deps. A target can only forward things it "
-          "depends on. It was forwarding:\n  " +
-          config.label.GetUserVisibleName(false));
-      return false;
-    }
-  }
-  return true;
-}
-
 bool Builder::ResolveToolchain(Target* target, Err* err) {
   BuilderRecord* record = GetResolvedRecordOfType(
       target->settings()->toolchain_label(), target->defined_from(),
diff --git a/tools/gn/builder.h b/tools/gn/builder.h
index 7f9e59b..3a22266 100644
--- a/tools/gn/builder.h
+++ b/tools/gn/builder.h
@@ -118,7 +118,6 @@
   // if anything isn't found or if the type doesn't match.
   bool ResolveDeps(LabelTargetVector* deps, Err* err);
   bool ResolveConfigs(UniqueVector<LabelConfigPair>* configs, Err* err);
-  bool ResolveForwardDependentConfigs(Target* target, Err* err);
   bool ResolveToolchain(Target* target, Err* err);
 
   // Given a list of unresolved records, tries to find any circular
diff --git a/tools/gn/command_desc.cc b/tools/gn/command_desc.cc
index 01422c5..3f2bbaf 100644
--- a/tools/gn/command_desc.cc
+++ b/tools/gn/command_desc.cc
@@ -153,25 +153,6 @@
   }
 }
 
-void PrintForwardDependentConfigsFrom(const Target* target,
-                                      bool display_header) {
-  if (target->forward_dependent_configs().empty())
-    return;
-
-  if (display_header)
-    OutputString("\nforward_dependent_configs_from:\n");
-
-  // Collect the sorted list of deps.
-  std::vector<Label> forward;
-  for (const auto& pair : target->forward_dependent_configs())
-    forward.push_back(pair.label);
-  std::sort(forward.begin(), forward.end());
-
-  Label toolchain_label = target->label().GetToolchainLabel();
-  for (const auto& fwd : forward)
-    OutputString("  " + fwd.GetUserVisibleName(toolchain_label) + "\n");
-}
-
 // libs and lib_dirs are special in that they're inherited. We don't currently
 // implement a blame feature for this since the bottom-up inheritance makes
 // this difficult.
@@ -527,10 +508,6 @@
     "      Shows the labels of configs applied to targets that depend on this\n"
     "      one (either directly or all of them).\n"
     "\n"
-    "  forward_dependent_configs_from\n"
-    "      Shows the labels of dependencies for which dependent configs will\n"
-    "      be pushed to targets depending on the current one.\n"
-    "\n"
     "  script\n"
     "  args\n"
     "  depfile\n"
@@ -647,8 +624,6 @@
       PrintPublicConfigs(target, false);
     } else if (what == variables::kAllDependentConfigs) {
       PrintAllDependentConfigs(target, false);
-    } else if (what == variables::kForwardDependentConfigsFrom) {
-      PrintForwardDependentConfigsFrom(target, false);
     } else if (what == variables::kSources) {
       PrintSources(target, false);
     } else if (what == variables::kPublic) {
@@ -736,7 +711,6 @@
 
   PrintPublicConfigs(target, true);
   PrintAllDependentConfigs(target, true);
-  PrintForwardDependentConfigsFrom(target, true);
 
   PrintInputs(target, true);
 
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md
index c837037..657796a 100644
--- a/tools/gn/docs/reference.md
+++ b/tools/gn/docs/reference.md
@@ -378,10 +378,6 @@
       Shows the labels of configs applied to targets that depend on this
       one (either directly or all of them).
 
-  forward_dependent_configs_from
-      Shows the labels of dependencies for which dependent configs will
-      be pushed to targets depending on the current one.
-
   script
   args
   depfile
@@ -1036,8 +1032,7 @@
 
 ### **Variables on a target used to apply configs**:
 ```
-  all_dependent_configs, configs, public_configs,
-  forward_dependent_configs_from
+  all_dependent_configs, configs, public_configs
 
 ```
 
@@ -1230,7 +1225,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -1587,16 +1582,14 @@
   specify configs that apply to their dependents.
 
   Depending on a group is exactly like depending directly on that
-  group's deps. Direct dependent configs will get automatically
-  forwarded through the group so you shouldn't need to use
-  "forward_dependent_configs_from.
+  group's deps.
 
 ```
 
 ### **Variables**
 
 ```
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
 
 ```
@@ -2005,7 +1998,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -2046,7 +2039,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -2070,7 +2063,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -3725,56 +3718,6 @@
 
 
 ```
-## **forward_dependent_configs_from**
-
-```
-  A list of target labels.
-
-  DEPRECATED. Use public_deps instead which will have the same effect.
-
-  Exposes the public_configs from a private dependent target as
-  public_configs of the current one. Each label in this list
-  must also be in the deps.
-
-  Generally you should use public_deps instead of this variable to
-  express the concept of exposing a dependency as part of a target's
-  public API. We're considering removing this variable.
-
-```
-
-### **Discussion**
-
-```
-  Sometimes you depend on a child library that exports some necessary
-  configuration via public_configs. If your target in turn exposes the
-  child library's headers in its public headers, it might mean that
-  targets that depend on you won't work: they'll be seeing the child
-  library's code but not the necessary configuration. This list
-  specifies which of your deps' direct dependent configs to expose as
-  your own.
-
-```
-
-### **Examples**
-
-```
-  If we use a given library "a" from our public headers:
-
-    deps = [ ":a", ":b", ... ]
-    forward_dependent_configs_from = [ ":a" ]
-
-  This example makes a "transparent" target that forwards a dependency
-  to another:
-
-    group("frob") {
-      if (use_system_frob) {
-        deps = ":system_frob"
-      } else {
-        deps = "//third_party/fallback_frob"
-      }
-      forward_dependent_configs_from = deps
-    }
-
 
 ```
 ## **include_dirs**: Additional include directories.
diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 01d0aeb..9413a7f 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -265,8 +265,7 @@
     CONFIG_VALUES_VARS_HELP
     "\n"
     "Variables on a target used to apply configs:\n"
-    "  all_dependent_configs, configs, public_configs,\n"
-    "  forward_dependent_configs_from\n"
+    "  all_dependent_configs, configs, public_configs\n"
     "\n"
     "Example:\n"
     "  config(\"myconfig\") {\n"
diff --git a/tools/gn/functions_target.cc b/tools/gn/functions_target.cc
index ffe8f5f..fbac2d2 100644
--- a/tools/gn/functions_target.cc
+++ b/tools/gn/functions_target.cc
@@ -16,7 +16,7 @@
 #define DEPENDENT_CONFIG_VARS \
     "  Dependent configs: all_dependent_configs, public_configs\n"
 #define DEPS_VARS \
-    "  Deps: data_deps, deps, forward_dependent_configs_from, public_deps\n"
+    "  Deps: data_deps, deps, public_deps\n"
 #define GENERAL_TARGET_VARS \
     "  General: check_includes, configs, data, inputs, output_name,\n" \
     "           output_extension, public, sources, testonly, visibility\n"
@@ -330,9 +330,7 @@
     "  specify configs that apply to their dependents.\n"
     "\n"
     "  Depending on a group is exactly like depending directly on that\n"
-    "  group's deps. Direct dependent configs will get automatically\n"
-    "  forwarded through the group so you shouldn't need to use\n"
-    "  \"forward_dependent_configs_from.\n"
+    "  group's deps. \n"
     "\n"
     "Variables\n"
     "\n"
diff --git a/tools/gn/misc/emacs/gn-mode.el b/tools/gn/misc/emacs/gn-mode.el
index d867567..e61dec5 100644
--- a/tools/gn/misc/emacs/gn-mode.el
+++ b/tools/gn/misc/emacs/gn-mode.el
@@ -73,10 +73,9 @@
   '("all_dependent_configs" "allow_circular_includes_from" "args" "asmflags"
     "cflags" "cflags_c" "cflags_cc" "cflags_objc" "cflags_objcc"
     "check_includes" "complete_static_lib" "configs" "data" "data_deps"
-    "defines" "depfile" "deps" "forward_dependent_configs_from" "include_dirs"
-    "inputs" "ldflags" "lib_dirs" "libs" "output_extension" "output_name"
-    "outputs" "public" "public_configs" "public_deps" "script" "sources"
-    "testonly" "visibility"))
+    "defines" "depfile" "deps" "include_dirs" "inputs" "ldflags" "lib_dirs"
+    "libs" "output_extension" "output_name" "outputs" "public" "public_configs"
+    "public_deps" "script" "sources" "testonly" "visibility"))
 
 (defconst gn-font-lock-keywords
   `((,(regexp-opt gn-font-lock-target-declaration-keywords 'words) .
diff --git a/tools/gn/misc/tm/GN.tmLanguage b/tools/gn/misc/tm/GN.tmLanguage
index 44cb611..5f39f01 100644
--- a/tools/gn/misc/tm/GN.tmLanguage
+++ b/tools/gn/misc/tm/GN.tmLanguage
@@ -89,7 +89,7 @@
       <key>comment</key>
       <string>target variables</string>
       <key>match</key>
-      <string>\b(?:all_dependent_configs|allow_circular_includes_from|args|asmflags|cflags|cflags_c|cflags_cc|cflags_objc|cflags_objcc|check_includes|complete_static_lib|configs|data|data_deps|defines|depfile|deps|forward_dependent_configs_from|include_dirs|inputs|ldflags|lib_dirs|libs|output_extension|output_name|outputs|public|public_configs|public_deps|script|sources|testonly|visibility)\b</string>
+      <string>\b(?:all_dependent_configs|allow_circular_includes_from|args|asmflags|cflags|cflags_c|cflags_cc|cflags_objc|cflags_objcc|check_includes|complete_static_lib|configs|data|data_deps|defines|depfile|deps|include_dirs|inputs|ldflags|lib_dirs|libs|output_extension|output_name|outputs|public|public_configs|public_deps|script|sources|testonly|visibility)\b</string>
       <key>name</key>
       <string>entity.other.attribute-name.gn</string>
     </dict>
diff --git a/tools/gn/misc/vim/syntax/gn.vim b/tools/gn/misc/vim/syntax/gn.vim
index d9757e3..b7cef23 100644
--- a/tools/gn/misc/vim/syntax/gn.vim
+++ b/tools/gn/misc/vim/syntax/gn.vim
@@ -44,10 +44,10 @@
 syn keyword     gnVariable args asmflags cflags cflags_c cflags_cc cflags_objc
 syn keyword     gnVariable cflags_objcc check_includes complete_static_lib
 syn keyword     gnVariable configs data data_deps defines depfile deps
-syn keyword     gnVariable forward_dependent_configs_from include_dirs inputs
-syn keyword     gnVariable ldflags lib_dirs libs output_extension output_name
-syn keyword     gnVariable outputs public public_configs public_deps script
-syn keyword     gnVariable sources testonly visibility
+syn keyword     gnVariable include_dirs inputs ldflags lib_dirs libs
+syn keyword     gnVariable output_extension output_name outputs public
+syn keyword     gnVariable public_configs public_deps scripte sources testonly
+syn keyword     gnVariable visibility
 hi def link     gnVariable          Keyword
 
 " Strings
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index 585c850..a27a5c4 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -168,7 +168,7 @@
   }
 
   PullDependentTargets();
-  PullForwardedDependentConfigs();
+  PullPublicConfigs();
   PullRecursiveHardDeps();
   if (!ResolvePrecompiledHeaders(err))
     return false;
@@ -305,30 +305,13 @@
     PullDependentTarget(dep.ptr, false);
 }
 
-void Target::PullForwardedDependentConfigs() {
+void Target::PullPublicConfigs() {
   // Pull public configs from each of our dependency's public deps.
   for (const auto& dep : public_deps_)
-    PullForwardedDependentConfigsFrom(dep.ptr);
-
-  // Forward public configs if explicitly requested.
-  for (const auto& dep : forward_dependent_configs_) {
-    const Target* from_target = dep.ptr;
-
-    // The forward_dependent_configs_ must be in the deps (public or private)
-    // already, so we don't need to bother copying to our configs, only
-    // forwarding.
-    DCHECK(std::find_if(private_deps_.begin(), private_deps_.end(),
-                        LabelPtrPtrEquals<Target>(from_target)) !=
-               private_deps_.end() ||
-           std::find_if(public_deps_.begin(), public_deps_.end(),
-                        LabelPtrPtrEquals<Target>(from_target)) !=
-               public_deps_.end());
-
-    PullForwardedDependentConfigsFrom(from_target);
-  }
+    PullPublicConfigsFrom(dep.ptr);
 }
 
-void Target::PullForwardedDependentConfigsFrom(const Target* from) {
+void Target::PullPublicConfigsFrom(const Target* from) {
   public_configs_.Append(from->public_configs().begin(),
                          from->public_configs().end());
 }
diff --git a/tools/gn/target.h b/tools/gn/target.h
index a983241..fc752ac 100644
--- a/tools/gn/target.h
+++ b/tools/gn/target.h
@@ -174,15 +174,6 @@
     return public_configs_;
   }
 
-  // A list of a subset of deps where we'll re-export public_configs as
-  // public_configs of this target.
-  const UniqueVector<LabelTargetPair>& forward_dependent_configs() const {
-    return forward_dependent_configs_;
-  }
-  UniqueVector<LabelTargetPair>& forward_dependent_configs() {
-    return forward_dependent_configs_;
-  }
-
   // Dependencies that can include files from this target.
   const std::set<Label>& allow_circular_includes_from() const {
     return allow_circular_includes_from_;
@@ -260,8 +251,8 @@
 
   // These each pull specific things from dependencies to this one when all
   // deps have been resolved.
-  void PullForwardedDependentConfigs();
-  void PullForwardedDependentConfigsFrom(const Target* from);
+  void PullPublicConfigs();
+  void PullPublicConfigsFrom(const Target* from);
   void PullRecursiveHardDeps();
 
   // Fills the link and dependency output files when a target is resolved.
@@ -298,7 +289,6 @@
   UniqueVector<LabelConfigPair> configs_;
   UniqueVector<LabelConfigPair> all_dependent_configs_;
   UniqueVector<LabelConfigPair> public_configs_;
-  UniqueVector<LabelTargetPair> forward_dependent_configs_;
 
   std::set<Label> allow_circular_includes_from_;
 
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index 833b382..366210c 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -247,10 +247,6 @@
       return false;
   }
 
-  // This is a list of dependent targets to have their configs fowarded, so
-  // it goes here rather than in FillConfigs.
-  if (!FillForwardDependentConfigs())
-    return false;
   return true;
 }
 
@@ -359,14 +355,3 @@
   }
   return !err_->has_error();
 }
-
-bool TargetGenerator::FillForwardDependentConfigs() {
-  const Value* value = scope_->GetValue(
-      variables::kForwardDependentConfigsFrom, true);
-  if (value) {
-    ExtractListOfUniqueLabels(*value, scope_->GetSourceDir(),
-                              ToolchainLabelForScope(scope_),
-                              &target_->forward_dependent_configs(), err_);
-  }
-  return !err_->has_error();
-}
diff --git a/tools/gn/target_generator.h b/tools/gn/target_generator.h
index 83e3af1..1fd055b 100644
--- a/tools/gn/target_generator.h
+++ b/tools/gn/target_generator.h
@@ -77,8 +77,6 @@
                           UniqueVector<LabelConfigPair>* dest);
   bool FillGenericDeps(const char* var_name, LabelTargetVector* dest);
 
-  bool FillForwardDependentConfigs();
-
   DISALLOW_COPY_AND_ASSIGN(TargetGenerator);
 };
 
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc
index 1eeac25..f4acaca 100644
--- a/tools/gn/target_unittest.cc
+++ b/tools/gn/target_unittest.cc
@@ -75,8 +75,7 @@
   EXPECT_EQ(0u, exec.all_lib_dirs().size());
 }
 
-// Test all_dependent_configs, public_config inheritance, and
-// forward_dependent_configs_from
+// Test all_dependent_configs and public_config inheritance.
 TEST(Target, DependentConfigs) {
   TestWithScope setup;
   Err err;
@@ -124,15 +123,13 @@
   TestTarget b_fwd(setup, "//foo:b_fwd", Target::STATIC_LIBRARY);
   a_fwd.private_deps().push_back(LabelTargetPair(&b_fwd));
   b_fwd.private_deps().push_back(LabelTargetPair(&c));
-  b_fwd.forward_dependent_configs().push_back(LabelTargetPair(&c));
 
   ASSERT_TRUE(b_fwd.OnResolved(&err));
   ASSERT_TRUE(a_fwd.OnResolved(&err));
 
   // A_fwd should now have both configs.
-  ASSERT_EQ(2u, a_fwd.configs().size());
+  ASSERT_EQ(1u, a_fwd.configs().size());
   EXPECT_EQ(&all, a_fwd.configs()[0].ptr);
-  EXPECT_EQ(&direct, a_fwd.configs()[1].ptr);
   ASSERT_EQ(1u, a_fwd.all_dependent_configs().size());
   EXPECT_EQ(&all, a_fwd.all_dependent_configs()[0].ptr);
 }
@@ -387,15 +384,7 @@
   // This target has a private dependency on dest for forwards configs.
   TestTarget forward(setup, "//a:f", Target::SOURCE_SET);
   forward.private_deps().push_back(LabelTargetPair(&dest));
-  forward.forward_dependent_configs().push_back(LabelTargetPair(&dest));
   ASSERT_TRUE(forward.OnResolved(&err));
-
-  // Depending on the forward target should apply the config.
-  TestTarget dep_on_forward(setup, "//a:dof", Target::SOURCE_SET);
-  dep_on_forward.private_deps().push_back(LabelTargetPair(&forward));
-  ASSERT_TRUE(dep_on_forward.OnResolved(&err));
-  ASSERT_EQ(1u, dep_on_forward.configs().size());
-  EXPECT_EQ(&pub_config, dep_on_forward.configs()[0].ptr);
 }
 
 // Tests that different link/depend outputs work for solink tools.
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 6f9c848..d4e978d 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -731,54 +731,6 @@
     "\n"
     "  See also \"public_deps\" and \"data_deps\".\n";
 
-// TODO(brettw) remove this, deprecated.
-const char kForwardDependentConfigsFrom[] = "forward_dependent_configs_from";
-const char kForwardDependentConfigsFrom_HelpShort[] =
-    "forward_dependent_configs_from: [label list] DEPRECATED.";
-const char kForwardDependentConfigsFrom_Help[] =
-    "forward_dependent_configs_from\n"
-    "\n"
-    "  A list of target labels.\n"
-    "\n"
-    "  DEPRECATED. Use public_deps instead which will have the same effect.\n"
-    "\n"
-    "  Exposes the public_configs from a private dependent target as\n"
-    "  public_configs of the current one. Each label in this list\n"
-    "  must also be in the deps.\n"
-    "\n"
-    "  Generally you should use public_deps instead of this variable to\n"
-    "  express the concept of exposing a dependency as part of a target's\n"
-    "  public API. We're considering removing this variable.\n"
-    "\n"
-    "Discussion\n"
-    "\n"
-    "  Sometimes you depend on a child library that exports some necessary\n"
-    "  configuration via public_configs. If your target in turn exposes the\n"
-    "  child library's headers in its public headers, it might mean that\n"
-    "  targets that depend on you won't work: they'll be seeing the child\n"
-    "  library's code but not the necessary configuration. This list\n"
-    "  specifies which of your deps' direct dependent configs to expose as\n"
-    "  your own.\n"
-    "\n"
-    "Examples\n"
-    "\n"
-    "  If we use a given library \"a\" from our public headers:\n"
-    "\n"
-    "    deps = [ \":a\", \":b\", ... ]\n"
-    "    forward_dependent_configs_from = [ \":a\" ]\n"
-    "\n"
-    "  This example makes a \"transparent\" target that forwards a dependency\n"
-    "  to another:\n"
-    "\n"
-    "    group(\"frob\") {\n"
-    "      if (use_system_frob) {\n"
-    "        deps = \":system_frob\"\n"
-    "      } else {\n"
-    "        deps = \"//third_party/fallback_frob\"\n"
-    "      }\n"
-    "      forward_dependent_configs_from = deps\n"
-    "    }\n";
-
 const char kIncludeDirs[] = "include_dirs";
 const char kIncludeDirs_HelpShort[] =
     "include_dirs: [directory list] Additional include directories.";
@@ -1393,7 +1345,6 @@
     INSERT_VARIABLE(Defines)
     INSERT_VARIABLE(Depfile)
     INSERT_VARIABLE(Deps)
-    INSERT_VARIABLE(ForwardDependentConfigsFrom)
     INSERT_VARIABLE(IncludeDirs)
     INSERT_VARIABLE(Inputs)
     INSERT_VARIABLE(Ldflags)
diff --git a/tools/gn/variables.h b/tools/gn/variables.h
index a08270c..074f731 100644
--- a/tools/gn/variables.h
+++ b/tools/gn/variables.h
@@ -143,10 +143,6 @@
 extern const char kDeps_HelpShort[];
 extern const char kDeps_Help[];
 
-extern const char kForwardDependentConfigsFrom[];
-extern const char kForwardDependentConfigsFrom_HelpShort[];
-extern const char kForwardDependentConfigsFrom_Help[];
-
 extern const char kIncludeDirs[];
 extern const char kIncludeDirs_HelpShort[];
 extern const char kIncludeDirs_Help[];