--- /dev/null
+#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)
+{
+ 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"));
+}
+
+BuildGraph::~BuildGraph()
+{
+ for(TargetMap::iterator i=targets.begin(); i!=targets.end(); ++i)
+ delete i->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);
+}