diff options
author | Jan Niklas Hasse <jhasse@bixense.com> | 2021-02-23 09:08:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-23 09:08:48 (GMT) |
commit | 5c9334340675bbfed4aff10bd30e63b872191f0b (patch) | |
tree | 1127c24eec8b166ef7c650474898bed5a521dbda /src/ninja.cc | |
parent | ec8de9c247dde02c447cff23cb826a7524110e79 (diff) | |
parent | 6c89e596eef50a4aa53f3cdc0f40a7071638769f (diff) | |
download | Ninja-5c9334340675bbfed4aff10bd30e63b872191f0b.zip Ninja-5c9334340675bbfed4aff10bd30e63b872191f0b.tar.gz Ninja-5c9334340675bbfed4aff10bd30e63b872191f0b.tar.bz2 |
Merge pull request #1331 from ilor/missingdeps3
missingdeps tool, take 2
Diffstat (limited to 'src/ninja.cc')
-rw-r--r-- | src/ninja.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/ninja.cc b/src/ninja.cc index 5053fcd..96eac1d 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -37,11 +37,13 @@ #include "deps_log.h" #include "clean.h" #include "debug_flags.h" +#include "depfile_parser.h" #include "disk_interface.h" #include "graph.h" #include "graphviz.h" #include "manifest_parser.h" #include "metrics.h" +#include "missing_deps.h" #include "state.h" #include "status.h" #include "util.h" @@ -119,6 +121,7 @@ struct NinjaMain : public BuildLogUser { int ToolGraph(const Options* options, int argc, char* argv[]); int ToolQuery(const Options* options, int argc, char* argv[]); int ToolDeps(const Options* options, int argc, char* argv[]); + int ToolMissingDeps(const Options* options, int argc, char* argv[]); int ToolBrowse(const Options* options, int argc, char* argv[]); int ToolMSVC(const Options* options, int argc, char* argv[]); int ToolTargets(const Options* options, int argc, char* argv[]); @@ -529,6 +532,26 @@ int NinjaMain::ToolDeps(const Options* options, int argc, char** argv) { return 0; } +int NinjaMain::ToolMissingDeps(const Options* options, int argc, char** argv) { + vector<Node*> nodes; + string err; + if (!CollectTargetsFromArgs(argc, argv, &nodes, &err)) { + Error("%s", err.c_str()); + return 1; + } + RealDiskInterface disk_interface; + MissingDependencyPrinter printer; + MissingDependencyScanner scanner(&printer, &deps_log_, &state_, + &disk_interface); + for (vector<Node*>::iterator it = nodes.begin(); it != nodes.end(); ++it) { + scanner.ProcessNode(*it); + } + scanner.PrintStats(); + if (scanner.HadMissingDeps()) + return 3; + return 0; +} + int NinjaMain::ToolTargets(const Options* options, int argc, char* argv[]) { int depth = 1; if (argc >= 1) { @@ -966,6 +989,8 @@ const Tool* ChooseTool(const string& tool_name) { Tool::RUN_AFTER_LOAD, &NinjaMain::ToolCommands }, { "deps", "show dependencies stored in the deps log", Tool::RUN_AFTER_LOGS, &NinjaMain::ToolDeps }, + { "missingdeps", "check deps log dependencies on generated files", + Tool::RUN_AFTER_LOGS, &NinjaMain::ToolMissingDeps }, { "graph", "output graphviz dot file for targets", Tool::RUN_AFTER_LOAD, &NinjaMain::ToolGraph }, { "query", "show inputs/outputs for a path", @@ -991,7 +1016,7 @@ const Tool* ChooseTool(const string& tool_name) { printf("ninja subtools:\n"); for (const Tool* tool = &kTools[0]; tool->name; ++tool) { if (tool->desc) - printf("%10s %s\n", tool->name, tool->desc); + printf("%11s %s\n", tool->name, tool->desc); } return NULL; } |