freebsd-nq/tools/build/make_check/Makefile
Nik Clayton 00e13b1d67 Switch over to a different, more flexible test output protocol that's
understood by Perl's Test::Harness module and prove(1) commands.

Update README to describe the new protocol.  The work's broken down into
two main sets of changes.

First, update the existing test programs (shell scripts and C programs)
to produce output in the ok/not ok format, and to, where possible, also
produce a header describing the number of tests that are expected to be
run.

Second, provide the .t files that actually run the tests.  In some cases
these are copies of, or very similar too, scripts that already existed.
I've kept the old scripts around so that it's possible to verify that
behaviour under this new system (in terms of whether or not a test fails)
is identical to the behaviour under the old system.

Add a TODO file.
2004-11-11 19:47:55 +00:00

239 lines
6.1 KiB
Makefile

# $FreeBSD$
# Test for broken LHS expansion.
# This *must* cause make(1) to detect a recursive variable, and fail as such.
.if make(lhs_expn)
FOO= ${BAR}
BAR${NIL}= ${FOO}
FOO${BAR}= ${FOO}
.endif
DATA1= helllo
DATA2:= ${DATA1}
DATA3= ${DATA2:S/ll/rr/g}
DATA4:= ${DATA2:S/ll/rr/g}
DATA2?= allo
DATA5:= ${DATA2:S/ll/ii/g} ${DATA1:S/ll/rr/g}
DATA2= yello
DATA1:= ${DATA5:S/l/r/g}
NIL=
all:
@echo '1..14'
@echo 1:${DATA1} 2:${DATA2} 3:${DATA3} 4:${DATA4} 5:${DATA5} | \
diff -u ${.CURDIR}/regress.variables.out - || ${MAKE} failure
@echo "ok 1 - test_variables # Test variables detected no regression, output matches."
@${MAKE} double 2>/dev/null || ${MAKE} failure
@echo "ok 2 - test_targets # Test targets detected no regression."
@${MAKE} sysvmatch || ${MAKE} failure
@echo "ok 3 - sysvmatch # Test sysvmatch detected no regression."
@! ${MAKE} lhs_expn && true || ${MAKE} failure
@echo "ok 4 lhs_expn # Test lhs_expn detected no regression."
@${MAKE} notdef || ${MAKE} failure
@echo "ok 5 - notdef # Test notdef detected no regression."
@${MAKE} modifiers || ${MAKE} failure
@echo "ok 6 - modifiers # Test modifiers detected no regression."
@${MAKE} funny_targets || ${MAKE} failure
@echo "ok 7 funny_targets # Test funny_targets detected no regression."
@${MAKE} arith_expr || ${MAKE} failure
@echo "ok 8 arith_expr # Test arith_expr detected no regression."
@${MAKE} PATH_exists || ${MAKE} failure
@echo "ok 9 PATH_exists # Test PATH_exists detected no regression."
@${MAKE} double_quotes || ${MAKE} failure
@echo "ok 10 double_quotes # Test double_quotes detected no regression."
@! ${MAKE} double_quotes2 >/dev/null 2>&1 && true || ${MAKE} failure
@echo "ok 11 double_quotes2 # Test double_quotes2 detected no regression."
@${MAKE} pass_cmd_vars || ${MAKE} failure
@echo "ok 12 pass_cmd_vars # Test pass_cmd_vars detected no regression."
@${MAKE} plus_flag || ${MAKE} failure
@echo "ok 13 plus_flag # Test plus_flag detected no regression."
@! ${MAKE} shell >/dev/null 2>&1 && true || ${MAKE} failure
@echo "ok 14 shell # Test shell detected no regression."
.if make(double)
# Doubly-defined targets. make(1) will warn, but use the "right" one. If it
# switches to using the "non-right" one, it breaks things worse than a little
# regression test.
double:
@true
double:
@false
.endif
.if make(sysvmatch)
# Some versions of FreeBSD make(1) do not handle a nil LHS in sysvsubst.
sysvmatch:
@echo EMPTY ${NIL:=foo} LHS | \
diff -u ${.CURDIR}/regress.sysvmatch.out - || false
.endif
# A bogus target for the lhs_expn test; If this is reached, then the make(1)
# program has not errored out because of the recursion caused by not expanding
# the left-hand-side's embedded variables above.
lhs_expn:
@true
.if make(notdef)
# make(1) claims to only evaluate a conditional as far as is necessary
# to determine its value; that was not always the case.
.undef notdef
notdef:
.if defined(notdef) && ${notdef:U}
.endif
.endif
.if make(modifiers)
# See if make(1) supports the C modifier.
modifiers:
@if ${MAKE} -V .CURDIR:C/.// 2>&1 >/dev/null | \
grep -q "Unknown modifier 'C'"; then \
false; \
fi
.endif
.if make(funny_targets)
funny_targets: colons::target exclamation!target
colons::target:
exclamation!target:
.endif
.if make(arith_expr)
arith_expr:
# See if arithmetic expression parsing is broken.
# The different spacing below is intentional.
VALUE= 0
.if (${VALUE} < 0)||(${VALUE}>0)
.endif
.endif
.if make(PATH_exists)
PATH_exists:
.PATH: ${.CURDIR}
.if !exists(${.CURDIR}/) || !exists(${.CURDIR}/.) || !exists(${.CURDIR}/..)
.error exists() failed
.endif
.endif
.if make(double_quotes)
VALUE= foo ""
double_quotes:
.if ${VALUE:S/$//} != ${VALUE}
.error "" reduced to "
.endif
.endif
.if make(double_quotes2)
double_quotes2:
@cat /dev/null ""
.endif
#
# Check passing of variable via MAKEFLAGS
#
.if make(pass_cmd_vars)
pass_cmd_vars:
@${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_1
@${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_2
@${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_3
@${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_4
.endif
.if make(pass_cmd_vars_1)
# Check that the variable definition arrived from the calling make
pass_cmd_vars_1:
@:
.if ${CMD1} != cmd1 || ${CMD2} != cmd2
.error variables not passed through MAKEFLAGS
.endif
# Check that the variable definition is in MAKEFLAGS
.if ${.MAKEFLAGS:MCMD1=*} != "CMD1=cmd1" || ${.MAKEFLAGS:MCMD2=*} != "CMD2=cmd2"
.error variable assignment not found in $${MAKEFLAGS}
.endif
# Check that the variable definition is not in MFLAGS
.if ${MFLAGS:MCMD1=*} != "" || ${MFLAGS:MCMD2=*} != ""
.error variable assignment found in $${MFLAGS}
.endif
.endif
.if make(pass_cmd_vars_2)
# Check that we cannot override the passed variables
CMD1=foo1
CMD2=foo2
.if ${CMD1} != cmd1 || ${CMD2} != cmd2
.error MAKEFLAGS-passed variables overridden
.endif
pass_cmd_vars_2:
@:
.endif
.if make(pass_cmd_vars_3)
# Check that we can override the passed variables on the next sub-make's
# command line
pass_cmd_vars_3:
@${MAKE} CMD1=foo1 pass_cmd_vars_3_1
.endif
.if make(pass_cmd_vars_3_1)
.if ${CMD1} != foo1 || ${CMD2} != cmd2
.error MAKEFLAGS-passed variables not overridden on command line
.endif
pass_cmd_vars_3_1:
@:
.endif
.if make(pass_cmd_vars_4)
# Ensure that a variable assignment passed via MAKEFLAGS may be overwritten
# by evaluating the .MAKEFLAGS target.
.MAKEFLAGS: CMD1=baz1
pass_cmd_vars_4:
@${MAKE} pass_cmd_vars_4_1
.if ${CMD1} != baz1 || ${CMD2} != cmd2
.error MAKEFLAGS-passed variables not overridden via .MAKEFLAGS target
.endif
.endif
.if make(pass_cmd_vars_4_1)
.if ${CMD1} != baz1 || ${CMD2} != cmd2
.error MAKEFLAGS-passed variables not overridden via .MAKEFLAGS target (2)
.endif
pass_cmd_vars_4_1:
@:
.endif
#
# Test whether make supports the '+' flag (meaning: execute even with -n)
#
.if make(plus_flag)
OUT != ${MAKE} -n plus_flag_1
.if ${OUT} != "/tmp"
.error make doesn't handle + flag
.endif
plus_flag:
@:
.endif
.if make(plus_flag_1)
plus_flag_1:
+@cd /tmp; pwd
.endif
.if make(shell)
# Test if make fully supports the .SHELL specification.
.SHELL: path=/nonexistent
A!= echo ok
shell:
.endif
failure:
@echo "not ok # Test failed: regression detected. See above."
@false