summaryrefslogtreecommitdiffstats
path: root/src/ninja_jumble.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/ninja_jumble.cc')
-rw-r--r--src/ninja_jumble.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ninja_jumble.cc b/src/ninja_jumble.cc
index fd2ee18..e6a0de6 100644
--- a/src/ninja_jumble.cc
+++ b/src/ninja_jumble.cc
@@ -182,3 +182,21 @@ void State::AddOut(Edge* edge, const string& path) {
}
node->in_edge_ = edge;
}
+
+vector<Node*> State::RootNodes(string* error)
+{
+ assert(error);
+ vector<Node*> root_nodes;
+ // Search for nodes with no output.
+ for (vector<Edge*>::iterator e = edges_.begin(); e != edges_.end(); ++e)
+ for (vector<Node*>::iterator outs = (*e)->outputs_.begin();
+ outs != (*e)->outputs_.end();
+ ++outs)
+ if ((*outs)->out_edges_.size() == 0)
+ root_nodes.push_back(*outs);
+ if (!edges_.empty() && root_nodes.empty()) {
+ *error = "could not determine root nodes of build graph";
+ }
+ assert(edges_.empty() || !root_nodes.empty());
+ return root_nodes;
+}