X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farchitecture.cpp;h=847711e351c3c7fc47ff93b60494e539f8c4c4b3;hb=8ee4fd693c8d15265f0c145221737a322f89618b;hp=a416551f23312b74febc418f2c4e41b7f9a5049e;hpb=be6c1ae1dcc97cb3e3019c0384f1bc933fcd321c;p=builder.git diff --git a/source/architecture.cpp b/source/architecture.cpp index a416551..847711e 100644 --- a/source/architecture.cpp +++ b/source/architecture.cpp @@ -16,6 +16,7 @@ const char *types[] = { "pc", "arm", + "ppc", 0 }; @@ -41,16 +42,20 @@ const char *systems[] = { "linux", "freebsd", + "darwin", "windows", + "android", 0 }; const char *aliases[] = { + "x86", "pc", "i586", "pentium", "i686", "pentiumpro", "x86_64", "athlon64", "win32", "windows", + "power macintosh", "ppc", 0 }; @@ -84,8 +89,6 @@ Architecture::Architecture(Builder &b, const string &spec): const Architecture &native_arch = builder.get_native_arch(); if(type.empty()) type = native_arch.type; - if(cpu.empty()) - cpu = native_arch.cpu; if(system.empty()) system = native_arch.system; if(!bits) @@ -110,35 +113,36 @@ 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("%")); } } -void Architecture::set_cross_prefix(const string &p) -{ - cross_prefix = p; -} - 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 @@ -199,7 +203,7 @@ void Architecture::parse_specification(const string &spec) Architecture::Loader::Loader(Architecture &a): - arch(a) + DataFile::ObjectLoader(a) { add("prefix", &Architecture::cross_prefix); }