X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildinfo.cpp;h=e2df34c06e3ec91cb56500f97c3bed1b53b23d02;hb=HEAD;hp=b7f9c5cc0c9f8cdc54d21d574892adf37c419aad;hpb=6ed04f66e56958890c2ecca82fa3885f10f8adf0;p=builder.git diff --git a/source/buildinfo.cpp b/source/buildinfo.cpp deleted file mode 100644 index b7f9c5c..0000000 --- a/source/buildinfo.cpp +++ /dev/null @@ -1,115 +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) -{ } - -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.end(), bi.incpath.begin(), bi.incpath.end()); - if(level!=CHAINED) - { - libpath.insert(libpath.end(), bi.libpath.begin(), bi.libpath.end()); - libs.insert(libs.end(), bi.libs.begin(), bi.libs.end()); - } - threads = bi.threads; - if(level==LOCAL) - { - libmode = bi.libmode; - 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("libpath", &Loader::libpath); - add("library", &Loader::library); - add("libmode", &BuildInfo::libmode); - add("optimize", &BuildInfo::optimize); - add("strip", &BuildInfo::strip); - 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::libpath(const string &s) -{ - obj.libpath.push_back(s); -} - -void BuildInfo::Loader::library(const string &s) -{ - obj.libs.push_back(s); -} - - -void operator>>(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())); -}