]> git.tdb.fi Git - builder.git/blob - source/component.cpp
97fdacd66ac8f221871052be29e1727ba424b337
[builder.git] / source / component.cpp
1 #include "component.h"
2 #include "package.h"
3
4 using namespace std;
5
6 Component::Component(Package &p, Type t, const string &n):
7         pkg(p),
8         type(t),
9         name(n),
10         install(false)
11 { }
12
13 /**
14 Tries to resolve all references to packages.
15 */
16 void Component::resolve_refs()
17 {
18         for(PkgRefList::iterator i=requires.begin(); i!=requires.end(); ++i)
19                 i->resolve();
20 }
21
22 /**
23 Prepares the build information for building.
24 */
25 void Component::create_build_info()
26 {
27         build_info.add(pkg.get_build_info());
28
29         for(PkgRefList::iterator i=requires.begin(); i!=requires.end(); ++i)
30         {
31                 if(!i->get_package())
32                         continue;
33                 i->get_package()->create_build_info();
34                 build_info.add(i->get_package()->get_exported_binfo());
35         }
36
37         build_info.unique();
38 }
39
40 Component::Loader::Loader(Component &c):
41         comp(c)
42 {
43         add("source",          &Loader::source);
44         add("install",         &Component::install);
45         add("install_headers", &Component::install_headers);
46         add("build_info",      &Loader::build_info);
47         add("require",         &Loader::require);
48 }
49
50 void Component::Loader::source(const string &s)
51 {
52         comp.sources.push_back(comp.pkg.get_source()/s);
53 }
54
55 void Component::Loader::require(const string &n)
56 {
57         comp.requires.push_back(PackageRef(comp.pkg.get_builder(), n));
58 }
59
60 void Component::Loader::build_info()
61 {
62         load_sub(comp.build_info);
63 }