Module Name:    src
Committed By:   rillig
Date:           Sat Nov 23 22:59:52 UTC 2024

Modified Files:
        src/usr.bin/make: main.c var.c
        src/usr.bin/make/unit-tests: varname-dot-make-level.exp
            varname-dot-make-level.mk

Log Message:
make: fix confusing error message when overriding a read-only variable


To generate a diff of this commit:
cvs rdiff -u -r1.635 -r1.636 src/usr.bin/make/main.c
cvs rdiff -u -r1.1140 -r1.1141 src/usr.bin/make/var.c
cvs rdiff -u -r1.3 -r1.4 \
    src/usr.bin/make/unit-tests/varname-dot-make-level.exp
cvs rdiff -u -r1.4 -r1.5 \
    src/usr.bin/make/unit-tests/varname-dot-make-level.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/main.c
diff -u src/usr.bin/make/main.c:1.635 src/usr.bin/make/main.c:1.636
--- src/usr.bin/make/main.c:1.635	Sun Nov 10 02:39:14 2024
+++ src/usr.bin/make/main.c	Sat Nov 23 22:59:51 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.635 2024/11/10 02:39:14 sjg Exp $	*/
+/*	$NetBSD: main.c,v 1.636 2024/11/23 22:59:51 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
 #include "trace.h"
 
 /*	"@(#)main.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: main.c,v 1.635 2024/11/10 02:39:14 sjg Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.636 2024/11/23 22:59:51 rillig Exp $");
 #if defined(MAKE_NATIVE)
 __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
 	    "The Regents of the University of California.  "
@@ -1392,7 +1392,8 @@ main_Init(int argc, char **argv)
 
 	/* Set some other useful variables. */
 	{
-		char buf[64], *ep = getenv(MAKE_LEVEL_ENV);
+		char buf[64];
+		const char *ep = getenv(MAKE_LEVEL_ENV);
 
 		makelevel = ep != NULL && ep[0] != '\0' ? atoi(ep) : 0;
 		if (makelevel < 0)

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.1140 src/usr.bin/make/var.c:1.1141
--- src/usr.bin/make/var.c:1.1140	Sat Aug 31 06:21:27 2024
+++ src/usr.bin/make/var.c	Sat Nov 23 22:59:51 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.1140 2024/08/31 06:21:27 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.1141 2024/11/23 22:59:51 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -128,7 +128,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1140 2024/08/31 06:21:27 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1141 2024/11/23 22:59:51 rillig Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -1035,7 +1035,14 @@ Var_SetWithFlags(GNode *scope, const cha
 			 *
 			 * See ExistsInCmdline.
 			 */
-			Var_Delete(SCOPE_GLOBAL, name);
+			Var *gl = VarFind(name, SCOPE_GLOBAL, false);
+			if (gl != NULL && gl->readOnlyLoud)
+				Parse_Error(PARSE_FATAL,
+				    "Cannot override "
+				    "read-only global variable \"%s\" "
+				    "with a command line variable", name);
+			else
+				Var_Delete(SCOPE_GLOBAL, name);
 		}
 		if (strcmp(name, ".SUFFIXES") == 0) {
 			/* special: treat as read-only */

Index: src/usr.bin/make/unit-tests/varname-dot-make-level.exp
diff -u src/usr.bin/make/unit-tests/varname-dot-make-level.exp:1.3 src/usr.bin/make/unit-tests/varname-dot-make-level.exp:1.4
--- src/usr.bin/make/unit-tests/varname-dot-make-level.exp:1.3	Sat Nov 23 22:48:09 2024
+++ src/usr.bin/make/unit-tests/varname-dot-make-level.exp	Sat Nov 23 22:59:51 2024
@@ -1,7 +1,7 @@
 level 1: variable 0, env 1
 level 2: variable 1, env 2
 level 3: variable 2, env 3
-make: Cannot delete ".MAKE.LEVEL.ENV" as it is read-only
+make: Cannot override read-only global variable ".MAKE.LEVEL.ENV" with a command line variable
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 *** Error code 1 (continuing)

Index: src/usr.bin/make/unit-tests/varname-dot-make-level.mk
diff -u src/usr.bin/make/unit-tests/varname-dot-make-level.mk:1.4 src/usr.bin/make/unit-tests/varname-dot-make-level.mk:1.5
--- src/usr.bin/make/unit-tests/varname-dot-make-level.mk:1.4	Sat Nov 23 22:48:09 2024
+++ src/usr.bin/make/unit-tests/varname-dot-make-level.mk	Sat Nov 23 22:59:51 2024
@@ -1,4 +1,4 @@
-# $NetBSD: varname-dot-make-level.mk,v 1.4 2024/11/23 22:48:09 rillig Exp $
+# $NetBSD: varname-dot-make-level.mk,v 1.5 2024/11/23 22:59:51 rillig Exp $
 #
 # Tests for the special .MAKE.LEVEL variable, which informs about the
 # recursion level.  It is related to the environment variable MAKELEVEL,
@@ -24,7 +24,6 @@ level_3: .PHONY
 .endif
 
 
-# FIXME: The error message "Cannot delete" is confusing.
-# expect: make: Cannot delete ".MAKE.LEVEL.ENV" as it is read-only
+# expect: make: Cannot override read-only global variable ".MAKE.LEVEL.ENV" with a command line variable
 set-env:
 	@${MAKE} -f /dev/null .MAKE.LEVEL.ENV=MAKELEVEL

Reply via email to