Module Name: src
Committed By: rillig
Date: Sat Mar 29 23:50:07 UTC 2025
Modified Files:
src/usr.bin/make: var.c
src/usr.bin/make/unit-tests: varmod-order.exp varmod-order.mk varmod.mk
varparse-errors.exp varparse-errors.mk
Log Message:
make: let unknown ":O" modifiers fall back to the ":from=to" modifier
Inspired by https://bugs.freebsd.org/285726, which concerns the ":t"
modifier instead.
This means that future extensions to the ":O" modifier must not contain
a "=" anywhere, otherwise they may break existing code.
To generate a diff of this commit:
cvs rdiff -u -r1.1152 -r1.1153 src/usr.bin/make/var.c
cvs rdiff -u -r1.17 -r1.18 src/usr.bin/make/unit-tests/varmod-order.exp
cvs rdiff -u -r1.18 -r1.19 src/usr.bin/make/unit-tests/varmod-order.mk \
src/usr.bin/make/unit-tests/varparse-errors.exp
cvs rdiff -u -r1.23 -r1.24 src/usr.bin/make/unit-tests/varmod.mk
cvs rdiff -u -r1.21 -r1.22 src/usr.bin/make/unit-tests/varparse-errors.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.1152 src/usr.bin/make/var.c:1.1153
--- src/usr.bin/make/var.c:1.1152 Sat Mar 29 21:30:47 2025
+++ src/usr.bin/make/var.c Sat Mar 29 23:50:07 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.1152 2025/03/29 21:30:47 rillig Exp $ */
+/* $NetBSD: var.c,v 1.1153 2025/03/29 23:50:07 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.1152 2025/03/29 21:30:47 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1153 2025/03/29 23:50:07 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -3438,17 +3438,17 @@ ApplyModifier_Order(const char **pp, Mod
else if (mod[1] == 'x')
cmp = NULL;
else
- goto bad;
+ return AMR_UNKNOWN;
*pp += 2;
} else if (IsDelimiter(mod[3], ch)) {
if ((mod[1] == 'n' && mod[2] == 'r') ||
(mod[1] == 'r' && mod[2] == 'n'))
cmp = SubNumDesc;
else
- goto bad;
+ return AMR_UNKNOWN;
*pp += 3;
} else
- goto bad;
+ return AMR_UNKNOWN;
if (!ModChain_ShouldEval(ch))
return AMR_OK;
@@ -3463,10 +3463,6 @@ ApplyModifier_Order(const char **pp, Mod
Expr_SetValueOwn(ch->expr, SubstringWords_JoinFree(words));
return AMR_OK;
-
-bad:
- (*pp)++;
- return AMR_BAD;
}
/* :? then : else */
Index: src/usr.bin/make/unit-tests/varmod-order.exp
diff -u src/usr.bin/make/unit-tests/varmod-order.exp:1.17 src/usr.bin/make/unit-tests/varmod-order.exp:1.18
--- src/usr.bin/make/unit-tests/varmod-order.exp:1.17 Sat Jan 11 20:54:46 2025
+++ src/usr.bin/make/unit-tests/varmod-order.exp Sat Mar 29 23:50:07 2025
@@ -1,6 +1,6 @@
-make: "varmod-order.mk" line 14: Bad modifier ":OX"
+make: "varmod-order.mk" line 14: Unknown modifier ":OX"
while evaluating variable "WORDS" with value "one two three four five six seven eight nine ten"
-make: "varmod-order.mk" line 17: Bad modifier ":OxXX"
+make: "varmod-order.mk" line 17: Unknown modifier ":OxXX"
while evaluating variable "WORDS" with value "one two three four five six seven eight nine ten"
make: "varmod-order.mk" line 20: Unclosed expression, expecting '}' for modifier "O"
while evaluating variable "WORDS" with value "eight five four nine one seven six ten three two"
@@ -8,22 +8,20 @@ make: "varmod-order.mk" line 22: Unclose
while evaluating variable "NUMBERS" with value "1 2 3 4 5 6 7 8 9 10"
make: "varmod-order.mk" line 24: Unclosed expression, expecting '}' for modifier "Onr"
while evaluating variable "NUMBERS" with value "10 9 8 7 6 5 4 3 2 1"
-make: "varmod-order.mk" line 30: Bad modifier ":Oxn"
+make: "varmod-order.mk" line 30: Unknown modifier ":Oxn"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 39: Bad modifier ":On_typo"
+make: "varmod-order.mk" line 39: Unknown modifier ":On_typo"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 48: Bad modifier ":Onr_typo"
+make: "varmod-order.mk" line 48: Unknown modifier ":Onr_typo"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 57: Bad modifier ":Orn_typo"
+make: "varmod-order.mk" line 57: Unknown modifier ":Orn_typo"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 68: Bad modifier ":Onn"
+make: "varmod-order.mk" line 68: Unknown modifier ":Onn"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 77: Bad modifier ":Onrr"
+make: "varmod-order.mk" line 77: Unknown modifier ":Onrr"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 86: Bad modifier ":Orrn"
+make: "varmod-order.mk" line 86: Unknown modifier ":Orrn"
while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2"
-make: "varmod-order.mk" line 100: Bad modifier ":On=Off"
- while evaluating variable "SWITCH" with value "On"
make: Fatal errors encountered -- cannot continue
make: stopped making "all" in unit-tests
exit status 1
Index: src/usr.bin/make/unit-tests/varmod-order.mk
diff -u src/usr.bin/make/unit-tests/varmod-order.mk:1.18 src/usr.bin/make/unit-tests/varmod-order.mk:1.19
--- src/usr.bin/make/unit-tests/varmod-order.mk:1.18 Sat Jan 11 20:54:46 2025
+++ src/usr.bin/make/unit-tests/varmod-order.mk Sat Mar 29 23:50:07 2025
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-order.mk,v 1.18 2025/01/11 20:54:46 rillig Exp $
+# $NetBSD: varmod-order.mk,v 1.19 2025/03/29 23:50:07 rillig Exp $
#
# Tests for the :O variable modifier and its variants, which either sort the
# words of the value or shuffle them.
@@ -10,10 +10,10 @@ NUMBERS= 8 5 4 9 1 7 6 10 3 2 # in Engli
. error ${WORDS:O}
.endif
-# expect+1: Bad modifier ":OX"
+# expect+1: Unknown modifier ":OX"
_:= ${WORDS:OX}
-# expect+1: Bad modifier ":OxXX"
+# expect+1: Unknown modifier ":OxXX"
_:= ${WORDS:OxXX}
# expect+1: Unclosed expression, expecting '}' for modifier "O"
@@ -26,7 +26,7 @@ _:= ${NUMBERS:Onr
# Shuffling numerically doesn't make sense, so don't allow 'x' and 'n' to be
# combined.
#
-# expect+1: Bad modifier ":Oxn"
+# expect+1: Unknown modifier ":Oxn"
.if ${NUMBERS:Oxn}
. error
.else
@@ -35,7 +35,7 @@ _:= ${NUMBERS:Onr
# Extra characters after ':On' are detected and diagnosed.
#
-# expect+1: Bad modifier ":On_typo"
+# expect+1: Unknown modifier ":On_typo"
.if ${NUMBERS:On_typo}
. error
.else
@@ -44,7 +44,7 @@ _:= ${NUMBERS:Onr
# Extra characters after ':Onr' are detected and diagnosed.
#
-# expect+1: Bad modifier ":Onr_typo"
+# expect+1: Unknown modifier ":Onr_typo"
.if ${NUMBERS:Onr_typo}
. error
.else
@@ -53,7 +53,7 @@ _:= ${NUMBERS:Onr
# Extra characters after ':Orn' are detected and diagnosed.
#
-# expect+1: Bad modifier ":Orn_typo"
+# expect+1: Unknown modifier ":Orn_typo"
.if ${NUMBERS:Orn_typo}
. error
.else
@@ -64,7 +64,7 @@ _:= ${NUMBERS:Onr
# criteria are fixed, not computed, therefore allowing this redundancy does
# not make sense.
#
-# expect+1: Bad modifier ":Onn"
+# expect+1: Unknown modifier ":Onn"
.if ${NUMBERS:Onn}
. error
.else
@@ -73,7 +73,7 @@ _:= ${NUMBERS:Onr
# Repeating the 'r' is not supported as well, for the same reasons as above.
#
-# expect+1: Bad modifier ":Onrr"
+# expect+1: Unknown modifier ":Onrr"
.if ${NUMBERS:Onrr}
. error
.else
@@ -82,7 +82,7 @@ _:= ${NUMBERS:Onr
# Repeating the 'r' is not supported as well, for the same reasons as above.
#
-# expect+1: Bad modifier ":Orrn"
+# expect+1: Unknown modifier ":Orrn"
.if ${NUMBERS:Orrn}
. error
.else
@@ -91,16 +91,10 @@ _:= ${NUMBERS:Onr
# If a modifier that starts with ':O' is not one of the known sort or shuffle
-# forms, it is a parse error. Several other modifiers such as ':H' or ':u'
-# fall back to the SysV modifier, for example, ':H=new' is not the standard
-# ':H' modifier but instead replaces a trailing 'H' with 'new' in each word.
-# There is no such fallback for the ':O' modifiers.
+# forms, fall back to the SysV modifier.
SWITCH= On
-# expect+1: Bad modifier ":On=Off"
.if ${SWITCH:On=Off} != "Off"
. error
-.else
-. error
.endif
all:
Index: src/usr.bin/make/unit-tests/varparse-errors.exp
diff -u src/usr.bin/make/unit-tests/varparse-errors.exp:1.18 src/usr.bin/make/unit-tests/varparse-errors.exp:1.19
--- src/usr.bin/make/unit-tests/varparse-errors.exp:1.18 Sat Mar 29 21:30:47 2025
+++ src/usr.bin/make/unit-tests/varparse-errors.exp Sat Mar 29 23:50:07 2025
@@ -2,14 +2,14 @@ make: "varparse-errors.mk" line 38: Unkn
while evaluating "${:U:Z}" with value ""
make: "varparse-errors.mk" line 47: Unknown modifier ":Z"
while evaluating "${:U:Z}post" with value ""
-make: "varparse-errors.mk" line 73: Bad modifier ":OX"
+make: "varparse-errors.mk" line 73: Unknown modifier ":OX"
while evaluating "${:U:OX:U${IND}} ${:U:OX:U${IND}}" with value ""
-make: "varparse-errors.mk" line 73: Bad modifier ":OX"
+make: "varparse-errors.mk" line 73: Unknown modifier ":OX"
while evaluating "${:OX}" with value ""
while evaluating variable "IND" with value "${:OX}"
-make: "varparse-errors.mk" line 73: Bad modifier ":OX"
+make: "varparse-errors.mk" line 73: Unknown modifier ":OX"
while evaluating "${:U:OX:U${IND}}" with value ""
-make: "varparse-errors.mk" line 73: Bad modifier ":OX"
+make: "varparse-errors.mk" line 73: Unknown modifier ":OX"
while evaluating "${:OX}" with value ""
while evaluating variable "IND" with value "${:OX}"
make: "varparse-errors.mk" line 81: Unclosed expression, expecting '}' for modifier "Q"
Index: src/usr.bin/make/unit-tests/varmod.mk
diff -u src/usr.bin/make/unit-tests/varmod.mk:1.23 src/usr.bin/make/unit-tests/varmod.mk:1.24
--- src/usr.bin/make/unit-tests/varmod.mk:1.23 Sat Mar 29 20:19:58 2025
+++ src/usr.bin/make/unit-tests/varmod.mk Sat Mar 29 23:50:07 2025
@@ -1,4 +1,4 @@
-# $NetBSD: varmod.mk,v 1.23 2025/03/29 20:19:58 rillig Exp $
+# $NetBSD: varmod.mk,v 1.24 2025/03/29 23:50:07 rillig Exp $
#
# Tests for variable modifiers, such as :Q, :S,from,to or :Ufallback.
#
@@ -47,7 +47,7 @@
# | L | no-colon | | no |
# | M | individual | custom parser | no |
# | N | individual | custom parser | no |
-# | O | strict | only literal value | no |
+# | O | strict | only literal value | yes |
# | P | no-colon | | no |
# | Q | strict | | yes |
# | R | strict | | yes |
Index: src/usr.bin/make/unit-tests/varparse-errors.mk
diff -u src/usr.bin/make/unit-tests/varparse-errors.mk:1.21 src/usr.bin/make/unit-tests/varparse-errors.mk:1.22
--- src/usr.bin/make/unit-tests/varparse-errors.mk:1.21 Sat Mar 29 21:30:48 2025
+++ src/usr.bin/make/unit-tests/varparse-errors.mk Sat Mar 29 23:50:07 2025
@@ -1,4 +1,4 @@
-# $NetBSD: varparse-errors.mk,v 1.21 2025/03/29 21:30:48 rillig Exp $
+# $NetBSD: varparse-errors.mk,v 1.22 2025/03/29 23:50:07 rillig Exp $
# Tests for parsing and evaluating all kinds of expressions.
#
@@ -66,10 +66,10 @@ VAR.${:U:Z}post= unknown modifier with t
#
#.MAKEFLAGS: -dv
IND= ${:OX}
-# expect+4: Bad modifier ":OX"
-# expect+3: Bad modifier ":OX"
-# expect+2: Bad modifier ":OX"
-# expect+1: Bad modifier ":OX"
+# expect+4: Unknown modifier ":OX"
+# expect+3: Unknown modifier ":OX"
+# expect+2: Unknown modifier ":OX"
+# expect+1: Unknown modifier ":OX"
_:= ${:U:OX:U${IND}} ${:U:OX:U${IND}}
#.MAKEFLAGS: -d0