summaryrefslogtreecommitdiffstats
path: root/src/depfile_parser_test.cc
diff options
context:
space:
mode:
authorOleksandr Usov <a.s.usov@gmail.com>2012-03-12 19:14:07 (GMT)
committerOleksandr Usov <a.s.usov@gmail.com>2012-03-12 19:14:07 (GMT)
commit73af0ec4d0074ce1e9b1677b3525ed92f5fd00c7 (patch)
treea8220600abd6f31fb3f9e7debc42b0c2589cc0f8 /src/depfile_parser_test.cc
parentfffab7c868482cb8d24f40b42de958c074480226 (diff)
downloadNinja-73af0ec4d0074ce1e9b1677b3525ed92f5fd00c7.zip
Ninja-73af0ec4d0074ce1e9b1677b3525ed92f5fd00c7.tar.gz
Ninja-73af0ec4d0074ce1e9b1677b3525ed92f5fd00c7.tar.bz2
Issue #241 - handle depfiles generated by older versions of GCC
Older versions of GCC would produce broken depfiles when -MT or -MQ is used gcc43 -MT foo.o -MMD -MF foo.o.d -o foo.o -c foo.c will result in the following depfile foo.o foo.o: <dependencies> Parse multiple outputs unifying duplicates and correctly report errors if they are different.
Diffstat (limited to 'src/depfile_parser_test.cc')
-rw-r--r--src/depfile_parser_test.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/depfile_parser_test.cc b/src/depfile_parser_test.cc
index 43e677c..883926a 100644
--- a/src/depfile_parser_test.cc
+++ b/src/depfile_parser_test.cc
@@ -102,3 +102,20 @@ TEST_F(DepfileParserTest, Escapes) {
parser_.out_.AsString());
ASSERT_EQ(0u, parser_.ins_.size());
}
+
+TEST_F(DepfileParserTest, UnifyMultupleOutputs) {
+ // check that multiple duplicate targets are properly unified
+ string err;
+ EXPECT_TRUE(Parse("foo foo: x y z", &err));
+ ASSERT_EQ(parser_.out_.AsString(), "foo");
+ ASSERT_EQ(parser_.ins_.size(), 3);
+ EXPECT_EQ("x", parser_.ins_[0].AsString());
+ EXPECT_EQ("y", parser_.ins_[1].AsString());
+ EXPECT_EQ("z", parser_.ins_[2].AsString());
+}
+
+TEST_F(DepfileParserTest, RejectMultipleDifferentOutputs) {
+ // check that multiple different outputs are rejected by the parser
+ string err;
+ EXPECT_FALSE(Parse("foo bar: x y z", &err));
+}