From 652345f7fccbc4f3db3700f576b4b5b8e0768fc2 Mon Sep 17 00:00:00 2001 From: Nicolas Despres Date: Sun, 10 Apr 2011 18:18:31 +0200 Subject: graph: Assume all root nodes if no target given. This way we can generate the complete graph. --- manual.asciidoc | 3 ++- src/ninja.cc | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/manual.asciidoc b/manual.asciidoc index 7ea3da8..cf7b2c8 100644 --- a/manual.asciidoc +++ b/manual.asciidoc @@ -311,7 +311,8 @@ feature requires a Python installation. `graph`:: output a file in the syntax used by `graphviz`, a automatic graph layout tool. Use it like: +ninja -t graph _target_ | dot -Tpng -ograph.png /dev/stdin+ . In the Ninja source tree, `ninja graph` -generates an image for Ninja itself. +generates an image for Ninja itself. If no target is given generate a +graph for all root targets. `targets`:: output a list of targets either by rule or by depth. If used like this +ninja -t targets rule _name_+ it prints the list of targets diff --git a/src/ninja.cc b/src/ninja.cc index 5a0c00d..c4f78ab 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -106,14 +106,28 @@ int CmdGraph(State* state, int argc, char* argv[]) { int status = 0; GraphViz graph; graph.Start(); - for (int i = 0; i < argc; ++i) { - Node* node = state->LookupNode(argv[i]); - if (node) - graph.AddTarget(node); - else { - Error("unknown target '%s'", argv[i]); + if (argc == 0) { + string err; + vector root_nodes = state->RootNodes(&err); + if (err.empty()) { + for (vector::const_iterator n = root_nodes.begin(); + n != root_nodes.end(); + ++n) + graph.AddTarget(*n); + } else { + Error("%s", err.c_str()); status = 1; } + } else { + for (int i = 0; i < argc; ++i) { + Node* node = state->LookupNode(argv[i]); + if (node) + graph.AddTarget(node); + else { + Error("unknown target '%s'", argv[i]); + status = 1; + } + } } graph.Finish(); return status; -- cgit v0.12 From 535f830f7fae73ea293800045561551c01dec589 Mon Sep 17 00:00:00 2001 From: Nicolas Despres Date: Mon, 18 Apr 2011 18:24:42 +0200 Subject: Generate the entire graph not only for the 'all' target. This way we can see the 'doxygen' target and also some object file we forgot to add as input of the link rule. --- build.ninja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.ninja b/build.ninja index be21296..128ef67 100644 --- a/build.ninja +++ b/build.ninja @@ -74,7 +74,7 @@ build ninja_test: link $builddir/build_test.o $builddir/build_log_test.o \ # Generate a graph using the -g flag. rule gendot - command = ./ninja -t graph all > $out + command = ./ninja -t graph > $out rule gengraph command = dot -Tpng $in > $out -- cgit v0.12