gn: Allow configs to specify and apply `inputs`.
Commonly used config options (cflags, ldflags, ...) can be used to add
arbitrary dependencies on files. For example, if
`-fprofile-sample-use=/tmp/foo` is added to cflags, we need to rebuild
all targets with this flag when /tmp/foo gets modified.
Allowing configs to add to `inputs` seems like the best way to handle
this.
Bug: 794750
Test: Ran gn_unittests; added an `input` on the
build/config/compiler:compiler config, and verified that it showed up
in ninja files/that lots of targets are rebuilt when the input was
touched; ran `gn desc` to manually verify that the input file showed up
on an arbitrary target.
Change-Id: Id1cf03d62589ce77296b2a26a07380e29774ed98
Reviewed-on: https://chromium-review.googlesource.com/827560
Commit-Queue: George Burgess <gbiv@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#528762}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 25e26d931f7c4237ab06051b1439a34e0af81326diff --git a/tools/gn/action_target_generator.cc b/tools/gn/action_target_generator.cc
index 82cb95f..ca3986e 100644
--- a/tools/gn/action_target_generator.cc
+++ b/tools/gn/action_target_generator.cc
@@ -206,3 +206,16 @@
}
return true;
}
+
+bool ActionTargetGenerator::FillInputs() {
+ const Value* value = scope_->GetValue(variables::kInputs, true);
+ if (!value)
+ return true;
+
+ Target::FileList dest_inputs;
+ if (!ExtractListOfRelativeFiles(scope_->settings()->build_settings(), *value,
+ scope_->GetSourceDir(), &dest_inputs, err_))
+ return false;
+ target_->config_values().inputs().swap(dest_inputs);
+ return true;
+}
diff --git a/tools/gn/action_target_generator.h b/tools/gn/action_target_generator.h
index 3833b81..0ea3cbb 100644
--- a/tools/gn/action_target_generator.h
+++ b/tools/gn/action_target_generator.h
@@ -28,6 +28,7 @@
bool FillResponseFileContents();
bool FillDepfile();
bool FillPool();
+ bool FillInputs();
// Checks for errors in the outputs variable.
bool CheckOutputs();
diff --git a/tools/gn/analyzer.cc b/tools/gn/analyzer.cc
index 36c8d49..c5158c5 100644
--- a/tools/gn/analyzer.cc
+++ b/tools/gn/analyzer.cc
@@ -16,6 +16,7 @@
#include "base/values.h"
#include "tools/gn/builder.h"
#include "tools/gn/config.h"
+#include "tools/gn/config_values_extractors.h"
#include "tools/gn/deps_iterator.h"
#include "tools/gn/err.h"
#include "tools/gn/filesystem_utils.h"
@@ -416,9 +417,11 @@
if (cur_file == *file)
return true;
}
- for (const auto& cur_file : target->inputs()) {
- if (cur_file == *file)
- return true;
+ for (ConfigValuesIterator iter(target); !iter.done(); iter.Next()) {
+ for (const auto& cur_file : iter.cur().inputs()) {
+ if (cur_file == *file)
+ return true;
+ }
}
for (const auto& cur_file : target->data()) {
if (cur_file == file->value())
diff --git a/tools/gn/analyzer_unittest.cc b/tools/gn/analyzer_unittest.cc
index 5c299d1..b8188d8 100644
--- a/tools/gn/analyzer_unittest.cc
+++ b/tools/gn/analyzer_unittest.cc
@@ -171,7 +171,26 @@
R"("test_targets":[])"
"}");
- t->inputs().push_back(SourceFile("//dir/extra_input.cc"));
+ SourceFile extra_input(SourceFile("//dir/extra_input.cc"));
+ t->config_values().inputs().push_back(extra_input);
+ RunAnalyzerTest(
+ R"({
+ "files": [ "//dir/extra_input.cc" ],
+ "additional_compile_targets": [ "all" ],
+ "test_targets": [ "//dir:target_name" ]
+ })",
+ "{"
+ R"("compile_targets":["all"],)"
+ R"/("status":"Found dependency",)/"
+ R"("test_targets":["//dir:target_name"])"
+ "}");
+
+ t->config_values().inputs().clear();
+ Config* c = MakeConfig("//dir", "config_name");
+ builder_.ItemDefined(std::unique_ptr<Item>(c));
+ c->own_values().inputs().push_back(extra_input);
+ t->configs().push_back(LabelConfigPair(c));
+
RunAnalyzerTest(
R"({
"files": [ "//dir/extra_input.cc" ],
diff --git a/tools/gn/binary_target_generator.cc b/tools/gn/binary_target_generator.cc
index b6c19fb..8659306 100644
--- a/tools/gn/binary_target_generator.cc
+++ b/tools/gn/binary_target_generator.cc
@@ -50,9 +50,6 @@
if (!FillCheckIncludes())
return;
- if (!FillInputs())
- return;
-
if (!FillConfigs())
return;
diff --git a/tools/gn/command_desc.cc b/tools/gn/command_desc.cc
index 76ba21c..9a9b243 100644
--- a/tools/gn/command_desc.cc
+++ b/tools/gn/command_desc.cc
@@ -272,6 +272,7 @@
HANDLER(variables::kCflagsObjCC, DefaultHandler);
HANDLER(variables::kDefines, DefaultHandler);
HANDLER(variables::kIncludeDirs, DefaultHandler);
+ HANDLER(variables::kInputs, DefaultHandler);
HANDLER(variables::kLdflags, DefaultHandler);
HANDLER(variables::kLibs, DefaultHandler);
HANDLER(variables::kLibDirs, DefaultHandler);
diff --git a/tools/gn/command_refs.cc b/tools/gn/command_refs.cc
index 4d7ad7b..ee0a40f 100644
--- a/tools/gn/command_refs.cc
+++ b/tools/gn/command_refs.cc
@@ -12,6 +12,7 @@
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "tools/gn/commands.h"
+#include "tools/gn/config_values_extractors.h"
#include "tools/gn/deps_iterator.h"
#include "tools/gn/filesystem_utils.h"
#include "tools/gn/input_file.h"
@@ -137,9 +138,11 @@
if (cur_file == file)
return true;
}
- for (const auto& cur_file : target->inputs()) {
- if (cur_file == file)
- return true;
+ for (ConfigValuesIterator iter(target); !iter.done(); iter.Next()) {
+ for (const auto& cur_file : iter.cur().inputs()) {
+ if (cur_file == file)
+ return true;
+ }
}
for (const auto& cur_file : target->data()) {
if (cur_file == file.value())
diff --git a/tools/gn/config_values.cc b/tools/gn/config_values.cc
index eb330a2..b3e9f6f 100644
--- a/tools/gn/config_values.cc
+++ b/tools/gn/config_values.cc
@@ -30,6 +30,7 @@
VectorAppend(&cflags_objcc_, append.cflags_objcc_);
VectorAppend(&defines_, append.defines_);
VectorAppend(&include_dirs_, append.include_dirs_);
+ VectorAppend(&inputs_, append.inputs_);
VectorAppend(&ldflags_, append.ldflags_);
VectorAppend(&lib_dirs_, append.lib_dirs_);
VectorAppend(&libs_, append.libs_);
diff --git a/tools/gn/config_values.h b/tools/gn/config_values.h
index af97c2b..0099e81 100644
--- a/tools/gn/config_values.h
+++ b/tools/gn/config_values.h
@@ -53,6 +53,9 @@
#undef STRING_VALUES_ACCESSOR
#undef DIR_VALUES_ACCESSOR
+ const std::vector<SourceFile>& inputs() const { return inputs_; }
+ std::vector<SourceFile>& inputs() { return inputs_; }
+
const std::vector<LibFile>& libs() const { return libs_; }
std::vector<LibFile>& libs() { return libs_; }
@@ -82,6 +85,7 @@
std::vector<std::string> cflags_objcc_;
std::vector<std::string> defines_;
std::vector<SourceDir> include_dirs_;
+ std::vector<SourceFile> inputs_;
std::vector<std::string> ldflags_;
std::vector<SourceDir> lib_dirs_;
std::vector<LibFile> libs_;
diff --git a/tools/gn/config_values_generator.cc b/tools/gn/config_values_generator.cc
index aa42666..97888ac 100644
--- a/tools/gn/config_values_generator.cc
+++ b/tools/gn/config_values_generator.cc
@@ -81,6 +81,14 @@
#undef FILL_STRING_CONFIG_VALUE
#undef FILL_DIR_CONFIG_VALUE
+ // Inputs
+ const Value* inputs_value = scope_->GetValue(variables::kInputs, true);
+ if (inputs_value) {
+ ExtractListOfRelativeFiles(scope_->settings()->build_settings(),
+ *inputs_value, input_dir_,
+ &config_values_->inputs(), err_);
+ }
+
// Libs
const Value* libs_value = scope_->GetValue("libs", true);
if (libs_value) {
diff --git a/tools/gn/config_values_generator.h b/tools/gn/config_values_generator.h
index 7fd803c..165f41a 100644
--- a/tools/gn/config_values_generator.h
+++ b/tools/gn/config_values_generator.h
@@ -37,9 +37,9 @@
};
// For using in documentation for functions which use this.
-#define CONFIG_VALUES_VARS_HELP \
- " Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,\n" \
- " asmflags, defines, include_dirs, ldflags, lib_dirs, libs,\n" \
- " precompiled_header, precompiled_source\n"
+#define CONFIG_VALUES_VARS_HELP \
+ " Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,\n" \
+ " asmflags, defines, include_dirs, inputs, ldflags, lib_dirs,\n" \
+ " libs, precompiled_header, precompiled_source\n"
#endif // TOOLS_GN_CONFIG_VALUES_GENERATOR_H_
diff --git a/tools/gn/desc_builder.cc b/tools/gn/desc_builder.cc
index ba5291e..b2fd716 100644
--- a/tools/gn/desc_builder.cc
+++ b/tools/gn/desc_builder.cc
@@ -136,6 +136,8 @@
: ValuePtr(new base::Value(f.value()));
}
+ ValuePtr RenderValue(const SourceFile* f) { return RenderValue(*f); }
+
ValuePtr RenderValue(const LibFile& lib) {
if (lib.is_source_file())
return RenderValue(lib.source_file());
@@ -214,6 +216,7 @@
CONFIG_VALUE_ARRAY_HANDLER(cflags_objcc, std::string)
CONFIG_VALUE_ARRAY_HANDLER(defines, std::string)
CONFIG_VALUE_ARRAY_HANDLER(include_dirs, SourceDir)
+ CONFIG_VALUE_ARRAY_HANDLER(inputs, SourceFile)
CONFIG_VALUE_ARRAY_HANDLER(ldflags, std::string)
CONFIG_VALUE_ARRAY_HANDLER(lib_dirs, SourceDir)
CONFIG_VALUE_ARRAY_HANDLER(libs, LibFile)
@@ -315,9 +318,15 @@
RenderValue(target_->public_headers()));
}
- if (what(variables::kInputs) && !target_->inputs().empty())
- res->SetWithoutPathExpansion(variables::kInputs,
- RenderValue(target_->inputs()));
+ if (what(variables::kInputs)) {
+ std::vector<const SourceFile*> inputs;
+ for (ConfigValuesIterator iter(target_); !iter.done(); iter.Next()) {
+ for (const auto& input : iter.cur().inputs())
+ inputs.push_back(&input);
+ }
+ if (!inputs.empty())
+ res->SetWithoutPathExpansion(variables::kInputs, RenderValue(inputs));
+ }
if (is_binary_output && what(variables::kConfigs) &&
!target_->configs().empty()) {
@@ -393,6 +402,7 @@
CONFIG_VALUE_ARRAY_HANDLER(cflags_objcc, std::string)
CONFIG_VALUE_ARRAY_HANDLER(defines, std::string)
CONFIG_VALUE_ARRAY_HANDLER(include_dirs, SourceDir)
+ CONFIG_VALUE_ARRAY_HANDLER(inputs, SourceFile)
CONFIG_VALUE_ARRAY_HANDLER(ldflags, std::string)
#undef CONFIG_VALUE_ARRAY_HANDLER
diff --git a/tools/gn/ninja_action_target_writer_unittest.cc b/tools/gn/ninja_action_target_writer_unittest.cc
index e73f0ab..159c29c 100644
--- a/tools/gn/ninja_action_target_writer_unittest.cc
+++ b/tools/gn/ninja_action_target_writer_unittest.cc
@@ -45,7 +45,7 @@
target.set_output_type(Target::ACTION);
target.action_values().set_script(SourceFile("//foo/script.py"));
- target.inputs().push_back(SourceFile("//foo/included.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/included.txt"));
target.action_values().outputs() =
SubstitutionList::MakeForTest("//out/Debug/foo.out");
@@ -84,7 +84,7 @@
target.set_output_type(Target::ACTION);
target.action_values().set_script(SourceFile("//foo/script.py"));
- target.inputs().push_back(SourceFile("//foo/included.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/included.txt"));
target.action_values().outputs() =
SubstitutionList::MakeForTest("//out/Debug/foo.out");
@@ -132,7 +132,7 @@
target.action_values().set_script(SourceFile("//foo/script.py"));
target.sources().push_back(SourceFile("//foo/source.txt"));
- target.inputs().push_back(SourceFile("//foo/included.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/included.txt"));
target.action_values().outputs() =
SubstitutionList::MakeForTest("//out/Debug/foo.out");
@@ -198,7 +198,7 @@
target.action_values().outputs() = SubstitutionList::MakeForTest(
"//out/Debug/{{source_name_part}}.out");
- target.inputs().push_back(SourceFile("//foo/included.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/included.txt"));
target.SetToolchain(setup.toolchain());
ASSERT_TRUE(target.OnResolved(&err));
@@ -268,7 +268,7 @@
target.action_values().outputs() = SubstitutionList::MakeForTest(
"//out/Debug/{{source_name_part}}.out");
- target.inputs().push_back(SourceFile("//foo/included.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/included.txt"));
setup.build_settings()->set_python_path(base::FilePath(FILE_PATH_LITERAL(
"/usr/bin/python")));
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc
index 88ef860..14a630c 100644
--- a/tools/gn/ninja_binary_target_writer.cc
+++ b/tools/gn/ninja_binary_target_writer.cc
@@ -406,13 +406,20 @@
<< "Toolchain not set on target "
<< target_->label().GetUserVisibleName(true);
- if (target_->inputs().size() == 0)
+ std::vector<const SourceFile*> inputs;
+ for (ConfigValuesIterator iter(target_); !iter.done(); iter.Next()) {
+ for (const auto& input : iter.cur().inputs()) {
+ inputs.push_back(&input);
+ }
+ }
+
+ if (inputs.size() == 0)
return OutputFile(); // No inputs
// If we only have one input, return it directly instead of writing a stamp
// file for it.
- if (target_->inputs().size() == 1)
- return OutputFile(settings_->build_settings(), target_->inputs()[0]);
+ if (inputs.size() == 1)
+ return OutputFile(settings_->build_settings(), *inputs[0]);
// Make a stamp file.
OutputFile input_stamp_file =
@@ -427,9 +434,9 @@
<< Toolchain::ToolTypeToName(Toolchain::TYPE_STAMP);
// File inputs.
- for (const auto& input : target_->inputs()) {
+ for (const auto* input : inputs) {
out_ << " ";
- path_output_.WriteFile(out_, input);
+ path_output_.WriteFile(out_, *input);
}
out_ << "\n";
diff --git a/tools/gn/ninja_binary_target_writer_unittest.cc b/tools/gn/ninja_binary_target_writer_unittest.cc
index 71804ef..8700869 100644
--- a/tools/gn/ninja_binary_target_writer_unittest.cc
+++ b/tools/gn/ninja_binary_target_writer_unittest.cc
@@ -9,6 +9,7 @@
#include <utility>
#include "testing/gtest/include/gtest/gtest.h"
+#include "tools/gn/config.h"
#include "tools/gn/scheduler.h"
#include "tools/gn/target.h"
#include "tools/gn/test_with_scope.h"
@@ -852,7 +853,7 @@
target.visibility().SetPublic();
target.sources().push_back(SourceFile("//foo/input1.cc"));
target.sources().push_back(SourceFile("//foo/input2.cc"));
- target.inputs().push_back(SourceFile("//foo/input.data"));
+ target.config_values().inputs().push_back(SourceFile("//foo/input.data"));
target.SetToolchain(setup.toolchain());
ASSERT_TRUE(target.OnResolved(&err));
@@ -887,8 +888,8 @@
target.visibility().SetPublic();
target.sources().push_back(SourceFile("//foo/input1.cc"));
target.sources().push_back(SourceFile("//foo/input2.cc"));
- target.inputs().push_back(SourceFile("//foo/input1.data"));
- target.inputs().push_back(SourceFile("//foo/input2.data"));
+ target.config_values().inputs().push_back(SourceFile("//foo/input1.data"));
+ target.config_values().inputs().push_back(SourceFile("//foo/input2.data"));
target.SetToolchain(setup.toolchain());
ASSERT_TRUE(target.OnResolved(&err));
@@ -917,4 +918,52 @@
EXPECT_EQ(expected, out.str());
}
+
+ // This target has one input itself, one from an immediate config, and one
+ // from a config tacked on to said config.
+ {
+ Config far_config(setup.settings(), Label(SourceDir("//foo/"), "qux"));
+ far_config.own_values().inputs().push_back(SourceFile("//foo/input3.data"));
+ ASSERT_TRUE(far_config.OnResolved(&err));
+
+ Config config(setup.settings(), Label(SourceDir("//foo/"), "baz"));
+ config.own_values().inputs().push_back(SourceFile("//foo/input2.data"));
+ config.configs().push_back(LabelConfigPair(&far_config));
+ ASSERT_TRUE(config.OnResolved(&err));
+
+ Target target(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+ target.set_output_type(Target::SOURCE_SET);
+ target.visibility().SetPublic();
+ target.sources().push_back(SourceFile("//foo/input1.cc"));
+ target.sources().push_back(SourceFile("//foo/input2.cc"));
+ target.config_values().inputs().push_back(SourceFile("//foo/input1.data"));
+ target.configs().push_back(LabelConfigPair(&config));
+ target.SetToolchain(setup.toolchain());
+ ASSERT_TRUE(target.OnResolved(&err));
+
+ std::ostringstream out;
+ NinjaBinaryTargetWriter writer(&target, out);
+ writer.Run();
+
+ const char expected[] =
+ "defines =\n"
+ "include_dirs =\n"
+ "cflags =\n"
+ "cflags_cc =\n"
+ "root_out_dir = .\n"
+ "target_out_dir = obj/foo\n"
+ "target_output_name = bar\n"
+ "\n"
+ "build obj/foo/bar.inputs.stamp: stamp"
+ " ../../foo/input1.data ../../foo/input2.data ../../foo/input3.data\n"
+ "build obj/foo/bar.input1.o: cxx ../../foo/input1.cc"
+ " | obj/foo/bar.inputs.stamp\n"
+ "build obj/foo/bar.input2.o: cxx ../../foo/input2.cc"
+ " | obj/foo/bar.inputs.stamp\n"
+ "\n"
+ "build obj/foo/bar.stamp: stamp obj/foo/bar.input1.o "
+ "obj/foo/bar.input2.o\n";
+
+ EXPECT_EQ(expected, out.str());
+ }
}
diff --git a/tools/gn/ninja_copy_target_writer_unittest.cc b/tools/gn/ninja_copy_target_writer_unittest.cc
index 44973a7..b00a644 100644
--- a/tools/gn/ninja_copy_target_writer_unittest.cc
+++ b/tools/gn/ninja_copy_target_writer_unittest.cc
@@ -77,7 +77,7 @@
target.sources().push_back(SourceFile("//foo/input1.txt"));
target.action_values().outputs() =
SubstitutionList::MakeForTest("//out/Debug/{{source_name_part}}.out");
- target.inputs().push_back(SourceFile("//foo/script.py"));
+ target.config_values().inputs().push_back(SourceFile("//foo/script.py"));
target.SetToolchain(setup.toolchain());
ASSERT_TRUE(target.OnResolved(&err));
diff --git a/tools/gn/ninja_target_writer.cc b/tools/gn/ninja_target_writer.cc
index 4d36711..77af7a1 100644
--- a/tools/gn/ninja_target_writer.cc
+++ b/tools/gn/ninja_target_writer.cc
@@ -8,6 +8,7 @@
#include "base/files/file_util.h"
#include "base/strings/string_util.h"
+#include "tools/gn/config_values_extractors.h"
#include "tools/gn/err.h"
#include "tools/gn/escape.h"
#include "tools/gn/filesystem_utils.h"
@@ -200,8 +201,10 @@
// implicit dependency instead. The implicit depedency in this case is
// handled separately by the binary target writer.
if (!target_->IsBinary()) {
- for (const auto& input : target_->inputs())
- input_deps_sources.push_back(&input);
+ for (ConfigValuesIterator iter(target_); !iter.done(); iter.Next()) {
+ for (const auto& input : iter.cur().inputs())
+ input_deps_sources.push_back(&input);
+ }
}
// For an action (where we run a script only once) the sources are the same
diff --git a/tools/gn/ninja_target_writer_unittest.cc b/tools/gn/ninja_target_writer_unittest.cc
index 55bbde0..0ffda3b 100644
--- a/tools/gn/ninja_target_writer_unittest.cc
+++ b/tools/gn/ninja_target_writer_unittest.cc
@@ -47,7 +47,7 @@
target.set_output_type(Target::EXECUTABLE);
target.visibility().SetPublic();
target.SetToolchain(setup.toolchain());
- target.inputs().push_back(SourceFile("//foo/input.txt"));
+ target.config_values().inputs().push_back(SourceFile("//foo/input.txt"));
target.sources().push_back(SourceFile("//foo/source.txt"));
target.public_deps().push_back(LabelTargetPair(&base_target));
diff --git a/tools/gn/qt_creator_writer.cc b/tools/gn/qt_creator_writer.cc
index b9b6247..687bff2 100644
--- a/tools/gn/qt_creator_writer.cc
+++ b/tools/gn/qt_creator_writer.cc
@@ -121,9 +121,11 @@
AddToSources(target->sources());
AddToSources(target->public_headers());
- AddToSources(target->inputs());
for (ConfigValuesIterator it(target); !it.done(); it.Next()) {
+ for (const auto& input : it.cur().inputs())
+ sources_.insert(FilePathToUTF8(build_settings_->GetFullPath(input)));
+
SourceFile precompiled_source = it.cur().precompiled_source();
if (!precompiled_source.is_null()) {
sources_.insert(
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index 5c5ff5c..7c810b5 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -827,8 +827,10 @@
// See Scheduler::AddUnknownGeneratedInput's declaration for more.
for (const SourceFile& file : sources_)
CheckSourceGenerated(file);
- for (const SourceFile& file : inputs_)
- CheckSourceGenerated(file);
+ for (ConfigValuesIterator iter(this); !iter.done(); iter.Next()) {
+ for (const SourceFile& file : iter.cur().inputs())
+ CheckSourceGenerated(file);
+ }
// TODO(agrieve): Check all_libs_ here as well (those that are source files).
// http://crbug.com/571731
}
diff --git a/tools/gn/target.h b/tools/gn/target.h
index 2c9dc35..de5c13d 100644
--- a/tools/gn/target.h
+++ b/tools/gn/target.h
@@ -156,10 +156,6 @@
write_runtime_deps_output_ = value;
}
- // Compile-time extra dependencies.
- const FileList& inputs() const { return inputs_; }
- FileList& inputs() { return inputs_; }
-
// Runtime dependencies. These are "file-like things" that can either be
// directories or files. They do not need to exist, these are just passed as
// runtime dependencies to external test systems as necessary.
@@ -350,7 +346,6 @@
bool check_includes_;
bool complete_static_lib_;
bool testonly_;
- FileList inputs_;
std::vector<std::string> data_;
BundleData bundle_data_;
OutputFile write_runtime_deps_output_;
@@ -381,9 +376,9 @@
std::vector<LabelPattern> assert_no_deps_;
- // Used for all binary targets. The precompiled header values in this struct
- // will be resolved to the ones to use for this target, if precompiled
- // headers are used.
+ // Used for all binary targets, and for inputs in regular targets. The
+ // precompiled header values in this struct will be resolved to the ones to
+ // use for this target, if precompiled headers are used.
ConfigValues config_values_;
// Used for action[_foreach] targets.
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index c441f04..bbc9793 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -187,19 +187,6 @@
return true;
}
-bool TargetGenerator::FillInputs() {
- const Value* value = scope_->GetValue(variables::kInputs, true);
- if (!value)
- return true;
-
- Target::FileList dest_inputs;
- if (!ExtractListOfRelativeFiles(scope_->settings()->build_settings(), *value,
- scope_->GetSourceDir(), &dest_inputs, err_))
- return false;
- target_->inputs().swap(dest_inputs);
- return true;
-}
-
bool TargetGenerator::FillConfigs() {
return FillGenericConfigs(variables::kConfigs, &target_->configs());
}
diff --git a/tools/gn/target_generator.h b/tools/gn/target_generator.h
index a3bdd58..549f2cd 100644
--- a/tools/gn/target_generator.h
+++ b/tools/gn/target_generator.h
@@ -49,7 +49,6 @@
bool FillSources();
bool FillPublic();
- bool FillInputs();
bool FillConfigs();
bool FillOutputs(bool allow_substitutions);
bool FillCheckIncludes();
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc
index bf943e8..bee46f1 100644
--- a/tools/gn/target_unittest.cc
+++ b/tools/gn/target_unittest.cc
@@ -862,7 +862,7 @@
SourceFile object_file("//out/Debug/obj/source_target.source.o");
TestTarget final_target(setup, "//:final", Target::ACTION);
- final_target.inputs().push_back(object_file);
+ final_target.config_values().inputs().push_back(object_file);
EXPECT_TRUE(final_target.OnResolved(&err));
AssertSchedulerHasOneUnknownFileMatching(&final_target, object_file);