]> git.tdb.fi Git - builder.git/blob - source/package.cpp
Split class Package into SourcePackage and BinaryPackage
[builder.git] / source / package.cpp
1 /* $Id$
2
3 This file is part of builder
4 Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include <msp/strings/lexicalcast.h>
9 #include <msp/strings/utils.h>
10 #include "builder.h"
11 #include "misc.h"
12 #include "package.h"
13
14 using namespace std;
15 using namespace Msp;
16
17 #include <iostream>
18
19 /**
20 Creates a buildable package.
21 */
22 Package::Package(Builder &b, const string &n):
23         builder(b),
24         name(n),
25         conf_done(false),
26         use_pkgconfig(true)
27 { }
28
29 /**
30 Tries to resolve all references to dependency packages.
31 */
32 void Package::resolve_refs()
33 {
34         for(PkgRefList::iterator i=requires.begin(); i!=requires.end(); ++i)
35                 i->resolve();
36 }
37
38 /**
39 Processes configuration options that were most likely obtained from the command
40 line.
41 */
42 void Package::configure(const StringMap &opts, unsigned flag)
43 {
44         if(conf_done)
45                 return;
46
47         if(builder.get_verbose()>=3)
48                 cout<<"Configuring "<<name<<'\n';
49
50         do_configure(opts, flag);
51
52         for(PkgRefList::iterator i=requires.begin(); i!=requires.end(); ++i)
53                 i->get_package()->configure(opts, flag&2);
54
55         create_build_info();
56
57         conf_done=true;
58 }
59
60 /*** private ***/
61
62 Package::Loader::Loader(Package &p):
63         pkg(p)
64 {
65         add("require", &Loader::require);
66 }
67
68 void Package::Loader::require(const string &n)
69 {
70         pkg.requires.push_back(PackageRef(pkg.builder, n));
71 }