diff options
author | Maxim Kalaev <maximus.ka@gmail.com> | 2013-06-30 19:59:54 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2013-07-08 20:50:24 (GMT) |
commit | 5d94cf12741da06bfbea860441f492ebdb2e3651 (patch) | |
tree | 7370b81609e5fe99a245e1e6bce8f40a52280e41 /src | |
parent | 5d48abb2b2de5a22b0f6f419ad7bd3f1d5e391b7 (diff) | |
download | Ninja-5d94cf12741da06bfbea860441f492ebdb2e3651.zip Ninja-5d94cf12741da06bfbea860441f492ebdb2e3651.tar.gz Ninja-5d94cf12741da06bfbea860441f492ebdb2e3651.tar.bz2 |
Introducing tool 'deps' dumping ninja deps log entries
Diffstat (limited to 'src')
-rw-r--r-- | src/ninja.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/ninja.cc b/src/ninja.cc index 3b381b7..1e5590d 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -104,6 +104,7 @@ struct NinjaMain { // The various subcommands, run via "-t XXX". int ToolGraph(int argc, char* argv[]); int ToolQuery(int argc, char* argv[]); + int ToolDeps(int argc, char* argv[]); int ToolBrowse(int argc, char* argv[]); int ToolMSVC(int argc, char* argv[]); int ToolTargets(int argc, char* argv[]); @@ -437,6 +438,45 @@ int ToolTargetsList(State* state) { return 0; } +int NinjaMain::ToolDeps(int argc, char** argv) { + vector<Node*> nodes; + if (argc == 0) { + for (vector<Node*>::const_iterator ni = deps_log_.nodes().begin(); + ni != deps_log_.nodes().end(); ++ni) { + // Only query for targets with an incoming edge and deps + Edge* e = (*ni)->in_edge(); + if (e && !e->GetBinding("deps").empty()) + nodes.push_back(*ni); + } + } else { + string err; + if (!CollectTargetsFromArgs(argc, argv, &nodes, &err)) { + Error("%s", err.c_str()); + return 1; + } + } + + RealDiskInterface disk_interface; + for (vector<Node*>::iterator it = nodes.begin(), end = nodes.end(); + it != end; ++it) { + DepsLog::Deps* deps = deps_log_.GetDeps(*it); + if (!deps) { + printf("%s: deps not found\n", (*it)->path().c_str()); + continue; + } + + TimeStamp mtime = disk_interface.Stat((*it)->path()); + printf("%s: #deps %d, deps mtime %d (%s)\n", + (*it)->path().c_str(), deps->node_count, deps->mtime, + (!mtime || mtime > deps->mtime ? "STALE":"VALID")); + for (int i = 0; i < deps->node_count; ++i) + printf(" %s\n", deps->nodes[i]->path().c_str()); + printf("\n"); + } + + return 0; +} + int NinjaMain::ToolTargets(int argc, char* argv[]) { int depth = 1; if (argc >= 1) { @@ -644,6 +684,8 @@ const Tool* ChooseTool(const string& tool_name) { Tool::RUN_AFTER_LOAD, &NinjaMain::ToolClean }, { "commands", "list all commands required to rebuild given targets", Tool::RUN_AFTER_LOAD, &NinjaMain::ToolCommands }, + { "deps", "show dependencies stored in the deps log", + Tool::RUN_AFTER_LOGS, &NinjaMain::ToolDeps }, { "graph", "output graphviz dot file for targets", Tool::RUN_AFTER_LOAD, &NinjaMain::ToolGraph }, { "query", "show inputs/outputs for a path", |