From 7a96e3b0a4bb573bb26ca8ff93b97900bdb486b3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 22 Apr 2021 14:59:42 +0200 Subject: Add install directory substitution in addition to --- doc/manual.cli | 6 +++--- libbuild2/install/init.cxx | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/doc/manual.cli b/doc/manual.cli index 3ee3016..b12fa84 100644 --- a/doc/manual.cli +++ b/doc/manual.cli @@ -5901,9 +5901,9 @@ man share/man/ install.man man man/man/ install.man \ -The \c{} and \c{} substitutions in these -\c{config.install.*} values are replaced with the project name and private -subdirectory, respectively. If either is empty, then the corresponding +The \c{}, \c{}, and \c{} substitutions in these +\c{config.install.*} values are replaced with the project name, version, and +private subdirectory, respectively. If either is empty, then the corresponding directory component is ignored. The optional private installation subdirectory (\c{}) mechanism can 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 (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; -- cgit v1.1