]> git.tdb.fi Git - builder.git/blob - source/package.cpp
Reorder class members
[builder.git] / source / package.cpp
1 /* $Id$
2
3 This file is part of builder
4 Copyright © 2006-2007, 2009  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 Package::Package(Builder &b, const string &n):
20         builder(b),
21         name(n),
22         conf_done(false),
23         use_pkgconfig(true)
24 { }
25
26 PackageList Package::collect_requires()
27 {
28         PackageList result;
29         result.push_back(this);
30         for(PackageList::const_iterator i=requires.begin(); i!=requires.end(); ++i)
31         {
32                 PackageList r=(*i)->collect_requires();
33                 result.splice(result.end(), r);
34         }
35
36         result.sort();
37         result.unique();
38
39         return result;
40 }
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         requires.sort();
53         requires.unique();
54
55         for(PackageList::iterator i=requires.begin(); i!=requires.end(); ++i)
56                 (*i)->configure(opts, flag&2);
57
58         create_build_info();
59
60         conf_done=true;
61 }
62
63
64 Package::Loader::Loader(Package &p):
65         pkg(p)
66 {
67         add("require", &Loader::require);
68 }
69
70 void Package::Loader::require(const string &n)
71 {
72         Package *req=pkg.builder.get_package(n);
73         if(req)
74                 pkg.requires.push_back(req);
75 }