X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildinfo.h;h=144a16dabb0e1e3215290745566b827bb63b220e;hb=30b1243ff16b908ae18b4ab9d70f772c9196b949;hp=ccd4b86798db7cc4a8c96eafffaef56c0ea82f82;hpb=1a46151c99a406123c4ddfc797a7841baf3e4cc2;p=builder.git diff --git a/source/buildinfo.h b/source/buildinfo.h index ccd4b86..144a16d 100644 --- a/source/buildinfo.h +++ b/source/buildinfo.h @@ -3,38 +3,61 @@ #include #include -#include +#include #include "misc.h" +/** +Stores information about compiler command line parameters in a more abstract +form. Allows combining with other BuildInfos to support package dependencies. +*/ class BuildInfo { public: - class Loader: public Msp::Parser::Loader + class Loader: public Msp::DataFile::ObjectLoader { public: Loader(BuildInfo &); private: - BuildInfo &binfo; - - void cflag(const std::string &s) { binfo.cflags.push_back(s); } - void incpath(const std::string &s) { binfo.incpath.push_back(s); } - void define(const std::string &s) { binfo.defines.push_back(s); } - void ldflag(const std::string &s) { binfo.ldflags.push_back(s); } - void libpath(const std::string &s) { binfo.libpath.push_back(s); } - void library(const std::string &s) { binfo.libs.push_back(s); } + void incpath(const std::string &); + void define(const std::string &, const std::string &); + void libpath(const std::string &); + void library(const std::string &); + void warning(const std::string &); }; - StringList cflags; - StringList defines; - StringList incpath; - StringList ldflags; - StringList libpath; - StringList libs; - - void add(const BuildInfo &); - void unique(); + enum UpdateLevel + { + LOCAL, //< Include all information + DEPENDENCY, //< Include all but code generation options + CHAINED //< Include only compilation options + }; + + typedef std::map DefineMap; + typedef std::list PathList; + typedef std::list WordList; + + DefineMap defines; + PathList incpath; + PathList libpath; + WordList libs; + WordList warnings; + bool threads; + bool debug; + int optimize; + bool strip; + + BuildInfo(); + + /** Updates the BuildInfo from another one. Lists are concatenated, with + the first occurrence of each item preserved. Scalars are overwritten. + + The update level determines what information is updated. */ + void update_from(const BuildInfo &, UpdateLevel = LOCAL); + private: - void unique(StringList &); + /** Makes sure there are no duplicate entries in the lists. For warnings, + contradicting flags are eliminated and the last one stays in effect. */ + void unique(); }; #endif