X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=37508b056ef21f946592334a1078dcb5b7ab4341;hb=d1f9551e05c9d341149eb490e05b1465d3d6b711;hp=355108fb2c35bcd26f5c012c107dc4d587703212;hpb=74266a6e650f019063cdcd1c9a7bd26d8f99041b;p=builder.git diff --git a/source/config.h b/source/config.h index 355108f..37508b0 100644 --- a/source/config.h +++ b/source/config.h @@ -3,11 +3,12 @@ #include #include -#include -#include +#include +#include #include +#include "feature.h" -typedef std::map RawOptionMap; +class SourcePackage; /** Manages configuration for a package. A configuration may have an arbitary @@ -16,41 +17,50 @@ amount of options, as well as a modification time (mtime). class Config { public: - /** - A single configuration option. - */ - struct Option + /** A single configuration option. */ + struct Option: public Feature { - std::string name; - std::string defv; - std::string descr; std::string value; - Option(const std::string &, const std::string &, const std::string &); + Option(const Feature &); }; - typedef std::map OptionMap; - void add_option(const std::string &, const std::string &, const std::string &); - const Option &get_option(const std::string &) const; - const OptionMap &get_options() const { return options; } - const Msp::Time::TimeStamp &get_mtime() const { return mtime; } - bool is_option(const std::string &) const; - bool process(const RawOptionMap &); - void load(const Msp::Path::Path &); - void save(const Msp::Path::Path &) const; + using InputOptions = std::map; + private: - class Loader: public Msp::Parser::Loader + class Loader: public Msp::DataFile::ObjectLoader { public: Loader(Config &); private: - Config &conf; - void option(const std::string &, const std::string &); }; - - OptionMap options; + + SourcePackage &package; + std::map options; + InputOptions pending_options; Msp::Time::TimeStamp mtime; + mutable bool changed = false; + +public: + Config(SourcePackage &); + + /** Adds a configuration option based on a feature. */ + const Option &add_option(const Feature &); + + bool set_option(const std::string &, const std::string &); + + /** Checks whether an option exists. */ + bool is_option(const std::string &) const; + + /** Gets a configuration option by name. */ + const Option &get_option(const std::string &) const; + + const std::map &get_options() const { return options; } + const Msp::Time::TimeStamp &get_mtime() const { return mtime; } + + void load(); + void save() const; }; #endif