X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildgraph.cpp;h=070f934f6665edaa079885a1f8efa7b1f864e76b;hb=5e00719d0c63e306786ff36df61797cdbc86f3e9;hp=8c0ff1272507a7336bfaee32461f4b83e5eaace7;hpb=373e9bb43c24d38316c5bb0393f4a369563319d3;p=builder.git diff --git a/source/buildgraph.cpp b/source/buildgraph.cpp index 8c0ff12..070f934 100644 --- a/source/buildgraph.cpp +++ b/source/buildgraph.cpp @@ -8,23 +8,24 @@ using namespace std; BuildGraph::BuildGraph(Builder &b): - builder(b) + builder(b), + goals(new VirtualTarget(builder, "goals")) { Target *world = new VirtualTarget(builder, "world"); world->add_dependency(*new VirtualTarget(builder, "default")); world->add_dependency(*new VirtualTarget(builder, "install")); - world->add_dependency(*new VirtualTarget(builder, "tarballs")); + world->add_dependency(*new VirtualTarget(builder, "archives")); } BuildGraph::~BuildGraph() { - for(TargetMap::iterator i=targets.begin(); i!=targets.end(); ++i) - delete i->second; + for(const auto &kvp: targets) + delete kvp.second; } Target *BuildGraph::get_target(const string &n) const { - TargetMap::const_iterator i = targets.find(n); + auto i = targets.find(n); if(i!=targets.end()) return i->second; return 0; @@ -32,7 +33,7 @@ Target *BuildGraph::get_target(const string &n) const void BuildGraph::add_target(Target *t) { - targets.insert(TargetMap::value_type(t->get_name(), t)); + targets.insert({ t->get_name(), t }); } void BuildGraph::add_primary_target(Target &t) @@ -53,3 +54,36 @@ void BuildGraph::add_installed_target(Target &t) inst_tgt = builder.get_toolchain().get_tool("CP").create_target(t); get_target("install")->add_dependency(*inst_tgt); } + +void BuildGraph::add_goal(Target &t) +{ + goals->add_dependency(t); +} + +void BuildGraph::prepare() +{ + if(goals->get_dependencies().empty()) + add_goal(*get_target("default")); + goals->prepare(); +} + +void BuildGraph::force_full_rebuild() +{ + for(const auto &kvp: targets) + if(kvp.second->is_buildable() && !kvp.second->needs_rebuild()) + kvp.second->force_rebuild(); +} + +unsigned BuildGraph::count_rebuild_targets() const +{ + unsigned count = 0; + for(const auto &kvp: targets) + if(kvp.second->is_buildable() && kvp.second->needs_rebuild()) + ++count; + return count; +} + +Target *BuildGraph::get_buildable_target() const +{ + return goals->get_buildable_target(); +}