From 3b0df49b8828921edfb7b764b0628fb164dab852 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 9 Nov 2017 13:33:06 +0200 Subject: Initial support for prerequisite-specific variables, use for bin.whole --- build2/prerequisite.hxx | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'build2/prerequisite.hxx') diff --git a/build2/prerequisite.hxx b/build2/prerequisite.hxx index 77d96bf..eef91e6 100644 --- a/build2/prerequisite.hxx +++ b/build2/prerequisite.hxx @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -82,6 +83,23 @@ namespace build2 // mutable atomic target {nullptr}; + // Prerequisite-specific variables. + // + public: + variable_map vars; + + // Return a value suitable for assignment. See target for details. + // + value& + assign (const variable& var) {return vars.assign (var);} + + // Return a value suitable for appending. See target for details. Note + // that we have to explicitly pass the target that this prerequisite + // belongs to. + // + value& + append (const variable&, const target_type&); + public: prerequisite (optional p, const target_type_type& t, @@ -96,7 +114,8 @@ namespace build2 out (move (o)), name (move (n)), ext (move (e)), - scope (s) {} + scope (s), + vars (false /* global */) {} // Make a prerequisite from a target. // @@ -141,7 +160,8 @@ namespace build2 name (move (x.name)), ext (move (x.ext)), scope (move (x.scope)), - target (x.target.load (memory_order_relaxed)) {} + target (x.target.load (memory_order_relaxed)), + vars (move (x.vars)) {} prerequisite (const prerequisite& x, memory_order o = memory_order_consume) : proj (x.proj), @@ -151,7 +171,8 @@ namespace build2 name (x.name), ext (x.ext), scope (x.scope), - target (x.target.load (o)) {} + target (x.target.load (o)), + vars (x.vars) {} }; inline ostream& -- cgit v1.1