summaryrefslogtreecommitdiffstats
path: root/src/ninja.cc
diff options
context:
space:
mode:
authorJan Niklas Hasse <jhasse@bixense.com>2021-02-23 09:08:48 (GMT)
committerGitHub <noreply@github.com>2021-02-23 09:08:48 (GMT)
commit5c9334340675bbfed4aff10bd30e63b872191f0b (patch)
tree1127c24eec8b166ef7c650474898bed5a521dbda /src/ninja.cc
parentec8de9c247dde02c447cff23cb826a7524110e79 (diff)
parent6c89e596eef50a4aa53f3cdc0f40a7071638769f (diff)
downloadNinja-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.cc27
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;
}