summaryrefslogtreecommitdiff
path: root/unit-tests/opt-debug-file.mk
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/opt-debug-file.mk')
-rw-r--r--unit-tests/opt-debug-file.mk37
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:
+ @:;