diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-12 05:59:39 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-12 05:59:39 +0200 |
commit | f0cfe78cb306532518d42e3d2b8e59405d006717 (patch) | |
tree | 29dfca4fa2b025aef335a39f323c284b226016bc | |
parent | d298d5cb1379d719dd96d5374b388889467269ee (diff) |
Allow overriding apply(match_extra) version in cxx_rule_v1
-rw-r--r-- | libbuild2/adhoc-rule-cxx.cxx | 14 | ||||
-rw-r--r-- | libbuild2/adhoc-rule-cxx.hxx | 20 |
2 files changed, 29 insertions, 5 deletions
diff --git a/libbuild2/adhoc-rule-cxx.cxx b/libbuild2/adhoc-rule-cxx.cxx index 637f9af..2ac97eb 100644 --- a/libbuild2/adhoc-rule-cxx.cxx +++ b/libbuild2/adhoc-rule-cxx.cxx @@ -25,6 +25,13 @@ namespace build2 return true; } + recipe cxx_rule_v1:: + apply (action, target&) const + { + assert (false); // This (or the match_extra version) must be overriden. + return empty_recipe; + } + // adhoc_cxx_rule // adhoc_cxx_rule:: @@ -699,6 +706,13 @@ namespace build2 return group_recipe; // Execute the group's recipe. } + // Note that while we probably could call pattern's apply_group_members() + // here, apply_group_prerequisites() is normally called after adding + // prerequisites but before matching, which can only be done from the + // rule's implementation. Also, for apply_group_members(), there is the + // explicit group special case which may also require custom logic. + // So it feels best to leave both to the implementation. + return impl.load (memory_order_relaxed)->apply (a, t, me); } diff --git a/libbuild2/adhoc-rule-cxx.hxx b/libbuild2/adhoc-rule-cxx.hxx index 89bc05f..2ac2281 100644 --- a/libbuild2/adhoc-rule-cxx.hxx +++ b/libbuild2/adhoc-rule-cxx.hxx @@ -36,11 +36,6 @@ namespace build2 // cannot be injected as a real prerequisite since it's from a different // build context). // - // If pattern is not NULL then this recipe belongs to an ad hoc pattern - // rule and apply() may need to call the pattern's apply_*() functions if - // the pattern has any ad hoc group member substitutions or prerequisite - // substitutions/non-patterns, respectively. - // const location recipe_loc; // Buildfile location of the recipe. const target_state recipe_state; // State of recipe library target. const adhoc_rule_pattern* pattern; // Ad hoc pattern rule of recipe. @@ -57,6 +52,21 @@ namespace build2 // virtual bool match (action, target&) const override; + + using simple_rule::match; // Unhide the match_extra version. + + // Either this version or the one with match_extra must be overridden. + // + // If the pattern member above is not NULL then this recipe belongs to an + // ad hoc pattern rule and the implementation may need to call the + // pattern's apply_*() functions if the pattern has any ad hoc group + // member substitutions or prerequisite substitutions/non-patterns, + // respectively. + // + virtual recipe + apply (action, target&) const override; + + using simple_rule::apply; // Unhide the match_extra version. }; // Note: not exported. |