aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/install
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-04-22 14:59:42 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2021-04-22 14:59:42 +0200
commit7a96e3b0a4bb573bb26ca8ff93b97900bdb486b3 (patch)
tree1006d034e6fd8f4fe6859571d34f6271158af2be /libbuild2/install
parent40863a594372ede117533d5c0970a96d60e34371 (diff)
Add <version> install directory substitution in addition to <project>
Diffstat (limited to 'libbuild2/install')
-rw-r--r--libbuild2/install/init.cxx25
1 files changed, 20 insertions, 5 deletions
diff --git a/libbuild2/install/init.cxx b/libbuild2/install/init.cxx
index 74e9301..14045e1 100644
--- a/libbuild2/install/init.cxx
+++ b/libbuild2/install/init.cxx
@@ -52,16 +52,31 @@ namespace build2
// Note: watch out for the small std::function optimization.
//
- auto subst = [prv, &rs] (const string& var, string& r)
+ struct data
{
- if (var == "project")
+ const dir_path* prv;
+ const dir_path& val;
+ const variable& var;
+ } d {prv, val, var};
+
+ auto subst = [&d, &rs] (const string& n, string& r)
+ {
+ if (n == "project")
{
r += project (rs).string ();
}
- else if (var == "private")
+ else if (n == "version")
+ {
+ if (const auto* v = cast_null<string> (rs.vars[rs.ctx.var_version]))
+ r += *v;
+ else
+ fail << "no version variable in project " << project (rs) <<
+ info << "required in " << d.var << " value '" << d.val << "'";
+ }
+ else if (n == "private")
{
- if (prv != nullptr && !prv->empty ())
- r += prv->string ();
+ if (d.prv != nullptr && !d.prv->empty ())
+ r += d.prv->string ();
}
else
return false;