aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/bash/rule.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2023-07-20 07:44:36 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2023-07-20 07:44:36 +0200
commitb61e0de250d522ec9a8e16146ef979a65c181db1 (patch)
tree93cf8e451a5c605f9d0159c6474e77d47b6f2de4 /libbuild2/bash/rule.cxx
parent7aabdc2ccfea23c93e3b94290df59708aa179104 (diff)
Change inner rule/prerequisites match order in install::file_rule
The old order messed up the for-install signaling logic. See the long comment in install::file_rule::apply_impl() for background and details.
Diffstat (limited to 'libbuild2/bash/rule.cxx')
-rw-r--r--libbuild2/bash/rule.cxx10
1 files changed, 9 insertions, 1 deletions
diff --git a/libbuild2/bash/rule.cxx b/libbuild2/bash/rule.cxx
index 29c6a2a..502a206 100644
--- a/libbuild2/bash/rule.cxx
+++ b/libbuild2/bash/rule.cxx
@@ -63,10 +63,12 @@ namespace build2
// in_rule
//
bool in_rule::
- match (action a, target& t, const string& hint, match_extra&) const
+ match (action a, target& xt, const string& hint, match_extra&) const
{
tracer trace ("bash::in_rule::match");
+ file& t (xt.as<file> ()); // Only registered for exe{} and bash{}.
+
// Note that for bash{} and for exe{} with hint we match even if the
// target does not depend on any modules (while it could have been
// handled by the in module, that would require loading it).
@@ -89,6 +91,12 @@ namespace build2
l4 ([&]{trace << "no bash module prerequisite or hint for target "
<< t;});
+ // If we match, derive the file name early as recommended by the in
+ // rule.
+ //
+ if (fi && fm)
+ t.derive_path ();
+
return fi && fm;
}