diff options
author | Nico Weber <thakis@chromium.org> | 2015-03-24 21:16:07 (GMT) |
---|---|---|
committer | Nico Weber <thakis@chromium.org> | 2015-03-24 22:26:48 (GMT) |
commit | 92b74c340ab6397cb728391995f86dfdb39bb186 (patch) | |
tree | 4c27f44479075415dbc6fcf656cae8ce4727f20a /src/manifest_parser.cc | |
parent | 6bac2fba25df89df748c44de1d9d3b9f546d3aac (diff) | |
download | Ninja-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.cc | 14 |
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()); } } |