aboutsummaryrefslogtreecommitdiff
path: root/build2/context.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2018-04-23 14:25:58 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2018-04-26 09:38:09 +0200
commitf98262e37f608330fcfce799dcacc6fbacac8f8a (patch)
tree080ef26d80ee6419ef3a2f27434d75136f502cb2 /build2/context.cxx
parentc414abe13450e2b4e204f6368ba83c8916de1ebd (diff)
Implement forwarded configurations and backlinking
Diffstat (limited to 'build2/context.cxx')
-rw-r--r--build2/context.cxx48
1 files changed, 28 insertions, 20 deletions
diff --git a/build2/context.cxx b/build2/context.cxx
index b669ae6..2ebe163 100644
--- a/build2/context.cxx
+++ b/build2/context.cxx
@@ -326,6 +326,7 @@ namespace build2
const variable* var_out_root;
const variable* var_src_base;
const variable* var_out_base;
+ const variable* var_forwarded;
const variable* var_project;
const variable* var_amalgamation;
@@ -338,6 +339,7 @@ namespace build2
const variable* var_import_target;
const variable* var_clean;
+ const variable* var_backlink;
const char var_extension[10] = "extension";
@@ -417,10 +419,6 @@ namespace build2
// may reference these things.
//
- // Target extension.
- //
- vp.insert<string> (var_extension, variable_visibility::target);
-
gs.assign<dir_path> ("build.work") = work;
gs.assign<dir_path> ("build.home") = home;
@@ -673,28 +671,38 @@ namespace build2
vp.insert_pattern<bool> (
"**.configured", false, variable_visibility::project);
- 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");
-
- // Note that subprojects is not typed since the value requires
- // pre-processing (see file.cxx).
- //
{
- auto pv (variable_visibility::project);
+ auto v_p (variable_visibility::project);
+ auto v_t (variable_visibility::target);
- var_project = &vp.insert<string> ("project", pv);
- var_amalgamation = &vp.insert<dir_path> ("amalgamation", pv);
- var_subprojects = &vp.insert ("subprojects", pv);
- var_version = &vp.insert<string> ("version", pv);
+ 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_project_url = &vp.insert<string> ("project.url", pv);
- var_project_summary = &vp.insert<string> ("project.summary", pv);
+ 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<string> ("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_import_target = &vp.insert<name> ("import.target");
- var_clean = &vp.insert<bool> ("clean", variable_visibility::target);
+ var_clean = &vp.insert<bool> ("clean", v_t);
+ var_backlink = &vp.insert<bool> ("backlink", v_t);
+ vp.insert<string> (var_extension, v_t);
+
+ // 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;
}
// Register builtin rules.