X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farchitecture.cpp;h=3905f40c872dcb7f04e6c05ed72a970dde31f2dd;hb=6e02286dcbd62b8f5ef56987c2298d54b689ad9c;hp=efe9c732dd707696d3d74610e340065c480960f2;hpb=88a344b29ab173cd6ecacd0b038ea96dcb7484fc;p=builder.git diff --git a/source/architecture.cpp b/source/architecture.cpp index efe9c73..3905f40 100644 --- a/source/architecture.cpp +++ b/source/architecture.cpp @@ -41,6 +41,7 @@ const char *systems[] = { "linux", "freebsd", + "darwin", "windows", 0 }; @@ -108,13 +109,18 @@ Architecture::Architecture(Builder &b, const string &spec): { sharedlib_patterns.push_back(Pattern("%.dll")); sharedlib_patterns.push_back(Pattern("lib%.dll")); + /* XXX Hack: Consider import libraries (*.dll.a) as dynamic libraries, + even though technically they are linked statically. */ + sharedlib_patterns.push_back(Pattern("lib%.dll.a")); staticlib_patterns.push_back(Pattern("lib%.a")); - staticlib_patterns.push_back(Pattern("lib%.dll.a")); executable_patterns.push_back(Pattern("%.exe")); } else { - sharedlib_patterns.push_back(Pattern("lib%.so")); + if(system=="darwin") + sharedlib_patterns.push_back(Pattern("lib%.dylib")); + else + sharedlib_patterns.push_back(Pattern("lib%.so")); staticlib_patterns.push_back(Pattern("lib%.a")); executable_patterns.push_back(Pattern("%")); } @@ -122,16 +128,17 @@ Architecture::Architecture(Builder &b, const string &spec): bool Architecture::match_name(const string &pattern) const { - vector parts = split(pattern, "-"); + bool negate = (pattern[0]=='!'); + vector parts = split(pattern.substr(negate), "-"); for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) { string part = resolve_alias(*i); if((part=="32" && bits==32) || (part=="64" && bits==64)) ; else if(part!=type && part!=cpu && part!=system) - return false; + return negate; } - return true; + return !negate; } string Architecture::resolve_alias(const string &part) const