head	1.23;
access;
symbols
	netbsd-10-2-RELEASE:1.9
	netbsd-11-0-RELEASE:1.22
	netbsd-11-0-RC7:1.22
	netbsd-11-0-RC6:1.22
	netbsd-11-0-RC5:1.22
	netbsd-11-0-RC4:1.22
	netbsd-11-0-RC3:1.22
	netbsd-11-0-RC2:1.22
	netbsd-11-0-RC1:1.22
	perseant-exfatfs-base-20250801:1.22
	netbsd-11:1.22.0.2
	netbsd-11-base:1.22
	netbsd-10-1-RELEASE:1.9
	perseant-exfatfs-base-20240630:1.12
	perseant-exfatfs:1.12.0.2
	perseant-exfatfs-base:1.12
	netbsd-10-0-RELEASE:1.9
	netbsd-10-0-RC6:1.9
	netbsd-10-0-RC5:1.9
	netbsd-10-0-RC4:1.9
	netbsd-10-0-RC3:1.9
	netbsd-10-0-RC2:1.9
	netbsd-10-0-RC1:1.9
	netbsd-10:1.9.0.6
	netbsd-10-base:1.9
	cjep_sun2x-base1:1.9
	cjep_sun2x:1.9.0.4
	cjep_sun2x-base:1.9
	cjep_staticlib_x-base1:1.9
	cjep_staticlib_x:1.9.0.2
	cjep_staticlib_x-base:1.9;
locks; strict;
comment	@# @;


1.23
date	2026.08.22.19.18.44;	author rillig;	state Exp;
branches;
next	1.22;
commitid	z7bVUPoRLumlsFSG;

1.22
date	2025.06.28.22.39.29;	author rillig;	state Exp;
branches;
next	1.21;
commitid	CDDpACH2g2jV3I0G;

1.21
date	2025.04.04.18.57.01;	author rillig;	state Exp;
branches;
next	1.20;
commitid	mmmOUH7D718XyLPF;

1.20
date	2025.03.30.09.51.51;	author rillig;	state Exp;
branches;
next	1.19;
commitid	veGmSzVhPiW2G4PF;

1.19
date	2025.03.29.19.08.52;	author rillig;	state Exp;
branches;
next	1.18;
commitid	y95n9TsA04p0PZOF;

1.18
date	2025.01.11.20.54.46;	author rillig;	state Exp;
branches;
next	1.17;
commitid	v92duHXtj62ZR6FF;

1.17
date	2024.08.29.20.20.36;	author rillig;	state Exp;
branches;
next	1.16;
commitid	EaMgk7FrF8mB1LnF;

1.16
date	2024.08.06.18.00.17;	author rillig;	state Exp;
branches;
next	1.15;
commitid	1R0ZDok3menTZMkF;

1.15
date	2024.07.05.19.47.22;	author rillig;	state Exp;
branches;
next	1.14;
commitid	ey8c5i7vJGMuCGgF;

1.14
date	2024.07.04.20.18.40;	author rillig;	state Exp;
branches;
next	1.13;
commitid	75IS4XOhTa8VOygF;

1.13
date	2024.07.04.17.47.54;	author rillig;	state Exp;
branches;
next	1.12;
commitid	mjDGVMgldk7QYxgF;

1.12
date	2024.04.20.10.18.55;	author rillig;	state Exp;
branches
	1.12.2.1;
next	1.11;
commitid	2fCjOO5HMlf2VR6F;

1.11
date	2023.12.17.14.07.22;	author rillig;	state Exp;
branches;
next	1.10;
commitid	yVK6h2wAREixcPQE;

1.10
date	2023.06.01.20.56.35;	author rillig;	state Exp;
branches;
next	1.9;
commitid	j3tIvMRlxolKQhrE;

1.9
date	2021.02.23.15.19.41;	author rillig;	state Exp;
branches;
next	1.8;
commitid	wGJlKlrQTIQeBQIC;

1.8
date	2021.02.23.00.15.22;	author rillig;	state Exp;
branches;
next	1.7;
commitid	MBGW2RHSSBxLBLIC;

1.7
date	2020.12.21.21.04.18;	author rillig;	state Exp;
branches;
next	1.6;
commitid	JCxnYai5KT0fyEAC;

