Module Name:    src
Committed By:   sjg
Date:           Mon Jan 23 23:01:53 UTC 2023

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/usr.bin/make: make.1 make.h parse.c var.c
        src/usr.bin/make/unit-tests: Makefile

Log Message:
make: .[NO]READONLY for control of read-only variables

Reviewed by: rillig


To generate a diff of this commit:
cvs rdiff -u -r1.1247 -r1.1248 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.357 -r1.358 src/usr.bin/make/make.1
cvs rdiff -u -r1.309 -r1.310 src/usr.bin/make/make.h
cvs rdiff -u -r1.690 -r1.691 src/usr.bin/make/parse.c
cvs rdiff -u -r1.1036 -r1.1037 src/usr.bin/make/var.c
cvs rdiff -u -r1.329 -r1.330 src/usr.bin/make/unit-tests/Makefile

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

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1247 src/distrib/sets/lists/tests/mi:1.1248
--- src/distrib/sets/lists/tests/mi:1.1247	Sun Jan 22 17:17:24 2023
+++ src/distrib/sets/lists/tests/mi	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1247 2023/01/22 17:17:24 rillig Exp $
+# $NetBSD: mi,v 1.1248 2023/01/23 23:01:52 sjg Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6036,6 +6036,8 @@
 ./usr/tests/usr.bin/make/unit-tests/var-op-sunsh.mk				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/var-op.exp					tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/var-op.mk					tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/var-readonly.exp				tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/var-readonly.mk				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/var-recursive.exp				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/var-recursive.mk				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/var-scope-cmdline.exp			tests-usr.bin-tests	compattestfile,atf

Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.357 src/usr.bin/make/make.1:1.358
--- src/usr.bin/make/make.1:1.357	Sun Jan  1 21:02:09 2023
+++ src/usr.bin/make/make.1	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.357 2023/01/01 21:02:09 rillig Exp $
+.\"	$NetBSD: make.1,v 1.358 2023/01/23 23:01:52 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd January 1, 2023
+.Dd January 23, 2023
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -2390,6 +2390,8 @@ Disable parallel mode.
 Synonym for
 .Ic .NOTPARALLEL ,
 for compatibility with other pmake variants.
+.It Ic .NOREADONLY
+clear the read-only attribute from the global variables specified as sources.
 .It Ic .OBJDIR
 The source is a new value for
 .Sq Va .OBJDIR .
@@ -2458,6 +2460,8 @@ attribute to any specified sources.
 If no sources are specified, the
 .Ic .PRECIOUS
 attribute is applied to every target in the file.
+.It Ic .READONLY
+set the read-only attribute on the global variables specified as sources.
 .It Ic .SHELL
 Sets the shell that
 .Nm

Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.309 src/usr.bin/make/make.h:1.310
--- src/usr.bin/make/make.h:1.309	Thu Jan 19 21:33:06 2023
+++ src/usr.bin/make/make.h	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.309 2023/01/19 21:33:06 rillig Exp $	*/
+/*	$NetBSD: make.h,v 1.310 2023/01/23 23:01:52 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -1026,6 +1026,7 @@ void Var_ReexportVars(void);
 void Var_Export(VarExportMode, const char *);
 void Var_ExportVars(const char *);
 void Var_UnExport(bool, const char *);
+void Var_ReadOnly(const char *, bool);
 
 void Global_Set(const char *, const char *);
 void Global_Append(const char *, const char *);

Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.690 src/usr.bin/make/parse.c:1.691
--- src/usr.bin/make/parse.c:1.690	Tue Jan  3 00:00:45 2023
+++ src/usr.bin/make/parse.c	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.690 2023/01/03 00:00:45 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.691 2023/01/23 23:01:52 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -105,7 +105,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.690 2023/01/03 00:00:45 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.691 2023/01/23 23:01:52 sjg Exp $");
 
 /*
  * A file being read.
@@ -149,6 +149,7 @@ typedef enum ParseSpecial {
 	SP_NOMETA,	/* .NOMETA */
 	SP_NOMETA_CMP,	/* .NOMETA_CMP */
 	SP_NOPATH,	/* .NOPATH */
+	SP_NOREADONLY,	/* .NOREADONLY */
 	SP_NOT,		/* Not special */
 	SP_NOTPARALLEL,	/* .NOTPARALLEL or .NO_PARALLEL */
 	SP_NULL,	/* .NULL; not mentioned in the manual page */
