mirror of
https://github.com/ninja-build/ninja.git
synced 2026-08-08 09:02:08 +00:00
Merge pull request #753 from nico/nlacc
Accept \r\n line endings in depfiles.
This commit is contained in:
@@ -124,17 +124,18 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
}
|
||||
}
|
||||
++in;
|
||||
if ((yych = *in) <= '#') {
|
||||
if (yych <= '\n') {
|
||||
if ((yych = *in) <= '"') {
|
||||
if (yych <= '\f') {
|
||||
if (yych <= 0x00) goto yy3;
|
||||
if (yych <= '\t') goto yy14;
|
||||
if (yych != '\n') goto yy14;
|
||||
} else {
|
||||
if (yych <= '\r') goto yy3;
|
||||
if (yych == ' ') goto yy16;
|
||||
if (yych <= '"') goto yy14;
|
||||
goto yy16;
|
||||
goto yy14;
|
||||
}
|
||||
} else {
|
||||
if (yych <= 'Z') {
|
||||
if (yych <= '#') goto yy16;
|
||||
if (yych == '*') goto yy16;
|
||||
goto yy14;
|
||||
} else {
|
||||
@@ -224,7 +225,7 @@ yy16:
|
||||
} else if (!out_.str_) {
|
||||
out_ = StringPiece(filename, len);
|
||||
} else if (out_ != StringPiece(filename, len)) {
|
||||
*err = "depfile has multiple output paths.";
|
||||
*err = "depfile has multiple output paths";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
*out++ = '$';
|
||||
continue;
|
||||
}
|
||||
'\\' [^\000\n] {
|
||||
'\\' [^\000\r\n] {
|
||||
// Let backslash before other characters through verbatim.
|
||||
*out++ = '\\';
|
||||
*out++ = yych;
|
||||
@@ -108,7 +108,7 @@ bool DepfileParser::Parse(string* content, string* err) {
|
||||
} else if (!out_.str_) {
|
||||
out_ = StringPiece(filename, len);
|
||||
} else if (out_ != StringPiece(filename, len)) {
|
||||
*err = "depfile has multiple output paths.";
|
||||
*err = "depfile has multiple output paths";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,17 @@ TEST_F(DepfileParserTest, Continuation) {
|
||||
EXPECT_EQ(2u, parser_.ins_.size());
|
||||
}
|
||||
|
||||
TEST_F(DepfileParserTest, CarriageReturnContinuation) {
|
||||
string err;
|
||||
EXPECT_TRUE(Parse(
|
||||
"foo.o: \\\r\n"
|
||||
" bar.h baz.h\r\n",
|
||||
&err));
|
||||
ASSERT_EQ("", err);
|
||||
EXPECT_EQ("foo.o", parser_.out_.AsString());
|
||||
EXPECT_EQ(2u, parser_.ins_.size());
|
||||
}
|
||||
|
||||
TEST_F(DepfileParserTest, BackSlashes) {
|
||||
string err;
|
||||
EXPECT_TRUE(Parse(
|
||||
@@ -136,4 +147,5 @@ 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));
|
||||
ASSERT_EQ("depfile has multiple output paths", err);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user