aboutsummaryrefslogtreecommitdiff
path: root/build/config
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-12-03 14:37:22 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-12-03 14:37:22 +0200
commit29f8159583d2b02efa2afeaa58082f57222c943d (patch)
tree1fa520de084c6c0dacc8af6525b58b294f1e9eae /build/config
parent772b1e013bb0068d7347d0bbe2ff73c67358ee1b (diff)
Add ability for module to remember that it is unconfigured
A module can set and then check the config.*.configured special variable to false.
Diffstat (limited to 'build/config')
-rw-r--r--build/config/operation.cxx15
-rw-r--r--build/config/utility17
-rw-r--r--build/config/utility.cxx15
3 files changed, 35 insertions, 12 deletions
diff --git a/build/config/operation.cxx b/build/config/operation.cxx
index 295a38a..abe4e22 100644
--- a/build/config/operation.cxx
+++ b/build/config/operation.cxx
@@ -101,13 +101,24 @@ namespace build
{
const variable& var (p.first->first);
const value& val (p.first->second);
+ const string& n (var.name);
// Skip special variables.
//
- if (var.name == "config.loaded" ||
- var.name == "config.configured")
+ if (n == "config.loaded" ||
+ n == "config.configured")
continue;
+ // We will only write config.*.configured if it is false
+ // (true is implied by its absence).
+ //
+ if (n.size () > 11 &&
+ n.compare (n.size () - 11, 11, ".configured") == 0)
+ {
+ if (val == nullptr || as<bool> (val))
+ continue;
+ }
+
// Warn the user if the value that we are saving differs
// from the one they specified on the command line.
//
diff --git a/build/config/utility b/build/config/utility
index ece7a88..ee5f50b 100644
--- a/build/config/utility
+++ b/build/config/utility
@@ -83,13 +83,16 @@ namespace build
return optional_absolute (root, var_pool.find (var));
}
- // Check whether there are any variables specified from the
- // config namespace. The idea is that we can check if there
- // are any, say, config.install.* values. If there are none,
- // then we can assume this functionality is not (yet) used
- // and omit writing a whole bunch of NULL config.install.*
- // values to the config.build file . We call it omitted/
- // delayed configuration.
+ // Check whether there are any variables specified from the config
+ // namespace. The idea is that we can check if there are any, say,
+ // config.install.* values. If there are none, then we can assume
+ // this functionality is not (yet) used and omit writing a whole
+ // bunch of NULL config.install.* values to the config.build file.
+ // We call it omitted/delayed configuration.
+ //
+ // Note that this function detects and ignores the special
+ // config.*.configured variable which may be used by a module to
+ // "remember" that it is unconfigured.
//
bool
specified (scope& root, const std::string& ns);
diff --git a/build/config/utility.cxx b/build/config/utility.cxx
index c9d7c66..b81cb04 100644
--- a/build/config/utility.cxx
+++ b/build/config/utility.cxx
@@ -60,9 +60,18 @@ namespace build
//
for (scope* s (&r); s != nullptr; s = s->parent_scope ())
{
- auto p (s->vars.find_namespace (ns));
- if (p.first != p.second)
- return true;
+ for (auto p (s->vars.find_namespace (ns));
+ p.first != p.second;
+ ++p.first)
+ {
+ const variable& var (p.first->first);
+
+ // Ignore config.*.configured.
+ //
+ if (var.name.size () < 11 ||
+ var.name.compare (var.name.size () - 11, 11, ".configured") != 0)
+ return true;
+ }
}
return false;