summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQingning Huo <qingninghuo@gmail.com>2011-09-06 19:46:32 (GMT)
committerQingning Huo <qingninghuo@gmail.com>2011-09-06 19:46:32 (GMT)
commit8efe599247c762caa6da54a1c10e37c538319669 (patch)
tree9a159b956cbb35c85d966f026e0b63ad713c862f /src
parente292718907a60c464dbe471ccdc7014731a4b6a2 (diff)
downloadNinja-8efe599247c762caa6da54a1c10e37c538319669.zip
Ninja-8efe599247c762caa6da54a1c10e37c538319669.tar.gz
Ninja-8efe599247c762caa6da54a1c10e37c538319669.tar.bz2
Add depfile support to build command with multiple outputs (Fixes: #61)
parsers.cpp: allow depfile used at build command with multiple outputs. graph.cpp: allow depfile used at build command with multiple outputs. parsers_test.cpp: make the test pass. As before, the depfile itself can only mention one target, which must be the first of a build command with multiple outpus. [There is really no need to mention all the output in the depfile, because all targets should depend on exactly the same files anyway, because these targets are built by a single build command.]
Diffstat (limited to 'src')
-rw-r--r--src/graph.cc4
-rw-r--r--src/parsers.cc7
-rw-r--r--src/parsers_test.cc5
3 files changed, 2 insertions, 14 deletions
diff --git a/src/graph.cc b/src/graph.cc
index 9b5f10b..82716aa 100644
--- a/src/graph.cc
+++ b/src/graph.cc
@@ -150,10 +150,6 @@ bool Edge::LoadDepFile(State* state, DiskInterface* disk_interface,
}
// Check that this depfile matches our output.
- if (outputs_.size() != 1) {
- *err = "expected only one output";
- return false;
- }
if (outputs_[0]->file_->path_ != makefile.out_) {
*err = "expected makefile to mention '" + outputs_[0]->file_->path_ + "', "
"got '" + makefile.out_ + "'";
diff --git a/src/parsers.cc b/src/parsers.cc
index 7f587a6..35790b2 100644
--- a/src/parsers.cc
+++ b/src/parsers.cc
@@ -471,13 +471,6 @@ bool ManifestParser::ParseEdge(string* err) {
if (!rule)
return tokenizer_.Error("unknown build rule '" + rule_name + "'", err);
- if (!rule->depfile_.empty()) {
- if (outs.size() > 1) {
- return tokenizer_.Error("dependency files only work with single-output "
- "rules", err);
- }
- }
-
for (;;) {
string in;
if (!tokenizer_.ReadIdent(&in))
diff --git a/src/parsers_test.cc b/src/parsers_test.cc
index 1ac5990..12f09b0 100644
--- a/src/parsers_test.cc
+++ b/src/parsers_test.cc
@@ -316,11 +316,10 @@ TEST_F(ParserTest, Errors) {
State state;
ManifestParser parser(&state, NULL);
string err;
- EXPECT_FALSE(parser.Parse("rule cc\n command = foo\n depfile = bar\n"
+ EXPECT_TRUE(parser.Parse("rule cc\n command = foo\n depfile = bar\n"
"build a.o b.o: cc c.cc\n",
&err));
- EXPECT_EQ("line 4, col 16: dependency files only work with "
- "single-output rules", err);
+ EXPECT_EQ("", err);
}
{