diff options
Diffstat (limited to 'unit-tests/opt-debug-file.mk')
-rw-r--r-- | unit-tests/opt-debug-file.mk | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/unit-tests/opt-debug-file.mk b/unit-tests/opt-debug-file.mk new file mode 100644 index 000000000000..1ed477ef3c40 --- /dev/null +++ b/unit-tests/opt-debug-file.mk @@ -0,0 +1,37 @@ +# $NetBSD: opt-debug-file.mk,v 1.4 2020/10/05 19:27:48 rillig Exp $ +# +# Tests for the -dF command line option, which redirects the debug log +# to a file instead of writing it to stderr. + +# Enable debug logging for variable assignments and evaluation (-dv) +# and redirect the debug logging to the given file. +.MAKEFLAGS: -dvFopt-debug-file.debuglog + +# This output goes to the debug log file. +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. +.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. +#.MAKEFLAGS: -dc -dFstderr +.if !${DEBUG_OUTPUT:tW:M*VAR = value expanded*} +. error ${DEBUG_OUTPUT} +.endif + +# 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 '\$'. +.if !${:!cat opt-debug-file.debuglog!:tW:M*VAR = value $${:Uexpanded}*} +. error +.endif + +_!= rm opt-debug-file.debuglog + +all: + @:; |