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;
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)
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();
+}