diff options
Diffstat (limited to 'src/ninja_jumble.cc')
-rw-r--r-- | src/ninja_jumble.cc | 18 |
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; +} |