]> git.tdb.fi Git - builder.git/blob - source/package.cpp
5cf7e07b6bd7e67e00cdf550c217dfb6dc80a6cb
[builder.git] / source / package.cpp
1 #include "builder.h"
2 #include "package.h"
3
4 using namespace std;
5 using namespace Msp;
6
7 PackageRef::PackageRef(Builder &b, const string &n):
8         builder(b),
9         name(n),
10         package(0)
11 { }
12
13 Package *PackageRef::get_package()
14 {
15         if(!package)
16                 package=builder.get_package(name);
17         return package;
18 }
19
20 Package::Package(Builder &b, const string &n, const Path::Path &s):
21         builder(b),
22         name(n),
23         source(s),
24         buildable(false)
25 {
26 }
27
28 void Package::resolve_refs()
29 {
30         for(list<PackageRef>::iterator i=requires.begin(); i!=requires.end(); ++i)
31                 i->get_package();
32 }
33
34 Package::Loader::Loader(Package &p):
35         pkg(p)
36 {
37         add("version",     &Package::version);
38         add("description", &Package::description);
39         add("require",     &Loader::require);
40         add("program",     &Loader::program);
41         add("library",     &Loader::library);
42 }
43
44 Package::Loader::~Loader()
45 {
46         pkg.buildable=true;
47 }
48
49 void Package::Loader::require(const string &n)
50 {
51         pkg.requires.push_back(PackageRef(pkg.builder, n));
52 }
53
54 void Package::Loader::program(const std::string &n)
55 {
56         Component prog(pkg, Component::PROGRAM, n);
57         load_sub(prog);
58         pkg.components.push_back(prog);
59 }
60
61 void Package::Loader::library(const std::string &n)
62 {
63         Component prog(pkg, Component::LIBRARY, n);
64         load_sub(prog);
65         pkg.components.push_back(prog);
66 }