[libvirt PATCH] build: workaround behaviour regression in gnu make 4.3

We need the "$(space)" variable to contain a single whitespace character. We do this by assigning and then appending an empty string to the variable. Variable appends get separated by a single whitespace historically, but GNU make 4.3 introduced a behaviour regression. https://lists.gnu.org/archive/html/bug-make/2020-01/msg00057.html [quote] * WARNING: Backward-incompatibility! Previously appending using '+=' to an empty variable would result in a value starting with a space. Now the initial space is only added if the variable already contains some value. Similarly, appending an empty string does not add a trailing space. [/quote] This patch tries a new trick to get a single whitespace by getting make to expand two non-existant variables separated by a space. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- build-aux/syntax-check.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index b829c8a18b..3020921be8 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -687,8 +687,7 @@ msg_gen_function += virLastErrorPrefixMessage # msg_gen_function += vshPrint # msg_gen_function += vshError -space = -space += +space = $(null) $(null) func_re= ($(subst $(space),|,$(msg_gen_function))) # Look for diagnostics that aren't marked for translation. -- 2.24.1

On 3/13/20 1:42 PM, Daniel P. Berrangé wrote:
We need the "$(space)" variable to contain a single whitespace character. We do this by assigning and then appending an empty string to the variable. Variable appends get separated by a single whitespace historically, but GNU make 4.3 introduced a behaviour regression.
https://lists.gnu.org/archive/html/bug-make/2020-01/msg00057.html
[quote] * WARNING: Backward-incompatibility! Previously appending using '+=' to an empty variable would result in a value starting with a space. Now the initial space is only added if the variable already contains some value. Similarly, appending an empty string does not add a trailing space. [/quote]
This patch tries a new trick to get a single whitespace by getting make to expand two non-existant variables separated by a space.
Reviewed-by: Eric Blake <eblake@redhat.com> https://blog.jgc.org/2007/06/escaping-comma-and-space-in-gnu-make.html needs to be updated to cover this change in GNU make, but it also points out that GNU make permits: $(space) = $(null) $(null) as a way to then write [$( )] or [$ ] instead of [$(space)] (all three producing "[ ]"), if you really want to go crazy with odd macro names. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
participants (2)
-
Daniel P. Berrangé
-
Eric Blake