X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcondition.cpp;fp=source%2Fcondition.cpp;h=0000000000000000000000000000000000000000;hb=1496723307ed47b60d3116623ba383e85b50efef;hp=413870e6cb20ab069374aa8781a5e7738f6cad2e;hpb=43d1143e6dc6bbf3797dbaae42d4bfce3dea5d88;p=builder.git diff --git a/source/condition.cpp b/source/condition.cpp deleted file mode 100644 index 413870e..0000000 --- a/source/condition.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include "builder.h" -#include "condition.h" -#include "sourcepackage.h" - -using namespace std; -using namespace Msp; - -Condition::Condition(SourcePackage &p, const string &expr): - pkg(p) -{ - vector parts = split(expr); - - for(vector::iterator i=parts.begin(); i!=parts.end(); ++i) - { - if(*i=="and") - continue; - - string::size_type token = i->find_first_of("=!"); - if(token==string::npos) - expression.insert(Expression::value_type(*i, "=")); - else if(token==0 && (*i)[0]=='!') - expression.insert(Expression::value_type(i->substr(1), "!")); - else - expression.insert(Expression::value_type(i->substr(0, token), i->substr(token))); - } -} - -bool Condition::eval() -{ - const Config &conf = pkg.get_config(); - - bool result = true; - for(Expression::iterator i=expression.begin(); i!=expression.end(); ++i) - { - bool neg = (i->second[0]=='!'); - unsigned start = 1; - if(i->second[1]=='=') - ++start; - string value = i->second.substr(start); - - bool match = false; - if(conf.is_option(i->first)) - { - if(value.empty()) - match = lexical_cast(conf.get_option(i->first).value); - else - match = (conf.get_option(i->first).value==value); - } - else if(i->first=="arch") - match = pkg.get_builder().get_current_arch().match_name(value); - - if(match==neg) - result = false; - } - - return result; -} - - -Condition::Loader::Loader(Condition &c): - DataFile::ObjectLoader(c) -{ - add("require", &Loader::require); - add("build_info", &Loader::build_info); -} - -void Condition::Loader::require(const string &pkg) -{ - obj.requires.push_back(pkg); -} - -void Condition::Loader::build_info() -{ - load_sub(obj.build_info); -}