X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildinfo.cpp;h=e2df34c06e3ec91cb56500f97c3bed1b53b23d02;hb=HEAD;hp=8143235380b9ecb81059338066e9032149c1f4d3;hpb=0d2231ad2cfa7f08c7962be8ad5df789146b1a20;p=builder.git diff --git a/source/buildinfo.cpp b/source/buildinfo.cpp deleted file mode 100644 index 8143235..0000000 --- a/source/buildinfo.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include -#include -#include "buildinfo.h" - -using namespace std; -using namespace Msp; - -namespace { - -/** Removes any duplicate entries from a list, leaving only the first one. The -order of other elements is preserved. O(nlogn) efficiency. */ -template -void unique(list &l) -{ - set seen; - for(typename list::iterator i=l.begin(); i!=l.end(); ) - { - if(seen.count(*i)) - l.erase(i++); - else - seen.insert(*i++); - } -} - -} - - -BuildInfo::BuildInfo(): - libmode(DYNAMIC), - threads(false), - debug(false), - optimize(0), - strip(false), - warning_level(0), - fatal_warnings(false) -{ } - -BuildInfo::LibraryMode BuildInfo::get_libmode_for(const string &lib) const -{ - LibModeMap::const_iterator i = libmodes.find(lib); - if(i!=libmodes.end()) - return i->second; - return libmode; -} - -void BuildInfo::update_from(const BuildInfo &bi, UpdateLevel level) -{ - for(DefineMap::const_iterator i=bi.defines.begin(); i!=bi.defines.end(); ++i) - defines[i->first] = i->second; - incpath.insert(incpath.begin(), bi.incpath.begin(), bi.incpath.end()); - if(level!=CHAINED) - { - libpath.insert(libpath.begin(), bi.libpath.begin(), bi.libpath.end()); - libs.insert(libs.begin(), bi.libs.begin(), bi.libs.end()); - for(StandardMap::const_iterator i=bi.standards.begin(); i!=bi.standards.end(); ++i) - standards[i->first] = i->second; - } - threads = bi.threads; - if(level==LOCAL) - { - sysroot = bi.sysroot; - local_incpath.insert(local_incpath.begin(), bi.local_incpath.begin(), bi.local_incpath.end()); - libmode = bi.libmode; - for(LibModeMap::const_iterator i=bi.libmodes.begin(); i!=bi.libmodes.end(); ++i) - libmodes[i->first] = i->second; - keep_symbols.insert(keep_symbols.end(), bi.keep_symbols.begin(), bi.keep_symbols.end()); - debug = bi.debug; - optimize = bi.optimize; - strip = bi.strip; - warning_level = bi.warning_level; - fatal_warnings = bi.fatal_warnings; - } - - unique(incpath); - unique(libpath); - unique(libs); -} - - -BuildInfo::Loader::Loader(BuildInfo &bi): - DataFile::ObjectLoader(bi) -{ - add("debug", &BuildInfo::debug); - add("define", &Loader::define); - add("incpath", &Loader::incpath); - add("keep_symbol", &Loader::keep_symbol); - add("libpath", &Loader::libpath); - add("library", &Loader::library); - add("libmode", &BuildInfo::libmode); - add("libmode", &Loader::libmode_for_lib); - add("local_incpath", &Loader::local_incpath); - add("optimize", &BuildInfo::optimize); - add("standard", &Loader::standard); - add("strip", &BuildInfo::strip); - add("sysroot", &Loader::sysroot); - add("threads", &BuildInfo::threads); - add("warning_level", &BuildInfo::warning_level); - add("fatal_warnings", &BuildInfo::fatal_warnings); -} - -void BuildInfo::Loader::incpath(const string &s) -{ - obj.incpath.push_back(s); -} - -void BuildInfo::Loader::define(const string &d, const string &v) -{ - obj.defines[d] = v; -} - -void BuildInfo::Loader::keep_symbol(const string &s) -{ - obj.keep_symbols.push_back(s); -} - -void BuildInfo::Loader::libmode_for_lib(const string &l, LibraryMode m) -{ - obj.libmodes[l] = m; -} - -void BuildInfo::Loader::libpath(const string &s) -{ - obj.libpath.push_back(s); -} - -void BuildInfo::Loader::library(const string &s) -{ - obj.libs.push_back(s); -} - -void BuildInfo::Loader::local_incpath(const string &s) -{ - obj.local_incpath.push_back(s); -} - -void BuildInfo::Loader::standard(DataFile::Symbol tag, const string &std) -{ - obj.standards[tag.name] = std; -} - -void BuildInfo::Loader::sysroot(const string &s) -{ - obj.sysroot = s; -} - - -void operator>>(const LexicalConverter &conv, BuildInfo::LibraryMode &libmode) -{ - if(conv.get()=="FORCE_STATIC") - libmode = BuildInfo::FORCE_STATIC; - else if(conv.get()=="STATIC") - libmode = BuildInfo::STATIC; - else if(conv.get()=="DYNAMIC") - libmode = BuildInfo::DYNAMIC; - else if(conv.get()=="FORCE_DYNAMIC") - libmode = BuildInfo::FORCE_DYNAMIC; - else - throw lexical_error(format("Conversion of '%s' to LibraryMode", conv.get())); -}