From 9a9276e1d151910ba31db4d91521b41e5ea1435f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 6 Jul 2020 10:22:12 +0200 Subject: 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. --- doc/manual.cli | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'doc/manual.cli') diff --git a/doc/manual.cli b/doc/manual.cli index cf2ec3a..ba0aa63 100644 --- a/doc/manual.cli +++ b/doc/manual.cli @@ -3259,11 +3259,17 @@ h{config}: in{config} } \ -In case of a dependency chain, the block applies to the set of prerequisites -(note: \i{not targets}) before last \c{:}. For example: +In case of a dependency chain, if the chain ends with a colon (\c{:}), then +the block applies to the last set of prerequisites. Otherwise, it applies to +the last set of targets. For example: \ -./: exe{test}: libue{test}: cxx{test} +./: 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. } -- cgit v1.1