1.6
date	2020.12.20.19.47.34;	author rillig;	state Exp;
branches;
next	1.5;
commitid	OfU1BUgRB8hOawAC;

1.5
date	2020.11.01.14.36.25;	author rillig;	state Exp;
branches;
next	1.4;
commitid	AvAdsgpszlB71cuC;

1.4
date	2020.11.01.13.55.31;	author rillig;	state Exp;
branches;
next	1.3;
commitid	B6leAPw0ynVeObuC;

1.3
date	2020.11.01.13.10.22;	author rillig;	state Exp;
branches;
next	1.2;
commitid	5toJZeNQ91pPybuC;

1.2
date	2020.08.23.15.13.21;	author rillig;	state Exp;
branches;
next	1.1;
commitid	ZRXUa0Z7hEKBuclC;

1.1
date	2020.08.16.12.07.51;	author rillig;	state Exp;
branches;
next	;
commitid	coEgPk3hgfeYGhkC;

1.12.2.1
date	2025.08.02.05.58.39;	author perseant;	state Exp;
branches;
next	;
commitid	23j6GFaDws3O875G;


desc
@@


1.23
log
@tests/make: clean up and extend a few tests
@
text
@make: varmod-range.mk:43: Variable "" is undefined
	while evaluating "${:range=5} != """ with value "1 2 3 4 5"
make: varmod-range.mk:53: Invalid number "-1}"" for modifier ":range"
	while evaluating "${:range=-1}"" with value ""
make: varmod-range.mk:68: Invalid number "x}Rest" != "Rest"" for modifier ":range"
	while evaluating "${:U:range=x}Rest" != "Rest"" with value ""
make: varmod-range.mk:78: Unknown modifier ":x0"
	while evaluating "${:U:range=0x0}Rest" != "Rest"" with value "1"
make: varmod-range.mk:95: Unknown modifier ":rang"
	while evaluating variable "a b c" with value "a b c"
make: varmod-range.mk:103: Unknown modifier ":rango"
	while evaluating variable "a b c" with value "a b c"
make: varmod-range.mk:111: Unknown modifier ":ranger"
	while evaluating variable "a b c" with value "a b c"
make: Fatal errors encountered -- cannot continue
make: stopped making "all" in unit-tests
exit status 1
@


1.22
log
@make: consistently use double quotes in error messages

Previously, some error messages used single quotes, very few used
backticks or parentheses, most already used double quotes.

While here, reword a few error messages to be clearer or more consistent
with related error messages.
@
text
@d3 3
a5 1
make: varmod-range.mk:66: Invalid number "x}Rest" != "Rest"" for modifier ":range"
d7 1
a7 1
make: varmod-range.mk:76: Unknown modifier ":x0"
d9 1
a9 1
make: varmod-range.mk:93: Unknown modifier ":rang"
d11 1
a11 1
make: varmod-range.mk:101: Unknown modifier ":rango"
d13 1
a13 1
make: varmod-range.mk:109: Unknown modifier ":ranger"
@


1.21
log
@make: fix error message for undefined variable in conditional

Previously, only ${UNDEF} had the proper error message, while
${UNDEF:M*} still produced the wrong "Malformed conditional".
@
text
@d3 1
a3 1
make: varmod-range.mk:66: Invalid number "x}Rest" != "Rest"" for ':range' modifier
@


1.20
log
@make: use '"filename" line 123' for locations instead of 'filename:123'

The format 'filename:123' is commonly used for identifying a location in
a file. Text editors recognize it and allow quick navigation through it.
The previous format was specific to make and would have required custom
support in editors.

The new format was already used in stack traces, except for the first
line. Now all lines use the same format.
@
text
@d1 2
a2 1
make: varmod-range.mk:43: Malformed conditional '${:range=5} != ""'
@


1.19
log
@make: add ":" to error message about unknown modifier

