Module Name:    src
Committed By:   sjg
Date:           Thu Feb  9 07:34:15 UTC 2023

Modified Files:
        src/usr.bin/make: var.c
        src/usr.bin/make/unit-tests: varmod-remember.mk

Log Message:
make: ApplyModifier_Remember always use SCOPE_GLOBAL

Conditionals evaluate vars with SCOPE_CMDLINE, if :_
is used within a conditional expression and is thus
set in SCOPE_CMDLINE, it breaks any use of :_ in SCOPE_GLOBAL.

The simplest solution is for :_ to always use SCOPE_GLOBAL

Reviewed by: rillig


To generate a diff of this commit:
cvs rdiff -u -r1.1039 -r1.1040 src/usr.bin/make/var.c
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/varmod-remember.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.1039 src/usr.bin/make/var.c:1.1040
--- src/usr.bin/make/var.c:1.1039	Thu Jan 26 20:48:17 2023
+++ src/usr.bin/make/var.c	Thu Feb  9 07:34:15 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.1039 2023/01/26 20:48:17 sjg Exp $	*/
+/*	$NetBSD: var.c,v 1.1040 2023/02/09 07:34:15 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -139,7 +139,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1039 2023/01/26 20:48:17 sjg Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1040 2023/02/09 07:34:15 sjg Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -3578,7 +3578,7 @@ ApplyModifier_Remember(const char **pp, 
 		*pp = mod + 1;
 
 	if (Expr_ShouldEval(expr))
-		Var_Set(expr->scope, name.str, Expr_Str(expr));
+		Var_Set(SCOPE_GLOBAL, name.str, Expr_Str(expr));
 	FStr_Done(&name);
 
 	return AMR_OK;

Index: src/usr.bin/make/unit-tests/varmod-remember.mk
diff -u src/usr.bin/make/unit-tests/varmod-remember.mk:1.6 src/usr.bin/make/unit-tests/varmod-remember.mk:1.7
--- src/usr.bin/make/unit-tests/varmod-remember.mk:1.6	Sun Mar 14 17:27:27 2021
+++ src/usr.bin/make/unit-tests/varmod-remember.mk	Thu Feb  9 07:34:15 2023
@@ -1,8 +1,14 @@
-# $NetBSD: varmod-remember.mk,v 1.6 2021/03/14 17:27:27 rillig Exp $
+# $NetBSD: varmod-remember.mk,v 1.7 2023/02/09 07:34:15 sjg Exp $
 #
 # Tests for the :_ modifier, which saves the current variable value
 # in the _ variable or another, to be used later again.
 
+# this should result in "1=A 2=B 3=C"
+ABC= ${A B C:L:_:range:@i@$i=${_:[$i]}@}
+
+# we compare this with a repeat later
+x:= ${ABC}
+
 .if ${1 2 3:L:_:@var@${_}@} != "1 2 3 1 2 3 1 2 3"
 .  error
 .endif
@@ -32,4 +38,10 @@ S=	INDIRECT_VARNAME
 .  error
 .endif
 
+# we *should* get the same result as for $x above
+X:= ${ABC}
+.if $X != $x
+.  error
+.endif
+
 all:

Reply via email to