-#include "builder.h"
-#include "buildgraph.h"
-#include "component.h"
-#include "sourcepackage.h"
-#include "tool.h"
-#include "virtualtarget.h"
-
-using namespace std;
-
-BuildGraph::BuildGraph(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, "archives"));
-}
-
-BuildGraph::~BuildGraph()
-{
- for(const auto &kvp: targets)
- delete kvp.second;
-}
-
-Target *BuildGraph::get_target(const string &n) const
-{
- TargetMap::const_iterator 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));
-}
-
-void BuildGraph::add_primary_target(Target &t)
-{
- get_target("world")->add_dependency(t);
-
- Package *main_pkg = &builder.get_package_manager().get_main_package();
- if(t.get_package()==main_pkg && t.get_component() && t.get_component()->is_default())
- get_target("default")->add_dependency(t);
-}
-
-void BuildGraph::add_installed_target(Target &t)
-{
- Target *inst_tgt = 0;
- if(const Tool *tool = t.get_tool())
- inst_tgt = tool->create_install(t);
- if(!inst_tgt)
- 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();
-}