diff options
Diffstat (limited to 'libbuild2/adhoc-rule-cxx.hxx')
-rw-r--r-- | libbuild2/adhoc-rule-cxx.hxx | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/libbuild2/adhoc-rule-cxx.hxx b/libbuild2/adhoc-rule-cxx.hxx index dfcdf3f..2ac2281 100644 --- a/libbuild2/adhoc-rule-cxx.hxx +++ b/libbuild2/adhoc-rule-cxx.hxx @@ -25,6 +25,9 @@ namespace build2 // in its base. }; + // Note that when used as part of a pattern, the implementation cannot use + // the match_extra::data() facility nor the target auxiliary data storage. + // class LIBBUILD2_SYMEXPORT cxx_rule_v1: public cxx_rule { public: @@ -33,16 +36,37 @@ namespace build2 // cannot be injected as a real prerequisite since it's from a different // build context). // - const location recipe_loc; // Buildfile location of the recipe. - const target_state recipe_state; // State of recipe library target. + 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. - cxx_rule_v1 (const location& l, target_state s) - : recipe_loc (l), recipe_state (s) {} + cxx_rule_v1 (const location& l, + target_state s, + const adhoc_rule_pattern* p) + : recipe_loc (l), recipe_state (s), pattern (p) {} // Return true by default. // + // Note: must treat target as const (unless known to match a non-group). + // See adhoc_rule::match() for background. + // virtual bool - match (action, target&, const string&) const override; + 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. @@ -56,13 +80,18 @@ namespace build2 virtual recipe apply (action, target&, match_extra&) const override; - adhoc_cxx_rule (const location&, size_t, + virtual void + reapply (action, target&, match_extra&) const override; + + adhoc_cxx_rule (string, const location&, size_t, uint64_t ver, optional<string> sep); virtual bool - recipe_text (context&, const target&, const adhoc_actions&, - string&&, attributes&) override; + recipe_text (const scope&, + const target_type&, + string&&, + attributes&) override; virtual ~adhoc_cxx_rule () override; |