@@ -161,6 +162,7 @@ typedef enum ParseSpecial {
 	SP_POSIX,	/* .POSIX; not mentioned in the manual page */
 #endif
 	SP_PRECIOUS,	/* .PRECIOUS */
+	SP_READONLY,	/* .READONLY */
 	SP_SHELL,	/* .SHELL */
 	SP_SILENT,	/* .SILENT */
 	SP_SINGLESHELL,	/* .SINGLESHELL; not mentioned in the manual page */
@@ -269,6 +271,7 @@ static const struct {
     { ".NOMETA",	SP_NOMETA,	OP_NOMETA },
     { ".NOMETA_CMP",	SP_NOMETA_CMP,	OP_NOMETA_CMP },
     { ".NOPATH",	SP_NOPATH,	OP_NOPATH },
+    { ".NOREADONLY",	SP_NOREADONLY,	OP_NONE },
     { ".NOTMAIN",	SP_ATTRIBUTE,	OP_NOTMAIN },
     { ".NOTPARALLEL",	SP_NOTPARALLEL,	OP_NONE },
     { ".NO_PARALLEL",	SP_NOTPARALLEL,	OP_NONE },
@@ -283,6 +286,7 @@ static const struct {
     { ".POSIX",		SP_POSIX,	OP_NONE },
 #endif
     { ".PRECIOUS",	SP_PRECIOUS,	OP_PRECIOUS },
+    { ".READONLY",	SP_READONLY,	OP_NONE },
     { ".RECURSIVE",	SP_ATTRIBUTE,	OP_MAKE },
     { ".SHELL",		SP_SHELL,	OP_NONE },
     { ".SILENT",	SP_SILENT,	OP_SILENT },
@@ -1306,12 +1310,18 @@ ParseDependencySourceSpecial(ParseSpecia
 	case SP_LIBS:
 		Suff_AddLib(word);
 		break;
+	case SP_NOREADONLY:
+		Var_ReadOnly(word, false);
+		break;
 	case SP_NULL:
 		Suff_SetNull(word);
 		break;
 	case SP_OBJDIR:
 		Main_SetObjdir(false, "%s", word);
 		break;
+	case SP_READONLY:
+		Var_ReadOnly(word, true);
+		break;
 	default:
 		break;
 	}
@@ -1524,9 +1534,15 @@ ParseDependencySources(char *p, GNodeTyp
 	}
 
 	/* Now go for the sources. */
-	if (special == SP_SUFFIXES || special == SP_PATH ||
-	    special == SP_INCLUDES || special == SP_LIBS ||
-	    special == SP_NULL || special == SP_OBJDIR) {
+	switch (special) {
+	case SP_INCLUDES:
+	case SP_LIBS:
+	case SP_NOREADONLY:
+	case SP_NULL:
+	case SP_OBJDIR:
+	case SP_PATH:
+	case SP_READONLY:
+	case SP_SUFFIXES:
 		ParseDependencySourcesSpecial(p, special, *inout_paths);
 		if (*inout_paths != NULL) {
 			Lst_Free(*inout_paths);
@@ -1534,10 +1550,12 @@ ParseDependencySources(char *p, GNodeTyp
 		}
 		if (special == SP_PATH)
 			Dir_SetPATH();
-	} else {
+		break;
+	default:
 		assert(*inout_paths == NULL);
 		if (!ParseDependencySourcesMundane(p, special, targetAttr))
 			return;
+		break;
 	}
 
 	MaybeUpdateMainTarget();

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.1036 src/usr.bin/make/var.c:1.1037
--- src/usr.bin/make/var.c:1.1036	Mon Dec  5 23:41:24 2022
+++ src/usr.bin/make/var.c	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.1036 2022/12/05 23:41:24 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.1037 2023/01/23 23:01:52 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.1036 2022/12/05 23:41:24 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1037 2023/01/23 23:01:52 sjg Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -1222,6 +1222,22 @@ Var_Value(GNode *scope, const char *name
 }
 
 /*
+ * set readOnly attribute of specified var if it exists
+ */
+void
+Var_ReadOnly(const char *name, bool bf)
+{
+	Var *v;
+
+	v = VarFind(name, SCOPE_GLOBAL, false);
+	if (v == NULL) {
+		DEBUG1(VAR, "Var_ReadOnly: %s not found\n", name);
+		return;
+	}
+	v->readOnly = bf;
+}
+
+/*
  * Return the unexpanded variable value from this node, without trying to look
  * up the variable in any other scope.
  */

Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.329 src/usr.bin/make/unit-tests/Makefile:1.330
--- src/usr.bin/make/unit-tests/Makefile:1.329	Thu Jan 19 23:26:14 2023
+++ src/usr.bin/make/unit-tests/Makefile	Mon Jan 23 23:01:52 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.329 2023/01/19 23:26:14 rillig Exp $
+# $NetBSD: Makefile,v 1.330 2023/01/23 23:01:52 sjg Exp $
 #
 # Unit tests for make(1)
 #
@@ -320,6 +320,7 @@ TESTS+=		ternary
 TESTS+=		unexport
 TESTS+=		unexport-env
 TESTS+=		use-inference
+TESTS+=		var-readonly
 TESTS+=		var-scope
 TESTS+=		var-scope-cmdline
 TESTS+=		var-scope-env

Reply via email to