X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farchitecture.cpp;h=48c6a204b17fc43220086ca207c68817739c9179;hb=564160e126f525dda52f27044d29b479088da191;hp=2efcd5e3e4ee23dc9294cfb04f261ab06ce8f1c8;hpb=8b133e26e29abbe79886c47d57637eb18ea9cb24;p=builder.git diff --git a/source/architecture.cpp b/source/architecture.cpp index 2efcd5e..48c6a20 100644 --- a/source/architecture.cpp +++ b/source/architecture.cpp @@ -177,7 +177,7 @@ Architecture::Architecture(Builder &b, const string &spec): } } -bool Architecture::match_name(const string &pattern) const +bool Architecture::match_name(const string &pattern, unsigned *quality) const { bool negate = (pattern[0]=='!'); vector parts = split(pattern.substr(negate), "-"); @@ -187,31 +187,32 @@ bool Architecture::match_name(const string &pattern) const if((p=="32" && bits==32) || (p=="64" && bits==64)) ; else if(p!=type && p!=cpu && p!=fpu && p!=system && p!=toolchain) + { + if(quality) + *quality = 0; return negate; + } } + + if(quality) + *quality = parts.size(); return !negate; } string Architecture::best_match(const vector &names) const { string best; - unsigned best_size = 0; + unsigned best_quality = 0; for(const string &n: names) - if(match_name(n)) - { - /* TODO Do full parse and alias resolution here? Otherwise x86 and - x86_64 are treated as equally good, even though the latter is more - specific. */ - unsigned size = 1; - for(char c: n) - size += (c=='-'); - - if(size>best_size) + { + unsigned quality; + if(match_name(n, &quality)) + if(quality>best_quality) { best = n; - best_size = size; + best_quality = quality; } - } + } return best; }