-#ifndef BUILDINFO_H_
-#define BUILDINFO_H_
-
-#include <list>
-#include <string>
-#include <msp/datafile/objectloader.h>
-#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:
- enum LibraryMode
- {
- FORCE_STATIC, //< Only accept static libraries
- STATIC, //< Prefer static libraries but accept dynamic as well
- DYNAMIC, //< Prefer dynamic libraries but accept static as well
- FORCE_DYNAMIC //< Only accept dynamic libraries
- };
-
- class Loader: public Msp::DataFile::ObjectLoader<BuildInfo>
- {
- public:
- Loader(BuildInfo &);
- private:
- void incpath(const std::string &);
- void define(const std::string &, const std::string &);
- void libpath(const std::string &);
- void library(const std::string &);
- };
-
- enum UpdateLevel
- {
- LOCAL, //< Include all information
- DEPENDENCY, //< Include all but code generation options
- CHAINED //< Include only compilation options
- };
-
- typedef std::map<std::string, std::string> DefineMap;
- typedef std::list<Msp::FS::Path> PathList;
- typedef std::list<std::string> WordList;
-
- DefineMap defines;
- PathList incpath;
- PathList libpath;
- WordList libs;
- LibraryMode libmode;
- bool threads;
- bool debug;
- int optimize;
- bool strip;
- unsigned warning_level;
- bool fatal_warnings;
-
- 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:
- /** 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