In the manual page, the modifiers are listed with a preceding ":", so
use the same pattern in the error message. This removes an inconsistency
between the error messages "Unknown modifier" and "Bad modifier".
@
text
@d1 2
a2 2
make: "varmod-range.mk" line 43: Malformed conditional '${:range=5} != ""'
make: "varmod-range.mk" line 66: Invalid number "x}Rest" != "Rest"" for ':range' modifier
d4 1
a4 1
make: "varmod-range.mk" line 76: Unknown modifier ":x0"
d6 1
a6 1
make: "varmod-range.mk" line 93: Unknown modifier ":rang"
d8 1
a8 1
make: "varmod-range.mk" line 101: Unknown modifier ":rango"
d10 1
a10 1
make: "varmod-range.mk" line 109: Unknown modifier ":ranger"
@


1.18
log
@make: omit redundant follow-up message "Malformed conditional"

If there is a parse error or an evaluation error during the conditional,
the conditional is already mentioned in the "while evaluating condition"
line, so there's no reason to repeat it once again.

Same for the "Bad condition" message from the '?:' modifier.
@
text
@d4 1
a4 1
make: "varmod-range.mk" line 76: Unknown modifier "x0"
d6 1
a6 1
make: "varmod-range.mk" line 93: Unknown modifier "rang"
d8 1
a8 1
make: "varmod-range.mk" line 101: Unknown modifier "rango"
d10 1
a10 1
make: "varmod-range.mk" line 109: Unknown modifier "ranger"
@


1.17
log
@make: reduce line length in error messages

The error messages for deeply nested parse errors were hard to decipher,
due to the large amount of text.  Split these messages into individual
lines, just as in the backtrace for .include files and .for loops.  This
unified backtrace makes the output more uniform.
@
text
@d2 1
a2 1
make: "varmod-range.mk" line 67: Invalid number "x}Rest" != "Rest"" for ':range' modifier
d4 1
a4 2
make: "varmod-range.mk" line 67: Malformed conditional '"${:U:range=x}Rest" != "Rest"'
make: "varmod-range.mk" line 78: Unknown modifier "x0"
d6 1
a6 2
make: "varmod-range.mk" line 78: Malformed conditional '"${:U:range=0x0}Rest" != "Rest"'
make: "varmod-range.mk" line 96: Unknown modifier "rang"
d8 1
a8 2
make: "varmod-range.mk" line 96: Malformed conditional '"${a b c:L:rang}Rest" != "Rest"'
make: "varmod-range.mk" line 105: Unknown modifier "rango"
d10 1
a10 2
make: "varmod-range.mk" line 105: Malformed conditional '"${a b c:L:rango}Rest" != "Rest"'
make: "varmod-range.mk" line 114: Unknown modifier "ranger"
a11 1
make: "varmod-range.mk" line 114: Malformed conditional '"${a b c:L:ranger}Rest" != "Rest"'
@


1.16
log
@make: in error message about conditionals, use single quotes

Single quotes are used less often in the conditionals themselves, which
leads to fewer confusions.
@
text
@d2 2
a3 1
make: "varmod-range.mk" line 67: while evaluating "${:U:range=x}Rest" != "Rest"" with value "": Invalid number "x}Rest" != "Rest"" for ':range' modifier
d5 2
a6 1
make: "varmod-range.mk" line 78: while evaluating "${:U:range=0x0}Rest" != "Rest"" with value "1": Unknown modifier "x0"
d8 2
a9 1
make: "varmod-range.mk" line 96: while evaluating variable "a b c" with value "a b c": Unknown modifier "rang"
d11 2
a12 1
make: "varmod-range.mk" line 105: while evaluating variable "a b c" with value "a b c": Unknown modifier "rango"
d14 2
a15 1
make: "varmod-range.mk" line 114: while evaluating variable "a b c" with value "a b c": Unknown modifier "ranger"
@


1.15
log
@make: in error messages for anonymous variables, log the value
@
text
@d1 1
a1 1
make: "varmod-range.mk" line 43: Malformed conditional (${:range=5} != "")
d3 1
a3 1
make: "varmod-range.mk" line 67: Malformed conditional ("${:U:range=x}Rest" != "Rest")
d5 1
a5 1
make: "varmod-range.mk" line 78: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
d7 1
a7 1
make: "varmod-range.mk" line 96: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
d9 1
a9 1
make: "varmod-range.mk" line 105: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
d11 1
a11 1
make: "varmod-range.mk" line 114: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
@


1.14
log
@make: on error, print the targets to be made

