aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/context.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2020-03-18 08:25:19 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2020-03-18 08:25:19 +0200
commit7d0c4c5ab6760e4487230f9eda87c352609be553 (patch)
treecec71d00d5186aa6aa03244b143858d5bb2f54de /libbuild2/context.cxx
parentee36f1d58484479a2fa3547fad1eb1cc34c51c3e (diff)
Pattern-type config.** variables with global visibility by default
Diffstat (limited to 'libbuild2/context.cxx')
-rw-r--r--libbuild2/context.cxx85
1 files changed, 42 insertions, 43 deletions
diff --git a/libbuild2/context.cxx b/libbuild2/context.cxx
index 827894b..724a16e 100644
--- a/libbuild2/context.cxx
+++ b/libbuild2/context.cxx
@@ -476,65 +476,64 @@ namespace build2
// Enter builtin variables and patterns.
//
+ const auto v_g (variable_visibility::normal); // Global.
+ const auto v_p (variable_visibility::project);
+ const auto v_t (variable_visibility::target);
+ const auto v_q (variable_visibility::prereq);
- // All config.* variables are by default overridable.
+ // All config.** variables are by default overridable with global
+ // visibility.
//
- vp.insert_pattern ("config.**", nullopt, true, nullopt, true, false);
+ // For the config.**.configured semantics, see config::unconfigured().
+ //
+ vp.insert_pattern ("config.**", nullopt, true, v_g, true, false);
+ vp.insert_pattern<bool> ("config.**.configured", false, v_p);
// file.cxx:import() (note that order is important; see insert_pattern()).
//
- vp.insert_pattern<abs_dir_path> (
- "config.import.*", true, variable_visibility::normal, true);
- vp.insert_pattern<path> (
- "config.import.**", true, variable_visibility::normal, true);
+ vp.insert_pattern<abs_dir_path> ("config.import.*", true, v_g, true);
+ vp.insert_pattern<path> ("config.import.**", true, v_g, true);
// module.cxx:boot/init_module().
//
- {
- auto v_p (variable_visibility::project);
-
- vp.insert_pattern<bool> ("**.booted", false, v_p);
- vp.insert_pattern<bool> ("**.loaded", false, v_p);
- vp.insert_pattern<bool> ("**.configured", false, v_p);
- }
-
- {
- auto v_p (variable_visibility::project);
- auto v_t (variable_visibility::target);
- auto v_q (variable_visibility::prereq);
+ // Note that we also have the config.<module>.configured variable (see
+ // above).
+ //
+ vp.insert_pattern<bool> ("**.booted", false /* overridable */, v_p);
+ vp.insert_pattern<bool> ("**.loaded", false, v_p);
+ vp.insert_pattern<bool> ("**.configured", false, v_p);
- var_src_root = &vp.insert<dir_path> ("src_root");
- var_out_root = &vp.insert<dir_path> ("out_root");
- var_src_base = &vp.insert<dir_path> ("src_base");
- var_out_base = &vp.insert<dir_path> ("out_base");
+ var_src_root = &vp.insert<dir_path> ("src_root");
+ var_out_root = &vp.insert<dir_path> ("out_root");
+ var_src_base = &vp.insert<dir_path> ("src_base");
+ var_out_base = &vp.insert<dir_path> ("out_base");
- var_forwarded = &vp.insert<bool> ("forwarded", v_p);
+ var_forwarded = &vp.insert<bool> ("forwarded", v_p);
- // Note that subprojects is not typed since the value requires
- // pre-processing (see file.cxx).
- //
- var_project = &vp.insert<project_name> ("project", v_p);
- var_amalgamation = &vp.insert<dir_path> ("amalgamation", v_p);
- var_subprojects = &vp.insert ("subprojects", v_p);
- var_version = &vp.insert<string> ("version", v_p);
+ // Note that subprojects is not typed since the value requires
+ // pre-processing (see file.cxx).
+ //
+ var_project = &vp.insert<project_name> ("project", v_p);
+ var_amalgamation = &vp.insert<dir_path> ("amalgamation", v_p);
+ var_subprojects = &vp.insert ("subprojects", v_p);
+ var_version = &vp.insert<string> ("version", v_p);
- var_project_url = &vp.insert<string> ("project.url", v_p);
- var_project_summary = &vp.insert<string> ("project.summary", v_p);
+ var_project_url = &vp.insert<string> ("project.url", v_p);
+ var_project_summary = &vp.insert<string> ("project.summary", v_p);
- var_import_target = &vp.insert<name> ("import.target");
+ var_import_target = &vp.insert<name> ("import.target");
- var_extension = &vp.insert<string> ("extension", v_t);
- var_clean = &vp.insert<bool> ("clean", v_t);
- var_backlink = &vp.insert<string> ("backlink", v_t);
- var_include = &vp.insert<string> ("include", v_q);
+ var_extension = &vp.insert<string> ("extension", v_t);
+ var_clean = &vp.insert<bool> ("clean", v_t);
+ var_backlink = &vp.insert<string> ("backlink", v_t);
+ var_include = &vp.insert<string> ("include", v_q);
- // Backlink executables and (generated) documentation by default.
- //
- gs.target_vars[exe::static_type]["*"].assign (var_backlink) = "true";
- gs.target_vars[doc::static_type]["*"].assign (var_backlink) = "true";
+ // Backlink executables and (generated) documentation by default.
+ //
+ gs.target_vars[exe::static_type]["*"].assign (var_backlink) = "true";
+ gs.target_vars[doc::static_type]["*"].assign (var_backlink) = "true";
- var_build_meta_operation = &vp.insert<string> ("build.meta_operation");
- }
+ var_build_meta_operation = &vp.insert<string> ("build.meta_operation");
// Register builtin rules.
//