summaryrefslogtreecommitdiffstats
path: root/src/manifest_parser.cc
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2015-03-24 21:16:07 (GMT)
committerNico Weber <thakis@chromium.org>2015-03-24 22:26:48 (GMT)
commit92b74c340ab6397cb728391995f86dfdb39bb186 (patch)
tree4c27f44479075415dbc6fcf656cae8ce4727f20a /src/manifest_parser.cc
parent6bac2fba25df89df748c44de1d9d3b9f546d3aac (diff)
downloadNinja-92b74c340ab6397cb728391995f86dfdb39bb186.zip
Ninja-92b74c340ab6397cb728391995f86dfdb39bb186.tar.gz
Ninja-92b74c340ab6397cb728391995f86dfdb39bb186.tar.bz2
Add an opt-in flag to make duplicate edges an error (`-w dupbuild=err`).
This is step 1 on #931. Duplicated edges will become an error by default in the future.
Diffstat (limited to 'src/manifest_parser.cc')
-rw-r--r--src/manifest_parser.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/manifest_parser.cc b/src/manifest_parser.cc
index 638d751..e8c0436 100644
--- a/src/manifest_parser.cc
+++ b/src/manifest_parser.cc
@@ -24,8 +24,10 @@
#include "util.h"
#include "version.h"
-ManifestParser::ManifestParser(State* state, FileReader* file_reader)
- : state_(state), file_reader_(file_reader), quiet_(false) {
+ManifestParser::ManifestParser(State* state, FileReader* file_reader,
+ bool dupe_edge_should_err)
+ : state_(state), file_reader_(file_reader),
+ dupe_edge_should_err_(dupe_edge_should_err), quiet_(false) {
env_ = &state->bindings_;
}
@@ -329,10 +331,14 @@ bool ManifestParser::ParseEdge(string* err) {
if (!CanonicalizePath(&path, &slash_bits, &path_err))
return lexer_.Error(path_err, err);
if (!state_->AddOut(edge, path, slash_bits)) {
- if (!quiet_) {
+ if (dupe_edge_should_err_) {
+ lexer_.Error("multiple rules generate " + path + " [-w dupbuild=err]",
+ err);
+ return false;
+ } else if (!quiet_) {
Warning("multiple rules generate %s. "
"builds involving this target will not be correct; "
- "continuing anyway",
+ "continuing anyway [-w dupbuild=warn]",
path.c_str());
}
}