Module Name:    src
Committed By:   rillig
Date:           Mon Feb 22 22:04:28 UTC 2021

Modified Files:
        src/usr.bin/make/unit-tests: var-class-cmdline.exp var-class-cmdline.mk

Log Message:
make: add test for cmdline variables overriding global variables


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/make/unit-tests/var-class-cmdline.exp
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/var-class-cmdline.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/unit-tests/var-class-cmdline.exp
diff -u src/usr.bin/make/unit-tests/var-class-cmdline.exp:1.1 src/usr.bin/make/unit-tests/var-class-cmdline.exp:1.2
--- src/usr.bin/make/unit-tests/var-class-cmdline.exp:1.1	Sun Aug 16 12:07:51 2020
+++ src/usr.bin/make/unit-tests/var-class-cmdline.exp	Mon Feb 22 22:04:28 2021
@@ -1 +1,4 @@
+make: "var-class-cmdline.mk" line 23: global
+make: "var-class-cmdline.mk" line 30: makeflags
+makeflags
 exit status 0

Index: src/usr.bin/make/unit-tests/var-class-cmdline.mk
diff -u src/usr.bin/make/unit-tests/var-class-cmdline.mk:1.2 src/usr.bin/make/unit-tests/var-class-cmdline.mk:1.3
--- src/usr.bin/make/unit-tests/var-class-cmdline.mk:1.2	Sun Aug 16 14:25:16 2020
+++ src/usr.bin/make/unit-tests/var-class-cmdline.mk	Mon Feb 22 22:04:28 2021
@@ -1,8 +1,34 @@
-# $NetBSD: var-class-cmdline.mk,v 1.2 2020/08/16 14:25:16 rillig Exp $
+# $NetBSD: var-class-cmdline.mk,v 1.3 2021/02/22 22:04:28 rillig Exp $
 #
 # Tests for variables specified on the command line.
+#
+# Variables that are specified on the command line override those from the
+# global scope.
+#
+# For performance reasons, variable lookup often starts in the global scope
+# since that is where most practically used variables are stored.  But even
+# in these cases, variables from the command line scope must override the
+# global variables.  Therefore, whenever a global variable is tried to be
+# set, it is ignored when there is already a variable of the same name in
+# the cmdline scope.  In the same vein, when a cmdline variable is set and
+# there is already a variable of the same name in the global scope, that
+# global variable is deleted first.
+#
+# Most cmdline variables are set at the very beginning, when parsing the
+# command line arguments.  Using the special target '.MAKEFLAGS', it is
+# possible to set cmdline variables at any later time.
+
+# A normal global variable, without any cmdline variable nearby.
+VAR=	global
+.info ${VAR}
 
-# TODO: Implementation
+# The global variable is "overridden" by simply deleting it and then
+# installing the cmdline variable instead.  Since there is no way to
+# undefine a cmdline variable, there is no need to remember the old value
+# of the global variable could become visible again.
+.MAKEFLAGS: VAR=makeflags
+.info ${VAR}
 
-all:
-	@:;
+# If Var_SetWithFlags should ever forget to delete the global variable,
+# the below line would print "global" instead of the current "makeflags".
+.MAKEFLAGS: -V VAR

Reply via email to