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