]> git.tdb.fi Git - builder.git/commitdiff
Base config options directly on features
authorMikko Rasa <tdb@tdb.fi>
Wed, 25 Sep 2013 11:54:46 +0000 (14:54 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 25 Sep 2013 11:54:46 +0000 (14:54 +0300)
There are no standalone options anymore, so might as well streamline
things a bit.

source/config.cpp
source/config.h
source/feature.cpp
source/feature.h
source/sourcepackage.cpp

index 75784e370d19525bef4e391ffd15d80ff873279a..69abe9d0b51b929d84a50ee08f3e9d7ef2bbb673 100644 (file)
@@ -16,12 +16,14 @@ Config::Config(SourcePackage &p):
        changed(false)
 { }
 
-void Config::add_option(const string &n, const string &v, const string &d)
+const Config::Option &Config::add_option(const Feature &f)
 {
-       Option opt(n, v, d);
-       if(pending_options.count(n))
-               opt.value = pending_options[n];
-       options.insert(OptionMap::value_type(n, opt));
+       Option opt(f);
+       InputOptions::const_iterator i = pending_options.find(opt.name);
+       if(i!=pending_options.end())
+               opt.value = i->second;
+
+       return options.insert(OptionMap::value_type(opt.name, opt)).first->second;
 }
 
 bool Config::set_option(const string &opt, const string &val)
@@ -85,12 +87,12 @@ void Config::save() const
 }
 
 
-Config::Option::Option(const string &n, const string &v, const string &d):
-       name(n),
-       default_value(v),
-       description(d),
-       value(v)
-}
+Config::Option::Option(const Feature &f):
+       Feature(f),
+       value(default_value)
+{
+       name = "with_"+name;
+}
 
 
 Config::Loader::Loader(Config &c):
index 94997750b26497c4ab83003f41382b78b13104fb..1f7fa712839f5b5bdc346681e3a346c117aafba4 100644 (file)
@@ -6,6 +6,7 @@
 #include <msp/datafile/loader.h>
 #include <msp/fs/path.h>
 #include <msp/time/timestamp.h>
+#include "feature.h"
 
 class SourcePackage;
 
@@ -17,14 +18,11 @@ class Config
 {
 public:
        /** A single configuration option. */
-       struct Option
+       struct Option: public Feature
        {
-               std::string name;
-               std::string default_value;
-               std::string description;
                std::string value;
 
-               Option(const std::string &, const std::string &, const std::string &);
+               Option(const Feature &);
        };
 
        typedef std::map<std::string, Option> OptionMap;
@@ -48,8 +46,8 @@ private:
 public:
        Config(SourcePackage &);
 
-       /** Adds a configuration option with name, default value and description. */
-       void add_option(const std::string &, const std::string &, const std::string &);
+       /** Adds a configuration option based on a feature. */
+       const Option &add_option(const Feature &);
 
        bool set_option(const std::string &, const std::string &);
 
index 5f0ea5f42ee26b8e982184f757bd2d2142f4238b..a483482c55e0a330c36a188a534f037d74fc08bf 100644 (file)
@@ -3,6 +3,6 @@
 Feature::Loader::Loader(Feature &f):
        Msp::DataFile::ObjectLoader<Feature>(f)
 {
-       add("description", &Feature::descr);
-       add("default",     &Feature::def_value);
+       add("description", &Feature::description);
+       add("default",     &Feature::default_value);
 }
index 8d496b33849e452cb71d7e0274d79eec1d166a73..3c13a5a01c5fdb3990a9d81eb85b623e25f2686c 100644 (file)
@@ -12,8 +12,8 @@ struct Feature
        };
 
        std::string name;
-       std::string descr;
-       std::string def_value;
+       std::string description;
+       std::string default_value;
 
        Feature(const std::string &n): name(n) { }
 };
index e5a2fa70cdee47934441d4471335d4dbc9638901..515841dd2ee7f5257851c6af5d9ca00305d3a749 100644 (file)
@@ -188,17 +188,17 @@ void SourcePackage::Loader::finish()
 void SourcePackage::Loader::feature(const string &n, const string &d)
 {
        Feature feat(n);
-       feat.descr = d;
-       feat.def_value = "no";
+       feat.description = d;
+       feat.default_value = "no";
        load_sub(feat);
        obj.features.push_back(feat);
-       string config_key = "with_"+feat.name;
-       obj.config.add_option(config_key, feat.def_value, feat.descr);
+
+       const Config::Option &opt = obj.config.add_option(feat);
        if(options)
        {
-               Config::InputOptions::const_iterator i = options->find(config_key);
+               Config::InputOptions::const_iterator i = options->find(opt.name);
                if(i!=options->end())
-                       obj.config.set_option(config_key, i->second);
+                       obj.config.set_option(opt.name, i->second);
        }
 }