]> git.tdb.fi Git - builder.git/blob - source/package.cpp
Use mspio for all I/O operations
[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/io/print.h>
9 #include <msp/strings/lexicalcast.h>
10 #include <msp/strings/utils.h>
11 #include "builder.h"
12 #include "misc.h"
13 #include "package.h"
14
15 using namespace std;
16 using namespace Msp;
17
18 Package::Package(Builder &b, const string &n):
19         builder(b),
20         name(n),
21         conf_done(false),
22         use_pkgconfig(true)
23 { }
24
25 PackageList Package::collect_requires()
26 {
27         PackageList result;
28         result.push_back(this);
29         for(PackageList::const_iterator i=requires.begin(); i!=requires.end(); ++i)
30         {
31                 PackageList r=(*i)->collect_requires();
32                 result.splice(result.end(), r);
33         }
34
35         result.sort();
36         result.unique();
37
38         return result;
39 }
40
41 void Package::configure(const StringMap &opts, unsigned flag)
42 {
43         if(conf_done)
44                 return;
45
46         if(builder.get_verbose()>=3)
47                 IO::print("Configuring %s\n", name);
48
49         do_configure(opts, flag);
50
51         requires.sort();
52         requires.unique();
53
54         for(PackageList::iterator i=requires.begin(); i!=requires.end(); ++i)
55                 (*i)->configure(opts, flag&2);
56
57         create_build_info();
58
59         conf_done=true;
60 }
61
62
63 Package::Loader::Loader(Package &p):
64         pkg(p)
65 {
66         add("require", &Loader::require);
67 }
68
69 void Package::Loader::require(const string &n)
70 {
71         Package *req=pkg.builder.get_package(n);
72         if(req)
73                 pkg.requires.push_back(req);
74 }