summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-09-09 18:37:23 (GMT)
committerEvan Martin <martine@danga.com>2011-09-09 18:37:23 (GMT)
commit00997c1c56d26a7a73c7447c99350e834e93ced5 (patch)
treeb5afa814b7d224d85b5edef872f135417fff251b /src
parentf5ac6b4cea0f67cf2dae4f2d48cdda3664f957ac (diff)
parentd0b249267d22ac03888ebe8a74f3945ca0c88559 (diff)
downloadNinja-00997c1c56d26a7a73c7447c99350e834e93ced5.zip
Ninja-00997c1c56d26a7a73c7447c99350e834e93ced5.tar.gz
Ninja-00997c1c56d26a7a73c7447c99350e834e93ced5.tar.bz2
Merge pull request #95 from qhuo/depfile-for-command-with-multiple-outputs
Add depfile support to build command with multiple outputs (Fixes: #61)
Diffstat (limited to 'src')
-rw-r--r--src/graph.cc4
-rw-r--r--src/parsers.cc7
-rw-r--r--src/parsers_test.cc22
3 files changed, 11 insertions, 22 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..5e2746d 100644
--- a/src/parsers_test.cc
+++ b/src/parsers_test.cc
@@ -316,17 +316,6 @@ 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"
- "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);
- }
-
- {
- State state;
- ManifestParser parser(&state, NULL);
- string err;
EXPECT_FALSE(parser.Parse("rule cc\n command = foo\n othervar = bar\n",
&err));
EXPECT_EQ("line 3, col 3: unexpected variable 'othervar'", err);
@@ -372,6 +361,17 @@ TEST_F(ParserTest, Errors) {
}
}
+TEST_F(ParserTest, MultipleOutputs)
+{
+ State state;
+ ManifestParser parser(&state, NULL);
+ string err;
+ 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("", err);
+}
+
TEST_F(ParserTest, SubNinja) {
files_["test.ninja"] =
"var = inner\n"