Home | History | Annotate | Line # | Download | only in unit-tests
opt-file.mk revision 1.16
      1  1.16  rillig # $NetBSD: opt-file.mk,v 1.16 2024/04/01 12:26:02 rillig Exp $
      2   1.1  rillig #
      3  1.14  rillig # Tests for the -f command line option, which adds a makefile to the list of
      4  1.14  rillig # files that are parsed.
      5   1.1  rillig 
      6   1.1  rillig # TODO: Implementation
      7   1.1  rillig 
      8   1.4  rillig all: .PHONY
      9   1.4  rillig all: file-ending-in-backslash
     10   1.8  rillig all: file-ending-in-backslash-mmap
     11  1.10  rillig all: line-with-trailing-whitespace
     12   1.4  rillig all: file-containing-null-byte
     13   1.3  rillig 
     14  1.14  rillig # When the filename is '-', the input comes from stdin.  This is unusual but
     15  1.14  rillig # possible.
     16   1.3  rillig #
     17   1.3  rillig # In the unlikely case where a file ends in a backslash instead of a newline,
     18  1.15  rillig # that backslash is trimmed.  See ReadLowLevelLine.
     19   1.7  rillig #
     20   1.7  rillig # make-2014.01.01.00.00.00 invoked undefined behavior, reading text from
     21   1.7  rillig # outside of the file buffer.
     22   1.7  rillig #
     23   1.7  rillig #	printf '%s' 'VAR=value\' \
     24  1.14  rillig #	| MALLOC_OPTIONS="JA" \
     25  1.14  rillig #	  MALLOC_CONF="junk:true" \
     26  1.14  rillig #	  make-2014.01.01.00.00.00 -r -f - -V VAR -dA 2>&1 \
     27   1.7  rillig #	| less
     28   1.7  rillig #
     29   1.7  rillig # The debug output shows how make happily uses freshly allocated memory (the
     30   1.7  rillig # <A5>) and already freed memory ('Z').
     31   1.7  rillig #
     32   1.7  rillig #	ParseReadLine (1): 'VAR=value\<A5><A5><A5><A5><A5><A5>'
     33   1.7  rillig #	Global:VAR = value\<A5><A5><A5><A5><A5><A5>value\<A5><A5><A5><A5><A5><A5>
     34   1.7  rillig #	ParseReadLine (2): 'alue\<A5><A5><A5><A5><A5><A5>'
     35  1.12  rillig #	ParseDependency(alue\<A5><A5><A5><A5><A5><A5>)
     36   1.7  rillig #	make-2014.01.01.00.00.00: "(stdin)" line 2: Need an operator
     37   1.7  rillig #	ParseReadLine (3): '<A5><A5><A5>ZZZZZZZZZZZZZZZZ'
     38  1.12  rillig #	ParseDependency(<A5><A5><A5>ZZZZZZZZZZZZZZZZ)
     39   1.7  rillig #
     40   1.3  rillig file-ending-in-backslash: .PHONY
     41   1.4  rillig 	@printf '%s' 'VAR=value\' \
     42   1.7  rillig 	| ${MAKE} -r -f - -V VAR
     43   1.4  rillig 
     44   1.8  rillig # Between parse.c 1.170 from 2010-12-25 and parse.c 1.511 from 2020-12-22,
     45   1.8  rillig # there was an out-of-bounds write in ParseGetLine, where line_end pointed at
     46   1.8  rillig # the end of the allocated buffer, in the special case where loadedfile_mmap
     47   1.8  rillig # had not added the final newline character.
     48   1.8  rillig file-ending-in-backslash-mmap: .PHONY
     49   1.8  rillig 	@printf '%s' 'VAR=value\' > opt-file-backslash
     50   1.8  rillig 	@${MAKE} -r -f opt-file-backslash -V VAR
     51   1.9  rillig 	@rm opt-file-backslash
     52   1.8  rillig 
     53  1.10  rillig # Since parse.c 1.511 from 2020-12-22, an assertion in ParseGetLine failed
     54  1.10  rillig # for lines that contained trailing whitespace.  Worked around in parse.c
     55  1.15  rillig # 1.513, properly fixed in parse.c 1.514 from 2020-12-22.
     56  1.10  rillig line-with-trailing-whitespace: .PHONY
     57  1.10  rillig 	@printf '%s' 'VAR=$@ ' > opt-file-trailing-whitespace
     58  1.10  rillig 	@${MAKE} -r -f opt-file-trailing-whitespace -V VAR
     59  1.10  rillig 	@rm opt-file-trailing-whitespace
     60  1.10  rillig 
     61  1.11  rillig # If a makefile contains null bytes, it is an error.  Throughout the history
     62  1.11  rillig # of make, the behavior has changed several times, sometimes intentionally,
     63  1.11  rillig # sometimes by accident.
     64   1.5  rillig #
     65   1.5  rillig #	echo 'VAR=value' | tr 'l' '\0' > zero-byte.in
     66   1.5  rillig #	printf '%s\n' 'all:' ': VAR=${VAR:Q}' >> zero-byte.in
     67   1.5  rillig #
     68   1.5  rillig #	for year in $(seq 2003 2020); do
     69   1.5  rillig #	  echo $year:
     70   1.5  rillig #	  make-$year.01.01.00.00.00 -r -f zero-byte.in
     71   1.5  rillig #	  echo "exit status $?"
     72   1.5  rillig #	  echo
     73   1.5  rillig #	done 2>&1 \
     74   1.5  rillig #	| sed "s,$PWD/,.,"
     75   1.5  rillig #
     76   1.5  rillig # This program generated the following output:
     77   1.5  rillig #
     78   1.5  rillig #	2003 to 2007:
     79   1.5  rillig #	exit status 0
     80   1.5  rillig #
     81   1.5  rillig #	2008 to 2010:
     82  1.16  rillig #	make: "(stdin)" line 1: Zero byte read from file
     83   1.5  rillig #	make: Fatal errors encountered -- cannot continue
     84   1.5  rillig #
     85   1.5  rillig #	make: stopped in .
     86   1.5  rillig #	exit status 1
     87   1.5  rillig #
     88   1.5  rillig #	2011 to 2013:
     89   1.5  rillig #	make: no target to make.
     90   1.5  rillig #
     91   1.5  rillig #	make: stopped in .
     92   1.5  rillig #	exit status 2
     93   1.5  rillig #
     94   1.6  rillig #	2014 to 2020-12-06:
     95  1.16  rillig #	make: "(stdin)" line 1: warning: Zero byte read from file, skipping rest of line.
     96   1.5  rillig #	exit status 0
     97   1.4  rillig #
     98   1.6  rillig #	Since 2020-12-07:
     99  1.16  rillig #	make: "(stdin)" line 1: Zero byte read from file
    100   1.6  rillig #	make: Fatal errors encountered -- cannot continue
    101   1.6  rillig #	make: stopped in .
    102   1.6  rillig #	exit status 1
    103  1.16  rillig #
    104  1.16  rillig #	Since 2024-04-01:
    105  1.16  rillig #	make: "(stdin)" line 1: Zero byte read from file
    106  1.16  rillig #	*** Error code 2 (continuing)
    107   1.4  rillig file-containing-null-byte: .PHONY
    108   1.4  rillig 	@printf '%s\n' 'VAR=value' 'VAR2=VALUE2' \
    109   1.4  rillig 	| tr 'l' '\0' \
    110   1.7  rillig 	| ${MAKE} -r -f - -V VAR -V VAR2
    111   1.3  rillig 
    112   1.1  rillig all:
    113   1.6  rillig 	: Making ${.TARGET}
    114