diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2020-07-06 10:22:12 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2020-07-06 10:22:12 +0200 |
commit | 9a9276e1d151910ba31db4d91521b41e5ea1435f (patch) | |
tree | a4bf5d320c6c1c6f5d98e00a2620c2bb8a33fb3e /libbuild2/parser.hxx | |
parent | 736812cb586e0f80742337dce802ad24adf331ad (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.hxx | 5 |
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&); |