Home | History | Annotate | Line # | Download | only in unit-tests
opt-debug-file.mk revision 1.7
      1 # $NetBSD: opt-debug-file.mk,v 1.7 2022/01/09 15:05:21 rillig Exp $
      2 #
      3 # Tests for the -dF command line option, which redirects the debug log
      4 # to a file instead of writing it to stderr.
      5 
      6 # Enable debug logging for variable assignments and evaluation (-dv)
      7 # and redirect the debug logging to the given file.
      8 .MAKEFLAGS: -dvFopt-debug-file.debuglog
      9 
     10 # This output goes to the debug log file.
     11 VAR=	value ${:Uexpanded}
     12 
     13 # Hide the logging output for the remaining actions.
     14 # Before main.c 1.362 from 2020-10-03, it was not possible to disable debug
     15 # logging again.  Since then, an easier way is the undocumented option '-d0'.
     16 .MAKEFLAGS: -dF/dev/null
     17 
     18 # Make sure that the debug logging file contains some logging.
     19 DEBUG_OUTPUT:=	${:!cat opt-debug-file.debuglog!}
     20 # Grmbl.  Because of the := operator in the above line, the variable
     21 # value contains ${:Uexpanded}.  This variable expression is expanded
     22 # when it is used in the condition below.  Therefore, be careful when storing
     23 # untrusted input in variables.
     24 #.MAKEFLAGS: -dc -dFstderr
     25 .if !${DEBUG_OUTPUT:tW:M*VAR = value expanded*}
     26 .  error ${DEBUG_OUTPUT}
     27 .endif
     28 
     29 # To get the unexpanded text that was actually written to the debug log
     30 # file, the content of that log file must not be stored in a variable.
     31 #
     32 # XXX: In the :M modifier, a dollar is escaped using '$$', not '\$'.  This
     33 # escaping scheme unnecessarily differs from all other modifiers.
     34 .if !${:!cat opt-debug-file.debuglog!:tW:M*VAR = value $${:Uexpanded}*}
     35 .  error
     36 .endif
     37 
     38 .MAKEFLAGS: -d0
     39 
     40 
     41 # See Parse_Error.
     42 .MAKEFLAGS: -dFstdout
     43 .  info This goes to stderr only, once.
     44 .MAKEFLAGS: -dFstderr
     45 .  info This goes to stderr only, once.
     46 .MAKEFLAGS: -dFopt-debug-file.debuglog
     47 .  info This goes to stderr, and in addition to the debug log.
     48 .MAKEFLAGS: -dFstderr -d0c
     49 .if ${:!cat opt-debug-file.debuglog!:Maddition:[#]} != 1
     50 .  error
     51 .endif
     52 
     53 
     54 # See ApplyModifier_Subst, which calls Error.
     55 .MAKEFLAGS: -dFstdout
     56 : This goes to stderr only, once. ${:U:S
     57 .MAKEFLAGS: -dFstderr
     58 : This goes to stderr only, once. ${:U:S
     59 .MAKEFLAGS: -dFopt-debug-file.debuglog
     60 : This goes to stderr, and in addition to the debug log. ${:U:S
     61 .MAKEFLAGS: -dFstderr -d0c
     62 .if ${:!cat opt-debug-file.debuglog!:Mdelimiter:[#]} != 1
     63 .  error
     64 .endif
     65 
     66 
     67 # If the debug log file cannot be opened, make prints an error message and
     68 # exits immediately since the debug log file is usually selected from the
     69 # command line.
     70 .MAKEFLAGS: -dFopt-debug-file.debuglog/file
     71 
     72 all:
     73