Module Name:    src
Committed By:   rillig
Date:           Sun Jan  9 15:05:21 UTC 2022

Modified Files:
        src/usr.bin/make/unit-tests: opt-debug-file.exp opt-debug-file.mk

Log Message:
tests/make: test output channels for parse errors and other errors


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/opt-debug-file.exp
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/opt-debug-file.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/unit-tests/opt-debug-file.exp
diff -u src/usr.bin/make/unit-tests/opt-debug-file.exp:1.3 src/usr.bin/make/unit-tests/opt-debug-file.exp:1.4
--- src/usr.bin/make/unit-tests/opt-debug-file.exp:1.3	Mon Dec 27 22:22:48 2021
+++ src/usr.bin/make/unit-tests/opt-debug-file.exp	Sun Jan  9 15:05:21 2022
@@ -1,2 +1,12 @@
+make: "opt-debug-file.mk" line 43: This goes to stderr only, once.
+make: "opt-debug-file.mk" line 45: This goes to stderr only, once.
+make: "opt-debug-file.mk" line 47: This goes to stderr, and in addition to the debug log.
+CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Maddition:[#]} != 1
+lhs = 1.000000, rhs = 1.000000, op = !=
+make: Missing delimiter for modifier ':S'
+make: Missing delimiter for modifier ':S'
+make: Missing delimiter for modifier ':S'
+CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Mdelimiter:[#]} != 1
+lhs = 1.000000, rhs = 1.000000, op = !=
 Cannot open debug file "opt-debug-file.debuglog/file"
 exit status 2

Index: src/usr.bin/make/unit-tests/opt-debug-file.mk
diff -u src/usr.bin/make/unit-tests/opt-debug-file.mk:1.6 src/usr.bin/make/unit-tests/opt-debug-file.mk:1.7
--- src/usr.bin/make/unit-tests/opt-debug-file.mk:1.6	Tue Dec 28 01:04:04 2021
+++ src/usr.bin/make/unit-tests/opt-debug-file.mk	Sun Jan  9 15:05:21 2022
@@ -1,4 +1,4 @@
-# $NetBSD: opt-debug-file.mk,v 1.6 2021/12/28 01:04:04 rillig Exp $
+# $NetBSD: opt-debug-file.mk,v 1.7 2022/01/09 15:05:21 rillig Exp $
 #
 # Tests for the -dF command line option, which redirects the debug log
 # to a file instead of writing it to stderr.
@@ -11,14 +11,16 @@
 VAR=	value ${:Uexpanded}
 
 # Hide the logging output for the remaining actions.
-# As of 2020-10-03, it is not possible to disable debug logging again.
+# Before main.c 1.362 from 2020-10-03, it was not possible to disable debug
+# logging again.  Since then, an easier way is the undocumented option '-d0'.
 .MAKEFLAGS: -dF/dev/null
 
 # Make sure that the debug logging file contains some logging.
 DEBUG_OUTPUT:=	${:!cat opt-debug-file.debuglog!}
 # Grmbl.  Because of the := operator in the above line, the variable
 # value contains ${:Uexpanded}.  This variable expression is expanded
-# upon further processing.  Therefore, don't read from untrusted input.
+# when it is used in the condition below.  Therefore, be careful when storing
+# untrusted input in variables.
 #.MAKEFLAGS: -dc -dFstderr
 .if !${DEBUG_OUTPUT:tW:M*VAR = value expanded*}
 .  error ${DEBUG_OUTPUT}
@@ -26,11 +28,41 @@ DEBUG_OUTPUT:=	${:!cat opt-debug-file.de
 
 # To get the unexpanded text that was actually written to the debug log
 # file, the content of that log file must not be stored in a variable.
-# XXX: In the :M modifier, a dollar is escaped as '$$', not '\$'.
+#
+# XXX: In the :M modifier, a dollar is escaped using '$$', not '\$'.  This
+# escaping scheme unnecessarily differs from all other modifiers.
 .if !${:!cat opt-debug-file.debuglog!:tW:M*VAR = value $${:Uexpanded}*}
 .  error
 .endif
 
+.MAKEFLAGS: -d0
+
+
+# See Parse_Error.
+.MAKEFLAGS: -dFstdout
+.  info This goes to stderr only, once.
+.MAKEFLAGS: -dFstderr
+.  info This goes to stderr only, once.
+.MAKEFLAGS: -dFopt-debug-file.debuglog
+.  info This goes to stderr, and in addition to the debug log.
+.MAKEFLAGS: -dFstderr -d0c
+.if ${:!cat opt-debug-file.debuglog!:Maddition:[#]} != 1
+.  error
+.endif
+
+
+# See ApplyModifier_Subst, which calls Error.
+.MAKEFLAGS: -dFstdout
+: This goes to stderr only, once. ${:U:S
+.MAKEFLAGS: -dFstderr
+: This goes to stderr only, once. ${:U:S
+.MAKEFLAGS: -dFopt-debug-file.debuglog
+: This goes to stderr, and in addition to the debug log. ${:U:S
+.MAKEFLAGS: -dFstderr -d0c
+.if ${:!cat opt-debug-file.debuglog!:Mdelimiter:[#]} != 1
+.  error
+.endif
+
 
 # If the debug log file cannot be opened, make prints an error message and
 # exits immediately since the debug log file is usually selected from the

Reply via email to