3 This file is part of builder
4 Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
8 #include <msp/strings/utils.h>
10 #include "sourcepackage.h"
15 Condition::Condition(SourcePackage &p, const string &expr):
18 vector<string> parts=split(expr);
20 for(vector<string>::iterator i=parts.begin(); i!=parts.end(); ++i)
25 unsigned token=i->find_first_of("=!");
26 if(token==string::npos)
27 expression.insert(StringMap::value_type(*i, "!0"));
28 else if(token==0 && (*i)[0]=='!')
29 expression.insert(StringMap::value_type(*i, "=0"));
31 expression.insert(StringMap::value_type(i->substr(0, token), i->substr(token)));
35 void Condition::resolve_refs()
37 for(PkgRefList::iterator i=requires.begin(); i!=requires.end(); ++i)
41 bool Condition::eval()
43 const Config &conf=pkg.get_config();
46 for(StringMap::iterator i=expression.begin(); i!=expression.end(); ++i)
48 bool neg=(i->second[0]=='!');
53 if((conf.get_option(i->first).value==i->second.substr(start))==neg)
61 Condition::Loader::Loader(Condition &c):
64 add("require", &Loader::require);
65 add("build_info", &Loader::build_info);
68 void Condition::Loader::require(const string &pkg)
70 cond.requires.push_back(PackageRef(cond.pkg.get_builder(), pkg));
73 void Condition::Loader::build_info()
75 load_sub(cond.build_info);