From 4177d70e63893d0a2c76beb9166ebbf79c4697a0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 26 Aug 2019 15:38:23 +0200 Subject: Add support for for_install prerequisite-specific var in link rule Also reserve for_test. --- build2/cc/link-rule.cxx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'build2/cc/link-rule.cxx') diff --git a/build2/cc/link-rule.cxx b/build2/cc/link-rule.cxx index bfc31d7..fa6d5e4 100644 --- a/build2/cc/link-rule.cxx +++ b/build2/cc/link-rule.cxx @@ -1299,6 +1299,7 @@ namespace build2 } md.binless = binless; + md.start = start; switch (a) { @@ -1801,6 +1802,30 @@ namespace build2 ts = target_state::changed; } + // Check for the for_install variable on each prerequisite and blank out + // those that don't match. Note that we have to do it after updating + // prerequisites to keep the dependency counts straight. + // + if (const variable* var_fi = ctx.var_pool.find ("for_install")) + { + // Parallel prerequisites/prerequisite_targets loop. + // + size_t i (md.start); + for (prerequisite_member p: group_prerequisite_members (a, t)) + { + const target*& pt (t.prerequisite_targets[a][i++]); + + if (pt == nullptr) + continue; + + if (lookup l = p.prerequisite.vars[var_fi]) + { + if (cast (l) != for_install) + pt = nullptr; + } + } + } + // (Re)generate pkg-config's .pc file. While the target itself might be // up-to-date from a previous run, there is no guarantee that .pc exists // or also up-to-date. So to keep things simple we just regenerate it -- cgit v1.1