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