aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/in/rule.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2/in/rule.hxx')
-rw-r--r--libbuild2/in/rule.hxx27
1 files changed, 24 insertions, 3 deletions
diff --git a/libbuild2/in/rule.hxx b/libbuild2/in/rule.hxx
index 1294586..67c2509 100644
--- a/libbuild2/in/rule.hxx
+++ b/libbuild2/in/rule.hxx
@@ -18,8 +18,14 @@ namespace build2
{
// Preprocess an .in file.
//
- // Note that a derived rule can use the target data pad to cache data
- // (e.g., in match() or apply()) to be used in substitute/lookup() calls.
+ // Note that a derived rule can use the target auxiliary data storage to
+ // cache data (e.g., in match() or apply()) to be used in substitute() and
+ // lookup() calls.
+ //
+ // A derived rule is also required to derive the target file name in
+ // match() instead of apply() to make it available early for the in{}
+ // prerequisite search (see install::file_rule::apply_impl() for
+ // background).
//
// Note also that currently this rule ignores the dry-run mode (see
// perform_update() for the rationale).
@@ -43,7 +49,7 @@ namespace build2
null_ (move (null)) {}
virtual bool
- match (action, target&, const string&) const override;
+ match (action, target&) const override;
virtual recipe
apply (action, target&) const override;
@@ -53,6 +59,7 @@ namespace build2
// Customization hooks and helpers.
//
+ using substitution_map = map<string, optional<string>>;
// Perform prerequisite search.
//
@@ -66,6 +73,16 @@ namespace build2
virtual void
perform_update_depdb (action, const target&, depdb&) const;
+ // Pre/post update.
+ //
+ virtual void
+ perform_update_pre (action, const target&,
+ ofdstream&, const char* newline) const;
+
+ virtual void
+ perform_update_post (action, const target&,
+ ofdstream&, const char* newline) const;
+
// Perform variable lookup.
//
// Flags can be used by a custom implementation to alter the lookup
@@ -78,6 +95,7 @@ namespace build2
action, const target&,
const string& name,
optional<uint64_t> flags,
+ const substitution_map*,
const optional<string>& null) const;
// Perform variable substitution. Return nullopt if it should be
@@ -89,6 +107,7 @@ namespace build2
const string& name,
optional<uint64_t> flags,
bool strict,
+ const substitution_map*,
const optional<string>& null) const;
// Call the above version and do any necessary depdb saving.
@@ -100,6 +119,7 @@ namespace build2
const string& name,
optional<uint64_t> flags,
bool strict,
+ const substitution_map*,
const optional<string>& null) const;
// Process a line of input from the specified position performing any
@@ -113,6 +133,7 @@ namespace build2
const char* newline,
char sym,
bool strict,
+ const substitution_map*,
const optional<string>& null) const;
// Replace newlines in a multi-line value with the given newline