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 +++++++++++++++++++++++++ build2/cc/link-rule.hxx | 1 + 2 files changed, 26 insertions(+) (limited to 'build2') 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 diff --git a/build2/cc/link-rule.hxx b/build2/cc/link-rule.hxx index c572ab3..da6181b 100644 --- a/build2/cc/link-rule.hxx +++ b/build2/cc/link-rule.hxx @@ -116,6 +116,7 @@ namespace build2 optional for_install; bool binless; // Binary-less library. + size_t start; // Parallel prerequisites/prerequisite_targets start. link_rule::libs_paths libs_paths; }; -- cgit v1.1