diff options
Diffstat (limited to 'contrib/bmake/unit-tests/opt-debug-file.mk')
-rw-r--r-- | contrib/bmake/unit-tests/opt-debug-file.mk | 53 |
1 files changed, 45 insertions, 8 deletions
diff --git a/contrib/bmake/unit-tests/opt-debug-file.mk b/contrib/bmake/unit-tests/opt-debug-file.mk index 1ed477ef3c40..e6c23c4faa1a 100644 --- a/contrib/bmake/unit-tests/opt-debug-file.mk +++ b/contrib/bmake/unit-tests/opt-debug-file.mk @@ -1,4 +1,4 @@ -# $NetBSD: opt-debug-file.mk,v 1.4 2020/10/05 19:27:48 rillig Exp $ +# $NetBSD: opt-debug-file.mk,v 1.10 2023/11/19 21:47:52 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. +# value contains ${:Uexpanded}. This expression is expanded +# 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,12 +28,47 @@ DEBUG_OUTPUT:= ${:!cat opt-debug-file.debuglog!} # 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 -_!= rm opt-debug-file.debuglog +.MAKEFLAGS: -d0 + + +# See Parse_Error. +.MAKEFLAGS: -dFstdout +# expect+1: This goes to stderr only, once. +. info This goes to stderr only, once. +.MAKEFLAGS: -dFstderr +# expect+1: This goes to stderr only, once. +. info This goes to stderr only, once. +.MAKEFLAGS: -dFopt-debug-file.debuglog +# expect+1: This goes to stderr, and in addition to the debug log. +. 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 + -all: - @:; +# 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 +# command line. +_:= ${:!rm opt-debug-file.debuglog!} +.MAKEFLAGS: -dF/nonexistent-6f21c672-a22d-4ef7/opt-debug-file.debuglog |