This helps to understand situations with several nested sub-makes in
varying directories.
@
text
@d2 1
a2 1
make: "varmod-range.mk" line 67: while evaluating "${:U:range=x}Rest" != "Rest"": Invalid number "x}Rest" != "Rest"" for ':range' modifier
d4 1
a4 1
make: "varmod-range.mk" line 78: while evaluating "${:U:range=0x0}Rest" != "Rest"": Unknown modifier "x0"
@


1.13
log
@make: add more context information to error messages

In case of a parse error or evaluation error, print the variable value
in addition to the variable name, to see the effects of previous
expression modifiers.

In nested make calls, print the current directory at the bottom of a
stack trace, as that information is otherwise hard to get in a parallel
build spanning multiple directories.
@
text
@d13 1
a13 1
make: stopped in unit-tests
@


1.12
log
@make: provide more context information for parse/evaluate errors
@
text
@d6 1
a6 1
make: "varmod-range.mk" line 96: while evaluating variable "a b c": Unknown modifier "rang"
d8 1
a8 1
make: "varmod-range.mk" line 105: while evaluating variable "a b c": Unknown modifier "rango"
d10 1
a10 1
make: "varmod-range.mk" line 114: while evaluating variable "a b c": Unknown modifier "ranger"
@


1.12.2.1
log
@Sync with HEAD
@
text
@d1 11
a11 12
make: varmod-range.mk:43: Variable "" is undefined
	while evaluating "${:range=5} != """ with value "1 2 3 4 5"
make: varmod-range.mk:66: Invalid number "x}Rest" != "Rest"" for modifier ":range"
	while evaluating "${:U:range=x}Rest" != "Rest"" with value ""
make: varmod-range.mk:76: Unknown modifier ":x0"
	while evaluating "${:U:range=0x0}Rest" != "Rest"" with value "1"
make: varmod-range.mk:93: Unknown modifier ":rang"
	while evaluating variable "a b c" with value "a b c"
make: varmod-range.mk:101: Unknown modifier ":rango"
	while evaluating variable "a b c" with value "a b c"
make: varmod-range.mk:109: Unknown modifier ":ranger"
	while evaluating variable "a b c" with value "a b c"
d13 1
a13 1
make: stopped making "all" in unit-tests
@


1.11
log
@tests/make: extend tests for include guards and empty expressions
@
text
@d2 1
a2 1
make: "varmod-range.mk" line 67: Invalid number "x}Rest" != "Rest"" for ':range' modifier
d4 1
a4 1
make: "varmod-range.mk" line 78: Unknown modifier "x0"
d6 1
a6 1
make: "varmod-range.mk" line 96: Unknown modifier "rang"
d8 1
a8 1
make: "varmod-range.mk" line 105: Unknown modifier "rango"
d10 1
a10 1
make: "varmod-range.mk" line 114: Unknown modifier "ranger"
@


1.10
log
@tests/make: force line-based diagnostics to be listed in the tests

This way, contradictions between the intended output and the actual
output are closer together and have a better chance of being spotted.
@
text
@d1 11
a11 10
make: "varmod-range.mk" line 55: Invalid number "x}Rest" != "Rest"" for ':range' modifier
make: "varmod-range.mk" line 55: Malformed conditional ("${:U:range=x}Rest" != "Rest")
make: "varmod-range.mk" line 66: Unknown modifier "x0"
make: "varmod-range.mk" line 66: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
make: "varmod-range.mk" line 84: Unknown modifier "rang"
make: "varmod-range.mk" line 84: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
make: "varmod-range.mk" line 93: Unknown modifier "rango"
make: "varmod-range.mk" line 93: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
make: "varmod-range.mk" line 102: Unknown modifier "ranger"
make: "varmod-range.mk" line 102: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
@


1.9
log
@make: improve error message for unknown modifier

