Module Name: src Committed By: sjg Date: Sun Dec 12 20:45:48 UTC 2021
Modified Files: src/usr.bin/make: make.1 nonints.h suff.c var.c Log Message: Add .SUFFIXES as read-only variable. References to ${.SUFFIXES} are handled dynamically in ParseVarnameLong by calling Suff_NamesStr. The variable cannot be set normally. Reviewed by: rillig To generate a diff of this commit: cvs rdiff -u -r1.299 -r1.300 src/usr.bin/make/make.1 cvs rdiff -u -r1.216 -r1.217 src/usr.bin/make/nonints.h cvs rdiff -u -r1.356 -r1.357 src/usr.bin/make/suff.c cvs rdiff -u -r1.972 -r1.973 src/usr.bin/make/var.c 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/make.1 diff -u src/usr.bin/make/make.1:1.299 src/usr.bin/make/make.1:1.300 --- src/usr.bin/make/make.1:1.299 Tue Aug 3 07:12:50 2021 +++ src/usr.bin/make/make.1 Sun Dec 12 20:45:48 2021 @@ -1,4 +1,4 @@ -.\" $NetBSD: make.1,v 1.299 2021/08/03 07:12:50 wiz Exp $ +.\" $NetBSD: make.1,v 1.300 2021/12/12 20:45:48 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 August 3, 2021 +.Dd December 12, 2021 .Dt MAKE 1 .Os .Sh NAME @@ -1162,6 +1162,9 @@ executes. .It Ev .SHELL The pathname of the shell used to run target scripts. It is read-only. +.It Ev .SUFFIXES +The list of known suffixes. +It is read-only. .It Ev .TARGETS The list of targets explicitly specified on the command line, if any. .It Ev VPATH Index: src/usr.bin/make/nonints.h diff -u src/usr.bin/make/nonints.h:1.216 src/usr.bin/make/nonints.h:1.217 --- src/usr.bin/make/nonints.h:1.216 Sun Dec 12 15:44:41 2021 +++ src/usr.bin/make/nonints.h Sun Dec 12 20:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: nonints.h,v 1.216 2021/12/12 15:44:41 rillig Exp $ */ +/* $NetBSD: nonints.h,v 1.217 2021/12/12 20:45:48 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -184,6 +184,7 @@ void Suff_FindDeps(GNode *); SearchPath *Suff_FindPath(GNode *); void Suff_SetNull(const char *); void Suff_PrintAll(void); +const char *Suff_NamesStr(void); /* targ.c */ void Targ_Init(void); Index: src/usr.bin/make/suff.c diff -u src/usr.bin/make/suff.c:1.356 src/usr.bin/make/suff.c:1.357 --- src/usr.bin/make/suff.c:1.356 Thu Dec 9 20:13:09 2021 +++ src/usr.bin/make/suff.c Sun Dec 12 20:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: suff.c,v 1.356 2021/12/09 20:13:09 rillig Exp $ */ +/* $NetBSD: suff.c,v 1.357 2021/12/12 20:45:48 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -115,7 +115,7 @@ #include "dir.h" /* "@(#)suff.c 8.4 (Berkeley) 3/21/94" */ -MAKE_RCSID("$NetBSD: suff.c,v 1.356 2021/12/09 20:13:09 rillig Exp $"); +MAKE_RCSID("$NetBSD: suff.c,v 1.357 2021/12/12 20:45:48 sjg Exp $"); typedef List SuffixList; typedef ListNode SuffixListNode; @@ -2177,3 +2177,20 @@ Suff_PrintAll(void) PrintTransformation(ln->datum); } } + +const char * +Suff_NamesStr(void) +{ + Buffer buf; + SuffixListNode *ln; + Suffix *suff; + + Buf_InitSize(&buf, 16); + for (ln = sufflist.first; ln != NULL; ln = ln->next) { + suff = ln->datum; + if (ln != sufflist.first) + Buf_AddByte(&buf, ' '); + Buf_AddStr(&buf, suff->name); + } + return Buf_DoneData(&buf); +} Index: src/usr.bin/make/var.c diff -u src/usr.bin/make/var.c:1.972 src/usr.bin/make/var.c:1.973 --- src/usr.bin/make/var.c:1.972 Sun Dec 12 16:41:39 2021 +++ src/usr.bin/make/var.c Sun Dec 12 20:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.972 2021/12/12 16:41:39 sjg Exp $ */ +/* $NetBSD: var.c,v 1.973 2021/12/12 20:45:48 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -140,7 +140,7 @@ #include "metachar.h" /* "@(#)var.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: var.c,v 1.972 2021/12/12 16:41:39 sjg Exp $"); +MAKE_RCSID("$NetBSD: var.c,v 1.973 2021/12/12 20:45:48 sjg Exp $"); /* * Variables are defined using one of the VAR=value assignments. Their @@ -977,6 +977,12 @@ Var_SetWithFlags(GNode *scope, const cha */ Var_Delete(SCOPE_GLOBAL, name); } + if (strcmp(name, ".SUFFIXES") == 0) { + /* special: treat as readOnly */ + DEBUG3(VAR, "%s: %s = %s ignored (read-only)\n", + scope->name, name, val); + return; + } v = VarAdd(name, val, scope, flags); } else { if (v->readOnly && !(flags & VAR_SET_READONLY)) { @@ -4400,8 +4406,12 @@ ParseVarnameLong( * either at ':' or at endc. */ if (v == NULL) { - v = FindLocalLegacyVar(name, scope, - out_true_extraModifiers); + if (Substring_Equals(name, ".SUFFIXES")) + v = VarNew(Substring_Str(name), + Suff_NamesStr(), false, true); + else + v = FindLocalLegacyVar(name, scope, + out_true_extraModifiers); } if (v == NULL) {