summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/build.cc1
-rw-r--r--src/build_log.cc1
-rw-r--r--src/build_log.h5
-rw-r--r--src/build_log_test.cc4
-rw-r--r--src/build_test.cc16
-rw-r--r--src/depfile_parser.cc16
-rw-r--r--src/depfile_parser.in.cc2
-rw-r--r--src/depfile_parser_test.cc15
-rw-r--r--src/ninja.cc1
-rw-r--r--src/subprocess.cc2
10 files changed, 39 insertions, 24 deletions
diff --git a/src/build.cc b/src/build.cc
index 44c1df6..a2e4f64 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -20,6 +20,7 @@
#ifdef _WIN32
#include <windows.h>
#else
+#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/termios.h>
diff --git a/src/build_log.cc b/src/build_log.cc
index fd93ea8..0cecd70 100644
--- a/src/build_log.cc
+++ b/src/build_log.cc
@@ -17,6 +17,7 @@
#include <errno.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include "build.h"
#include "graph.h"
diff --git a/src/build_log.h b/src/build_log.h
index 040609d..da8e726 100644
--- a/src/build_log.h
+++ b/src/build_log.h
@@ -71,10 +71,11 @@ struct BuildLog {
/// Rewrite the known log entries, throwing away old data.
bool Recompact(const string& path, string* err);
- // TODO: make these private.
typedef ExternalStringHashMap<LogEntry*>::Type Log;
+ const Log& log() const { return log_; }
+
+ private:
Log log_;
-private:
FILE* log_file_;
BuildConfig* config_;
bool needs_recompaction_;
diff --git a/src/build_log_test.cc b/src/build_log_test.cc
index c6d6bc3..9b729c7 100644
--- a/src/build_log_test.cc
+++ b/src/build_log_test.cc
@@ -54,8 +54,8 @@ TEST_F(BuildLogTest, WriteRead) {
EXPECT_TRUE(log2.Load(kTestFilename, &err));
ASSERT_EQ("", err);
- ASSERT_EQ(2u, log1.log_.size());
- ASSERT_EQ(2u, log2.log_.size());
+ ASSERT_EQ(2u, log1.log().size());
+ ASSERT_EQ(2u, log2.log().size());
BuildLog::LogEntry* e1 = log1.LookupByOutput("out");
ASSERT_TRUE(e1);
BuildLog::LogEntry* e2 = log2.LookupByOutput("out");
diff --git a/src/build_test.cc b/src/build_test.cc
index 5b35513..c015bc9 100644
--- a/src/build_test.cc
+++ b/src/build_test.cc
@@ -868,15 +868,15 @@ TEST_F(BuildTest, RspFileSuccess)
size_t files_removed = fs_.files_removed_.size();
EXPECT_TRUE(builder_.Build(&err));
- ASSERT_EQ(2, commands_ran_.size()); // cat + cat_rsp
+ ASSERT_EQ(2u, commands_ran_.size()); // cat + cat_rsp
// The RSP file was created
ASSERT_EQ(files_created + 1, fs_.files_created_.size());
- ASSERT_EQ(1, fs_.files_created_.count("out2.rsp"));
+ ASSERT_EQ(1u, fs_.files_created_.count("out2.rsp"));
// The RSP file was removed
ASSERT_EQ(files_removed + 1, fs_.files_removed_.size());
- ASSERT_EQ(1, fs_.files_removed_.count("out2.rsp"));
+ ASSERT_EQ(1u, fs_.files_removed_.count("out2.rsp"));
}
// Test that RSP file is created but not removed for commands, which fail
@@ -903,15 +903,15 @@ TEST_F(BuildTest, RspFileFailure) {
EXPECT_FALSE(builder_.Build(&err));
ASSERT_EQ("subcommand failed", err);
- ASSERT_EQ(1, commands_ran_.size());
+ ASSERT_EQ(1u, commands_ran_.size());
// The RSP file was created
ASSERT_EQ(files_created + 1, fs_.files_created_.size());
- ASSERT_EQ(1, fs_.files_created_.count("out.rsp"));
+ ASSERT_EQ(1u, fs_.files_created_.count("out.rsp"));
// The RSP file was NOT removed
ASSERT_EQ(files_removed, fs_.files_removed_.size());
- ASSERT_EQ(0, fs_.files_removed_.count("out.rsp"));
+ ASSERT_EQ(0u, fs_.files_removed_.count("out.rsp"));
// The RSP file contains what it should
ASSERT_EQ("Another very long command", fs_.files_["out.rsp"].contents);
@@ -939,7 +939,7 @@ TEST_F(BuildWithLogTest, RspFileCmdLineChange) {
// 1. Build for the 1st time (-> populate log)
EXPECT_TRUE(builder_.Build(&err));
- ASSERT_EQ(1, commands_ran_.size());
+ ASSERT_EQ(1u, commands_ran_.size());
// 2. Build again (no change)
commands_ran_.clear();
@@ -960,7 +960,7 @@ TEST_F(BuildWithLogTest, RspFileCmdLineChange) {
EXPECT_TRUE(builder_.AddTarget("out", &err));
EXPECT_EQ("", err);
EXPECT_TRUE(builder_.Build(&err));
- EXPECT_EQ(1, commands_ran_.size());
+ EXPECT_EQ(1u, commands_ran_.size());
}
TEST_F(BuildTest, InterruptCleanup) {
diff --git a/src/depfile_parser.cc b/src/depfile_parser.cc
index 7219eb0..261893f 100644
--- a/src/depfile_parser.cc
+++ b/src/depfile_parser.cc
@@ -64,7 +64,7 @@ bool DepfileParser::Parse(string* content, string* err) {
0, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 0, 0, 0, 0,
+ 128, 128, 128, 0, 0, 0, 128, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -84,7 +84,7 @@ bool DepfileParser::Parse(string* content, string* err) {
};
yych = *in;
- if (yych <= '[') {
+ if (yych <= '\\') {
if (yych <= ':') {
if (yych <= 0x00) goto yy6;
if (yych <= '*') goto yy8;
@@ -92,20 +92,18 @@ bool DepfileParser::Parse(string* content, string* err) {
} else {
if (yych <= '@') goto yy8;
if (yych <= 'Z') goto yy4;
- goto yy8;
+ if (yych <= '[') goto yy8;
}
} else {
- if (yych <= '_') {
- if (yych <= '\\') goto yy2;
- if (yych <= '^') goto yy8;
- goto yy4;
+ if (yych <= '`') {
+ if (yych == '_') goto yy4;
+ goto yy8;
} else {
- if (yych <= '`') goto yy8;
if (yych <= 'z') goto yy4;
+ if (yych == '~') goto yy4;
goto yy8;
}
}
-yy2:
++in;
if ((yych = *in) <= '$') {
if (yych <= '\n') {
diff --git a/src/depfile_parser.in.cc b/src/depfile_parser.in.cc
index 419ed8d..5e073df 100644
--- a/src/depfile_parser.in.cc
+++ b/src/depfile_parser.in.cc
@@ -68,7 +68,7 @@ bool DepfileParser::Parse(string* content, string* err) {
*out++ = yych;
continue;
}
- [a-zA-Z0-9+,/_:.-]+ {
+ [a-zA-Z0-9+,/_:.~-]+ {
// Got a span of plain text.
int len = in - start;
// Need to shift it over if we're overwriting backslashes.
diff --git a/src/depfile_parser_test.cc b/src/depfile_parser_test.cc
index 883926a..9094283 100644
--- a/src/depfile_parser_test.cc
+++ b/src/depfile_parser_test.cc
@@ -108,7 +108,7 @@ TEST_F(DepfileParserTest, UnifyMultupleOutputs) {
string err;
EXPECT_TRUE(Parse("foo foo: x y z", &err));
ASSERT_EQ(parser_.out_.AsString(), "foo");
- ASSERT_EQ(parser_.ins_.size(), 3);
+ ASSERT_EQ(parser_.ins_.size(), 3u);
EXPECT_EQ("x", parser_.ins_[0].AsString());
EXPECT_EQ("y", parser_.ins_[1].AsString());
EXPECT_EQ("z", parser_.ins_[2].AsString());
@@ -119,3 +119,16 @@ TEST_F(DepfileParserTest, RejectMultipleDifferentOutputs) {
string err;
EXPECT_FALSE(Parse("foo bar: x y z", &err));
}
+
+TEST_F(DepfileParserTest, Tilde) {
+ string err;
+ EXPECT_TRUE(Parse(
+"foo~.o: foo~.c",
+ &err));
+ ASSERT_EQ("", err);
+ EXPECT_EQ("foo~.o",
+ parser_.out_.AsString());
+ ASSERT_EQ(1u, parser_.ins_.size());
+ EXPECT_EQ("foo~.c",
+ parser_.ins_[0].AsString());
+}
diff --git a/src/ninja.cc b/src/ninja.cc
index 04cd771..7d020db 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -31,6 +31,7 @@
#include <windows.h>
#else
#include <getopt.h>
+#include <unistd.h>
#endif
#include "browse.h"
diff --git a/src/subprocess.cc b/src/subprocess.cc
index 99de93f..25b1bda 100644
--- a/src/subprocess.cc
+++ b/src/subprocess.cc
@@ -45,7 +45,7 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) {
#if !defined(linux)
// On linux we use ppoll in DoWork(); elsewhere we use pselect and so must
// avoid overly-large FDs.
- if (fd_ >= FD_SETSIZE)
+ if (fd_ >= static_cast<int>(FD_SETSIZE))
Fatal("pipe: %s", strerror(EMFILE));
#endif // !linux
SetCloseOnExec(fd_);