Back in 1995, the modifiers were all single-character, and it made sense
to print only the first character.  Nowadays, with ':S', ':@@var@@...@@',
'::=' and several others, a little more context is useful to see where
the exact error is.  The actual modifier is still guessed, and the guess
may be wrong as soon as backslashes get involved, but it is still better
than before.
@
text
@d1 10
a10 10
make: "varmod-range.mk" line 53: Invalid number "x}Rest" != "Rest"" for ':range' modifier
make: "varmod-range.mk" line 53: Malformed conditional ("${:U:range=x}Rest" != "Rest")
make: "varmod-range.mk" line 62: Unknown modifier "x0"
make: "varmod-range.mk" line 62: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
make: "varmod-range.mk" line 78: Unknown modifier "rang"
make: "varmod-range.mk" line 78: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
make: "varmod-range.mk" line 85: Unknown modifier "rango"
make: "varmod-range.mk" line 85: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
make: "varmod-range.mk" line 92: Unknown modifier "ranger"
make: "varmod-range.mk" line 92: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
@


1.8
log
@make: add context information to error message about ':range' modifier
@
text
@d3 1
a3 1
make: "varmod-range.mk" line 62: Unknown modifier 'x'
d5 1
a5 1
make: "varmod-range.mk" line 78: Unknown modifier 'r'
d7 1
a7 1
make: "varmod-range.mk" line 85: Unknown modifier 'r'
d9 1
a9 1
make: "varmod-range.mk" line 92: Unknown modifier 'r'
@


1.7
log
@make(1): remove excess newline from parse errors (since 2020-11-01)

For the modifiers :gmtime and :localtime, the excess newline had been
added in var.c 1.631 from 2020-10-31 21:40:20.

For the modifiers :range and :ts, the excess newline had been added in
var.c 1.635 from 2020-11-01 14:36:25.
@
text
@d1 1
a1 1
make: "varmod-range.mk" line 53: Invalid number: x}Rest" != "Rest"
@


1.6
log
@make(1): error out on unknown variable modifiers at parse time

Before, make printed an "error message" that did not include the word
error and thus was not easily identified as such.  This "error message"
also did not influence the exit status in the default mode but only in
-dL mode.  The error message also didn't include any line number
information and was thus rude.
@
text
@a1 1

@


1.5
log
@make(1): treat malformed :range, :ts and :[...] as errors

Before, integer overflow in the :[1..2] modifier had not been detected,
and the actual behavior varied between ILP64 and LP64I32 machines.

Before, the :ts modifier accepted character literals like \012345 and
\x1F600, which don't fit in a single character and were thus truncated.

Before, the :range modifier issued an "Unknown modifier" error message
for :range=x, which was not quite correct.  The error message in this
case is now "Invalid number".
@
text
@d4 1
a4 1
make: Unknown modifier 'x'
d6 1
a6 1
make: Unknown modifier 'r'
d8 1
a8 1
make: Unknown modifier 'r'
d10 1
a10 1
make: Unknown modifier 'r'
@


1.4
log
@make(1): add tests for the variable modifiers :[words] and :range
@
text
@d1 3
d5 1
a5 3
make: "varmod-range.mk" line 49: Malformed conditional ("${:U:range=x}Rest" != "Rest")
make: Unknown modifier 'x'
make: "varmod-range.mk" line 58: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
d7 1
a7 1
make: "varmod-range.mk" line 74: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
d9 1
a9 1
make: "varmod-range.mk" line 81: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
d11 1
a11 1
make: "varmod-range.mk" line 88: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
@


1.3
log
@make(1): add more tests for the variable modifier :range, edge cases
@
text
@d2 1
a2 1
make: "varmod-range.mk" line 46: Malformed conditional ("${:U:range=x}Rest" != "Rest")
d4 1
a4 1
make: "varmod-range.mk" line 55: Malformed conditional ("${:U:range=0x0}Rest" != "Rest")
d6 1
a6 1
make: "varmod-range.mk" line 71: Malformed conditional ("${a b c:L:rang}Rest" != "Rest")
d8 1
a8 1
make: "varmod-range.mk" line 78: Malformed conditional ("${a b c:L:rango}Rest" != "Rest")
d10 1
a10 1
make: "varmod-range.mk" line 85: Malformed conditional ("${a b c:L:ranger}Rest" != "Rest")
@


1.2
log
@make(1): move tests for :hash :range :localtime into separate files
@
text
@d1 4
d6 1
a6 2

1 2 3
d8 1
a8 1

d10 4
a13 2

exit status 0
@


1.1
log
@make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.
@
text
@d1 7
@

