]> git.tdb.fi Git - builder.git/blob - source/buildgraph.cpp
Refactor build graph into its own class
[builder.git] / source / buildgraph.cpp
1 #include "builder.h"
2 #include "buildgraph.h"
3 #include "component.h"
4 #include "sourcepackage.h"
5 #include "tool.h"
6 #include "virtualtarget.h"
7
8 using namespace std;
9
10 BuildGraph::BuildGraph(Builder &b):
11         builder(b)
12 {
13         Target *world = new VirtualTarget(builder, "world");
14         world->add_dependency(*new VirtualTarget(builder, "default"));
15         world->add_dependency(*new VirtualTarget(builder, "install"));
16         world->add_dependency(*new VirtualTarget(builder, "tarballs"));
17 }
18
19 BuildGraph::~BuildGraph()
20 {
21         for(TargetMap::iterator i=targets.begin(); i!=targets.end(); ++i)
22                 delete i->second;
23 }
24
25 Target *BuildGraph::get_target(const string &n) const
26 {
27         TargetMap::const_iterator i = targets.find(n);
28         if(i!=targets.end())
29                 return i->second;
30         return 0;
31 }
32
33 void BuildGraph::add_target(Target *t)
34 {
35         targets.insert(TargetMap::value_type(t->get_name(), t));
36 }
37
38 void BuildGraph::add_primary_target(Target &t)
39 {
40         get_target("world")->add_dependency(t);
41
42         Package *main_pkg = &builder.get_package_manager().get_main_package();
43         if(t.get_package()==main_pkg && t.get_component() && t.get_component()->is_default())
44                 get_target("default")->add_dependency(t);
45 }
46
47 void BuildGraph::add_installed_target(Target &t)
48 {
49         Target *inst_tgt = 0;
50         if(const Tool *tool = t.get_tool())
51                 inst_tgt = tool->create_install(t);
52         if(!inst_tgt)
53                 inst_tgt = builder.get_toolchain().get_tool("CP").create_target(t);
54         get_target("install")->add_dependency(*inst_tgt);
55 }