diff options
author | Nico Weber <nicolasweber@gmx.de> | 2017-09-11 01:20:10 (GMT) |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2017-09-11 01:20:10 (GMT) |
commit | 253e94c1fa511704baeb61cf69995bbf09ba435e (patch) | |
tree | 750384ab62f02c29849a706f98f0475dae371c67 /src/ninja.cc | |
parent | f69c785dd6cbc847e8308439d227ffa913f7c903 (diff) | |
parent | 87111bff382655075f2577c591745a335f0103c7 (diff) | |
download | Ninja-253e94c1fa511704baeb61cf69995bbf09ba435e.zip Ninja-253e94c1fa511704baeb61cf69995bbf09ba435e.tar.gz Ninja-253e94c1fa511704baeb61cf69995bbf09ba435e.tar.bz2 |
v1.8.2v1.8.2
Diffstat (limited to 'src/ninja.cc')
-rw-r--r-- | src/ninja.cc | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/ninja.cc b/src/ninja.cc index 54de7b9..ed004ac 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -70,6 +70,9 @@ struct Options { /// Whether duplicate rules for one target should warn or print an error. bool dupe_edges_should_err; + + /// Whether phony cycles should warn or print an error. + bool phony_cycle_should_err; }; /// The Ninja main() loads up a series of data structures; various tools need @@ -845,7 +848,8 @@ bool DebugEnable(const string& name) { bool WarningEnable(const string& name, Options* options) { if (name == "list") { printf("warning flags:\n" -" dupbuild={err,warn} multiple build lines for one target\n"); +" dupbuild={err,warn} multiple build lines for one target\n" +" phonycycle={err,warn} phony build statement references itself\n"); return false; } else if (name == "dupbuild=err") { options->dupe_edges_should_err = true; @@ -853,9 +857,16 @@ bool WarningEnable(const string& name, Options* options) { } else if (name == "dupbuild=warn") { options->dupe_edges_should_err = false; return true; + } else if (name == "phonycycle=err") { + options->phony_cycle_should_err = true; + return true; + } else if (name == "phonycycle=warn") { + options->phony_cycle_should_err = false; + return true; } else { const char* suggestion = - SpellcheckString(name.c_str(), "dupbuild=err", "dupbuild=warn", NULL); + SpellcheckString(name.c_str(), "dupbuild=err", "dupbuild=warn", + "phonycycle=err", "phonycycle=warn", NULL); if (suggestion) { Error("unknown warning flag '%s', did you mean '%s'?", name.c_str(), suggestion); @@ -1144,10 +1155,14 @@ int real_main(int argc, char** argv) { for (int cycle = 1; cycle <= kCycleLimit; ++cycle) { NinjaMain ninja(ninja_command, config); - ManifestParser parser(&ninja.state_, &ninja.disk_interface_, - options.dupe_edges_should_err - ? kDupeEdgeActionError - : kDupeEdgeActionWarn); + ManifestParserOptions parser_opts; + if (options.dupe_edges_should_err) { + parser_opts.dupe_edge_action_ = kDupeEdgeActionError; + } + if (options.phony_cycle_should_err) { + parser_opts.phony_cycle_action_ = kPhonyCycleActionError; + } + ManifestParser parser(&ninja.state_, &ninja.disk_interface_, parser_opts); string err; if (!parser.Load(options.input_file, &err)) { Error("%s", err.c_str()); |