aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/parser.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2020-07-06 10:22:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2020-07-06 10:22:12 +0200
commit9a9276e1d151910ba31db4d91521b41e5ea1435f (patch)
treea4bf5d320c6c1c6f5d98e00a2620c2bb8a33fb3e /libbuild2/parser.hxx
parent736812cb586e0f80742337dce802ad24adf331ad (diff)
Adjust variable block applicability in dependency chains
Before the block used to apply to the set of prerequisites before the last `:`. This turned out to be counterintuitive and not very useful since prerequisite-specific variables are a lot less common than target specific. And it doesn't fit with ad hoc recipes. The new rule is if the chain ends with `:`, then the block applies to the last set of prerequisites. Otherwise, it applies to the last set of targets. For example: ./: exe{test}: cxx{main} { test = true # Applies to the exe{test} target. } ./: exe{test}: libue{test}: { bin.whole = false # Applies to the libue{test} prerequisite. } This is actually consistent with both non-chain and non-block cases. Consider: exe{test}: cxx{main} { test = true } exe{test}: libue{test}: { bin.whole = false } exe{test}: libue{test}: bin.whole = false The only exception we now have in this overall approach of "if the dependency declaration ends with a colon, then what follows is for a prerequisite" is for the first semicolon: exe{test}: { test = true } exe{test}: test = true But that's probably intuitive enough since there cannot be a prerequisite without a target.
Diffstat (limited to 'libbuild2/parser.hxx')
-rw-r--r--libbuild2/parser.hxx5
1 files changed, 2 insertions, 3 deletions
diff --git a/libbuild2/parser.hxx b/libbuild2/parser.hxx
index 2db7ade..24a1ac1 100644
--- a/libbuild2/parser.hxx
+++ b/libbuild2/parser.hxx
@@ -152,12 +152,11 @@ namespace build2
small_vector<reference_wrapper<target>, 1>
enter_targets (names&&, const location&, adhoc_names&&, size_t);
- bool
+ void
parse_dependency (token&, token_type&,
names&&, const location&,
adhoc_names&&,
- names&&, const location&,
- bool = false);
+ names&&, const location&);
void
parse_assert (token&, token_type&);