]> git.tdb.fi Git - builder.git/blob - source/binarypackage.cpp
Replace per-file copyright notices with a single file
[builder.git] / source / binarypackage.cpp
1 #include <msp/io/print.h>
2 #include <msp/strings/utils.h>
3 #include "binarypackage.h"
4 #include "builder.h"
5
6 using namespace std;
7 using namespace Msp;
8
9 BinaryPackage::BinaryPackage(Builder &b, const string &n):
10         Package(b, n),
11         need_path(false)
12 {
13         use_pkgconfig = false;
14 }
15
16 void BinaryPackage::set_path(const FS::Path &p)
17 {
18         path = builder.get_cwd()/p;
19 }
20
21 void BinaryPackage::create_build_info()
22 {
23         for(StringList::iterator i=export_binfo.incpath.begin(); i!=export_binfo.incpath.end(); ++i)
24                 if((*i)[0]=='@')
25                         *i = (path/i->substr(1)).str();
26
27         for(StringList::iterator i=export_binfo.libpath.begin(); i!=export_binfo.libpath.end(); ++i)
28                 if((*i)[0]=='@')
29                         *i = (path/i->substr(1)).str();
30 }
31
32 BinaryPackage *BinaryPackage::from_pkgconfig(Builder &builder, const string &name)
33 {
34         string info = builder.run_pkgconfig(name, "flags");
35
36         BinaryPackage *pkg = new BinaryPackage(builder, name);
37         pkg->use_pkgconfig = true;
38         BuildInfo &binfo = pkg->export_binfo;
39
40         vector<string> flags = split(info);
41         for(vector<string>::const_iterator i=flags.begin(); i!=flags.end(); ++i)
42         {
43                 if(!i->compare(0, 2, "-I"))
44                         binfo.incpath.push_back(i->substr(2));
45                 else if(!i->compare(0, 2, "-D"))
46                         binfo.defines.push_back(i->substr(2));
47                 else if(!i->compare(0, 2, "-L"))
48                         binfo.libpath.push_back(i->substr(2));
49                 else if(!i->compare(0, 2, "-l"))
50                         binfo.libs.push_back(i->substr(2));
51         }
52
53         return pkg;
54 }
55
56
57 BinaryPackage::Loader::Loader(BinaryPackage &p):
58         Package::Loader(p)
59 {
60         add("need_path", &BinaryPackage::need_path);
61         add("build_info", &Loader::build_info);
62 }
63
64 void BinaryPackage::Loader::build_info()
65 {
66         load_sub(static_cast<BinaryPackage &>(pkg).export_binfo);
67 }