xref: /freebsd/usr.bin/bmake/tests/common.sh (revision a6889c1d5c75a77a840e1d7036bd595c01eb8c0f)
15ae59decSJulio Merino#
25ae59decSJulio Merino# Common code used run regression tests for usr.bin/make.
35ae59decSJulio Merino
45ae59decSJulio Merino#
55ae59decSJulio Merino# Output a message and exit with an error.
65ae59decSJulio Merino#
75ae59decSJulio Merinofatal()
85ae59decSJulio Merino{
95ae59decSJulio Merino	echo "fatal: $*" >/dev/stderr
105ae59decSJulio Merino	exit 1
115ae59decSJulio Merino}
125ae59decSJulio Merino
135ae59decSJulio Merinomake_is_fmake() {
145ae59decSJulio Merino	# This test is not very reliable but works for now: the old fmake
155ae59decSJulio Merino	# does have a -v option while bmake doesn't.
165ae59decSJulio Merino	${MAKE_PROG} -f Makefile.non-existent -v 2>&1 | \
175ae59decSJulio Merino	    grep -q "cannot open.*non-existent"
185ae59decSJulio Merino}
195ae59decSJulio Merino
205ae59decSJulio Merino#
215ae59decSJulio Merino# Check whether the working directory exists - it must.
225ae59decSJulio Merino#
235ae59decSJulio Merinoensure_workdir()
245ae59decSJulio Merino{
255ae59decSJulio Merino	if [ ! -d ${WORK_DIR} ] ; then
265ae59decSJulio Merino		fatal "working directory ${WORK_DIR} does not exist."
275ae59decSJulio Merino	fi
285ae59decSJulio Merino}
295ae59decSJulio Merino
305ae59decSJulio Merino#
315ae59decSJulio Merino# Make sure all tests have been run
325ae59decSJulio Merino#
335ae59decSJulio Merinoensure_run()
345ae59decSJulio Merino{
355ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
365ae59decSJulio Merino		TEST_N=1
375ae59decSJulio Merino	fi
385ae59decSJulio Merino
395ae59decSJulio Merino	FAIL=
405ae59decSJulio Merino	N=1
415ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
425ae59decSJulio Merino		if ! skip_test ${N} ; then
435ae59decSJulio Merino			if [ ! -f ${OUTPUT_DIR}/status.${N} -o \
445ae59decSJulio Merino			     ! -f ${OUTPUT_DIR}/stdout.${N} -o \
455ae59decSJulio Merino			     ! -f ${OUTPUT_DIR}/stderr.${N} ] ; then
465ae59decSJulio Merino				echo "Test ${SUBDIR}/${N} no yet run"
475ae59decSJulio Merino				FAIL=yes
485ae59decSJulio Merino			fi
495ae59decSJulio Merino		fi
505ae59decSJulio Merino		N=$((N + 1))
515ae59decSJulio Merino	done
525ae59decSJulio Merino
535ae59decSJulio Merino	if [ ! -z "${FAIL}" ] ; then
545ae59decSJulio Merino		exit 1
555ae59decSJulio Merino	fi
565ae59decSJulio Merino}
575ae59decSJulio Merino
585ae59decSJulio Merino#
59*a6889c1dSJose Luis Duran# Output usage message.
605ae59decSJulio Merino#
615ae59decSJulio Merinoprint_usage()
625ae59decSJulio Merino{
635ae59decSJulio Merino	echo "Usage: sh -v -m <path> -w <dir> $0 command(s)"
645ae59decSJulio Merino	echo " setup	- setup working directory"
655ae59decSJulio Merino	echo " run	- run the tests"
665ae59decSJulio Merino	echo " show	- show test results"
675ae59decSJulio Merino	echo " compare	- compare actual and expected results"
685ae59decSJulio Merino	echo " diff	- diff actual and expected results"
695ae59decSJulio Merino	echo " reset	- reset the test to its initial state"
705ae59decSJulio Merino	echo " clean	- delete working and output directory"
715ae59decSJulio Merino	echo " test	- setup + run + compare"
725ae59decSJulio Merino	echo " prove	- setup + run + compare + clean"
735ae59decSJulio Merino	echo " desc	- print short description"
745ae59decSJulio Merino	echo " update	- update the expected results with the current results"
755ae59decSJulio Merino	echo " help	- show this information"
765ae59decSJulio Merino}
775ae59decSJulio Merino
785ae59decSJulio Merino#
795ae59decSJulio Merino# Return 0 if we should skip the test. 1 otherwise
805ae59decSJulio Merino#
815ae59decSJulio Merinoskip_test()
825ae59decSJulio Merino{
835ae59decSJulio Merino	eval skip=\${TEST_${1}_SKIP}
845ae59decSJulio Merino	if [ -z "${skip}" ] ; then
855ae59decSJulio Merino		return 1
865ae59decSJulio Merino	else
875ae59decSJulio Merino		return 0
885ae59decSJulio Merino	fi
895ae59decSJulio Merino}
905ae59decSJulio Merino
915ae59decSJulio Merino#
925ae59decSJulio Merino# Common function for setup and reset.
935ae59decSJulio Merino#
945ae59decSJulio Merinocommon_setup()
955ae59decSJulio Merino{
965ae59decSJulio Merino	#
975ae59decSJulio Merino	# If a Makefile exists in the source directory - copy it over
985ae59decSJulio Merino	#
995ae59decSJulio Merino	if [ -e ${SRC_DIR}/Makefile.test -a ! -e ${WORK_DIR}/Makefile ] ; then
1005ae59decSJulio Merino		cp ${SRC_DIR}/Makefile.test ${WORK_DIR}/Makefile
1015ae59decSJulio Merino	fi
1025ae59decSJulio Merino
1035ae59decSJulio Merino	#
1045ae59decSJulio Merino	# If the TEST_MAKE_DIRS variable is set, create those directories
1055ae59decSJulio Merino	#
1065ae59decSJulio Merino	set -- ${TEST_MAKE_DIRS}
1075ae59decSJulio Merino	while [ $# -ne 0 ] ; do
1085ae59decSJulio Merino		if [ ! -d ${WORK_DIR}/${1} ] ; then
1095ae59decSJulio Merino			mkdir -p -m ${2} ${WORK_DIR}/${1}
1105ae59decSJulio Merino		else
1115ae59decSJulio Merino			chmod ${2} ${WORK_DIR}/${1}
1125ae59decSJulio Merino		fi
1135ae59decSJulio Merino		shift ; shift
1145ae59decSJulio Merino	done
1155ae59decSJulio Merino
1165ae59decSJulio Merino	#
1175ae59decSJulio Merino	# If the TEST_COPY_FILES variable is set, copy those files over to
1185ae59decSJulio Merino	# the working directory. The value is assumed to be pairs of
1195ae59decSJulio Merino	# filenames and modes.
1205ae59decSJulio Merino	#
1215ae59decSJulio Merino	set -- ${TEST_COPY_FILES}
1225ae59decSJulio Merino	while [ $# -ne 0 ] ; do
1235ae59decSJulio Merino		local dstname="$(echo ${1} | sed -e 's,Makefile.test,Makefile,')"
1245ae59decSJulio Merino		if [ ! -e ${WORK_DIR}/${dstname} ] ; then
1255ae59decSJulio Merino			cp ${SRC_DIR}/${1} ${WORK_DIR}/${dstname}
1265ae59decSJulio Merino		fi
1275ae59decSJulio Merino		chmod ${2} ${WORK_DIR}/${dstname}
1285ae59decSJulio Merino		shift ; shift
1295ae59decSJulio Merino	done
1305ae59decSJulio Merino
1315ae59decSJulio Merino	#
1325ae59decSJulio Merino	# If the TEST_TOUCH variable is set, it is taken to be a list
1335ae59decSJulio Merino	# of pairs of filenames and arguments to touch(1). The arguments
1345ae59decSJulio Merino	# to touch must be surrounded by single quotes if there are more
1355ae59decSJulio Merino	# than one argument.
1365ae59decSJulio Merino	#
1375ae59decSJulio Merino	eval set -- ${TEST_TOUCH}
1385ae59decSJulio Merino	while [ $# -ne 0 ] ; do
1395ae59decSJulio Merino		eval touch ${2} ${WORK_DIR}/${1}
1405ae59decSJulio Merino		shift ; shift
1415ae59decSJulio Merino	done
1425ae59decSJulio Merino
1435ae59decSJulio Merino	#
1445ae59decSJulio Merino	# Now create links
1455ae59decSJulio Merino	#
1465ae59decSJulio Merino	eval set -- ${TEST_LINKS}
1475ae59decSJulio Merino	while [ $# -ne 0 ] ; do
1485ae59decSJulio Merino		eval ln ${WORK_DIR}/${1} ${WORK_DIR}/${2}
1495ae59decSJulio Merino		shift ; shift
1505ae59decSJulio Merino	done
1515ae59decSJulio Merino}
1525ae59decSJulio Merino
1535ae59decSJulio Merino#
1545ae59decSJulio Merino# Setup the test. This creates the working and output directories and
1555ae59decSJulio Merino# populates it with files. If there is a setup_test() function - call it.
1565ae59decSJulio Merino#
1575ae59decSJulio Merinoeval_setup()
1585ae59decSJulio Merino{
1595ae59decSJulio Merino	#
1605ae59decSJulio Merino	# Check whether the working directory exists. If it does exit
1615ae59decSJulio Merino	# fatally so that we don't clobber a test the user is working on.
1625ae59decSJulio Merino	#
1635ae59decSJulio Merino	if [ -d ${WORK_DIR} ] ; then
1645ae59decSJulio Merino		fatal "working directory ${WORK_DIR} already exists."
1655ae59decSJulio Merino	fi
1665ae59decSJulio Merino
1675ae59decSJulio Merino	#
1685ae59decSJulio Merino	# Now create it and the output directory
1695ae59decSJulio Merino	#
1705ae59decSJulio Merino	mkdir -p ${WORK_DIR}
1715ae59decSJulio Merino	rm -rf ${OUTPUT_DIR}
1725ae59decSJulio Merino	mkdir -p ${OUTPUT_DIR}
1735ae59decSJulio Merino
1745ae59decSJulio Merino	#
1755ae59decSJulio Merino	# Common stuff
1765ae59decSJulio Merino	#
1775ae59decSJulio Merino	common_setup
1785ae59decSJulio Merino
1795ae59decSJulio Merino	#
1805ae59decSJulio Merino	# Now after all execute the user's setup function if it exists.
1815ae59decSJulio Merino	#
1825ae59decSJulio Merino	setup_test
1835ae59decSJulio Merino}
1845ae59decSJulio Merino
1855ae59decSJulio Merino#
1865ae59decSJulio Merino# Default setup_test function does nothing. This may be overriden by
1875ae59decSJulio Merino# the test.
1885ae59decSJulio Merino#
1895ae59decSJulio Merinosetup_test()
1905ae59decSJulio Merino{
1915ae59decSJulio Merino}
1925ae59decSJulio Merino
1935ae59decSJulio Merino#
1945ae59decSJulio Merino# Reset the test. Here we need to rely on information from the test.
1955ae59decSJulio Merino# We executed the same steps as in the setup, by try not to clobber existing
1965ae59decSJulio Merino# files.
1975ae59decSJulio Merino# All files and directories that are listed on the TEST_CLEAN_FILES
1985ae59decSJulio Merino# variable are removed. Then the TEST_TOUCH list is executed and finally
1995ae59decSJulio Merino# the reset_test() function called if it exists.
2005ae59decSJulio Merino#
2015ae59decSJulio Merinoeval_reset()
2025ae59decSJulio Merino{
2035ae59decSJulio Merino	ensure_workdir
2045ae59decSJulio Merino
2055ae59decSJulio Merino	#
2065ae59decSJulio Merino	# Clean the output directory
2075ae59decSJulio Merino	#
2085ae59decSJulio Merino	rm -rf ${OUTPUT_DIR}/*
2095ae59decSJulio Merino
2105ae59decSJulio Merino	#
2115ae59decSJulio Merino	# Common stuff
2125ae59decSJulio Merino	#
2135ae59decSJulio Merino	common_setup
2145ae59decSJulio Merino
2155ae59decSJulio Merino	#
2165ae59decSJulio Merino	# Remove files.
2175ae59decSJulio Merino	#
2185ae59decSJulio Merino	for f in ${TEST_CLEAN_FILES} ; do
2195ae59decSJulio Merino		rm -rf ${WORK_DIR}/${f}
2205ae59decSJulio Merino	done
2215ae59decSJulio Merino
2225ae59decSJulio Merino	#
2235ae59decSJulio Merino	# Execute test's function
2245ae59decSJulio Merino	#
2255ae59decSJulio Merino	reset_test
2265ae59decSJulio Merino}
2275ae59decSJulio Merino
2285ae59decSJulio Merino#
2295ae59decSJulio Merino# Default reset_test function does nothing. This may be overriden by
2305ae59decSJulio Merino# the test.
2315ae59decSJulio Merino#
2325ae59decSJulio Merinoreset_test()
2335ae59decSJulio Merino{
2345ae59decSJulio Merino}
2355ae59decSJulio Merino
2365ae59decSJulio Merino#
2375ae59decSJulio Merino# Clean the test. This simply removes the working and output directories.
2385ae59decSJulio Merino#
2395ae59decSJulio Merinoeval_clean()
2405ae59decSJulio Merino{
2415ae59decSJulio Merino	#
2425ae59decSJulio Merino	# If you have special cleaning needs, provide a 'cleanup' shell script.
2435ae59decSJulio Merino	#
2445ae59decSJulio Merino	if [ -n "${TEST_CLEANUP}" ] ; then
2455ae59decSJulio Merino		. ${SRC_DIR}/cleanup
2465ae59decSJulio Merino	fi
2475ae59decSJulio Merino	if [ -z "${NO_TEST_CLEANUP}" ] ; then
2485ae59decSJulio Merino		rm -rf ${WORK_DIR}
2495ae59decSJulio Merino		rm -rf ${OUTPUT_DIR}
2505ae59decSJulio Merino	fi
2515ae59decSJulio Merino}
2525ae59decSJulio Merino
2535ae59decSJulio Merino#
2545ae59decSJulio Merino# Run the test.
2555ae59decSJulio Merino#
2565ae59decSJulio Merinoeval_run()
2575ae59decSJulio Merino{
2585ae59decSJulio Merino	ensure_workdir
2595ae59decSJulio Merino
2605ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
2615ae59decSJulio Merino		TEST_N=1
2625ae59decSJulio Merino	fi
2635ae59decSJulio Merino
2645ae59decSJulio Merino	N=1
2655ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
2665ae59decSJulio Merino		if ! skip_test ${N} ; then
2675ae59decSJulio Merino			( cd ${WORK_DIR} ;
2685ae59decSJulio Merino			  exec 1>${OUTPUT_DIR}/stdout.${N} 2>${OUTPUT_DIR}/stderr.${N}
2695ae59decSJulio Merino			  run_test ${N}
2705ae59decSJulio Merino			  echo $? >${OUTPUT_DIR}/status.${N}
2715ae59decSJulio Merino			)
2725ae59decSJulio Merino		fi
2735ae59decSJulio Merino		N=$((N + 1))
2745ae59decSJulio Merino	done
2755ae59decSJulio Merino}
2765ae59decSJulio Merino
2775ae59decSJulio Merino#
2785ae59decSJulio Merino# Default run_test() function.  It can be replaced by the
2795ae59decSJulio Merino# user specified regression test. The argument to this function is
2805ae59decSJulio Merino# the test number.
2815ae59decSJulio Merino#
2825ae59decSJulio Merinorun_test()
2835ae59decSJulio Merino{
2845ae59decSJulio Merino	eval args=\${TEST_${1}-test${1}}
2855ae59decSJulio Merino        ${MAKE_PROG} $args
2865ae59decSJulio Merino}
2875ae59decSJulio Merino
2885ae59decSJulio Merino#
2895ae59decSJulio Merino# Show test results.
2905ae59decSJulio Merino#
2915ae59decSJulio Merinoeval_show()
2925ae59decSJulio Merino{
2935ae59decSJulio Merino	ensure_workdir
2945ae59decSJulio Merino
2955ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
2965ae59decSJulio Merino		TEST_N=1
2975ae59decSJulio Merino	fi
2985ae59decSJulio Merino
2995ae59decSJulio Merino	N=1
3005ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
3015ae59decSJulio Merino		if ! skip_test ${N} ; then
3025ae59decSJulio Merino			echo "=== Test ${N} Status =================="
3035ae59decSJulio Merino			cat ${OUTPUT_DIR}/status.${N}
3045ae59decSJulio Merino			echo ".......... Stdout .................."
3055ae59decSJulio Merino			cat ${OUTPUT_DIR}/stdout.${N}
3065ae59decSJulio Merino			echo ".......... Stderr .................."
3075ae59decSJulio Merino			cat ${OUTPUT_DIR}/stderr.${N}
3085ae59decSJulio Merino		fi
3095ae59decSJulio Merino		N=$((N + 1))
3105ae59decSJulio Merino	done
3115ae59decSJulio Merino}
3125ae59decSJulio Merino
3135ae59decSJulio Merino#
3145ae59decSJulio Merino# Compare results with expected results
3155ae59decSJulio Merino#
3165ae59decSJulio Merinoeval_compare()
3175ae59decSJulio Merino{
3185ae59decSJulio Merino	ensure_workdir
3195ae59decSJulio Merino	ensure_run
3205ae59decSJulio Merino
3215ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
3225ae59decSJulio Merino		TEST_N=1
3235ae59decSJulio Merino	fi
3245ae59decSJulio Merino
3255ae59decSJulio Merino	echo "1..${TEST_N}"
3265ae59decSJulio Merino	N=1
3275ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
3285ae59decSJulio Merino		fail=
3295ae59decSJulio Merino		todo=
3305ae59decSJulio Merino		skip=
3315ae59decSJulio Merino		if ! skip_test ${N} ; then
3325ae59decSJulio Merino			do_compare stdout ${N} || fail="${fail}stdout "
3335ae59decSJulio Merino			do_compare stderr ${N} || fail="${fail}stderr "
3345ae59decSJulio Merino			do_compare status ${N} || fail="${fail}status "
3355ae59decSJulio Merino			eval todo=\${TEST_${N}_TODO}
3365ae59decSJulio Merino		else
3375ae59decSJulio Merino			eval skip=\${TEST_${N}_SKIP}
3385ae59decSJulio Merino		fi
3395ae59decSJulio Merino		msg=
3405ae59decSJulio Merino		if [ ! -z "$fail" ]; then
3415ae59decSJulio Merino			msg="${msg}not "
3425ae59decSJulio Merino		fi
3435ae59decSJulio Merino		msg="${msg}ok ${N} ${SUBDIR}/${N}"
3445ae59decSJulio Merino		if [ ! -z "$fail" -o ! -z "$todo" -o ! -z "$skip" ]; then
3455ae59decSJulio Merino			msg="${msg} # "
3465ae59decSJulio Merino		fi
3475ae59decSJulio Merino		if [ ! -z "$skip" ] ; then
3485ae59decSJulio Merino			msg="${msg}skip ${skip}; "
3495ae59decSJulio Merino		fi
3505ae59decSJulio Merino		if [ ! -z "$todo" ] ; then
3515ae59decSJulio Merino			msg="${msg}TODO ${todo}; "
3525ae59decSJulio Merino		fi
3535ae59decSJulio Merino		if [ ! -z "$fail" ] ; then
3545ae59decSJulio Merino			msg="${msg}reason: ${fail}"
3555ae59decSJulio Merino		fi
3565ae59decSJulio Merino		echo ${msg}
3575ae59decSJulio Merino		N=$((N + 1))
3585ae59decSJulio Merino	done
3595ae59decSJulio Merino}
3605ae59decSJulio Merino
3615ae59decSJulio Merino#
3625ae59decSJulio Merino# Check if the test result is the same as the expected result.
3635ae59decSJulio Merino#
3645ae59decSJulio Merino# $1	Input file
3655ae59decSJulio Merino# $2	Test number
3665ae59decSJulio Merino#
3675ae59decSJulio Merinodo_compare()
3685ae59decSJulio Merino{
3695ae59decSJulio Merino	local EXPECTED RESULT
3705ae59decSJulio Merino	EXPECTED="${SRC_DIR}/expected.$1.$2"
3715ae59decSJulio Merino	RESULT="${OUTPUT_DIR}/$1.$2"
3725ae59decSJulio Merino
3735ae59decSJulio Merino	if [ -f $EXPECTED ]; then
3745ae59decSJulio Merino		cat $RESULT | sed -e "s,^$(basename $MAKE_PROG):,make:," | \
3755ae59decSJulio Merino		diff -u $EXPECTED -
3765ae59decSJulio Merino		#diff -q $EXPECTED - 1>/dev/null 2>/dev/null
3775ae59decSJulio Merino		return $?
3785ae59decSJulio Merino	else
3795ae59decSJulio Merino		return 1	# FAIL
3805ae59decSJulio Merino	fi
3815ae59decSJulio Merino}
3825ae59decSJulio Merino
3835ae59decSJulio Merino#
3845ae59decSJulio Merino# Diff current and expected results
3855ae59decSJulio Merino#
3865ae59decSJulio Merinoeval_diff()
3875ae59decSJulio Merino{
3885ae59decSJulio Merino	ensure_workdir
3895ae59decSJulio Merino	ensure_run
3905ae59decSJulio Merino
3915ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
3925ae59decSJulio Merino		TEST_N=1
3935ae59decSJulio Merino	fi
3945ae59decSJulio Merino
3955ae59decSJulio Merino	N=1
3965ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
3975ae59decSJulio Merino		if ! skip_test ${N} ; then
3985ae59decSJulio Merino			FAIL=
3995ae59decSJulio Merino			do_diff stdout ${N}
4005ae59decSJulio Merino			do_diff stderr ${N}
4015ae59decSJulio Merino			do_diff status ${N}
4025ae59decSJulio Merino		fi
4035ae59decSJulio Merino		N=$((N + 1))
4045ae59decSJulio Merino	done
4055ae59decSJulio Merino}
4065ae59decSJulio Merino
4075ae59decSJulio Merino#
4085ae59decSJulio Merino# Check if the test result is the same as the expected result.
4095ae59decSJulio Merino#
4105ae59decSJulio Merino# $1	Input file
4115ae59decSJulio Merino# $2	Test number
4125ae59decSJulio Merino#
4135ae59decSJulio Merinodo_diff()
4145ae59decSJulio Merino{
4155ae59decSJulio Merino	local EXPECTED RESULT
4165ae59decSJulio Merino	EXPECTED="${SRC_DIR}/expected.$1.$2"
4175ae59decSJulio Merino	RESULT="${OUTPUT_DIR}/$1.$2"
4185ae59decSJulio Merino
4195ae59decSJulio Merino	echo diff -u $EXPECTED $RESULT
4205ae59decSJulio Merino	if [ -f $EXPECTED ]; then
4215ae59decSJulio Merino		diff -u $EXPECTED $RESULT
4225ae59decSJulio Merino	else
4235ae59decSJulio Merino		echo "${EXPECTED} does not exist"
4245ae59decSJulio Merino	fi
4255ae59decSJulio Merino}
4265ae59decSJulio Merino
4275ae59decSJulio Merino#
4285ae59decSJulio Merino# Update expected results
4295ae59decSJulio Merino#
4305ae59decSJulio Merinoeval_update()
4315ae59decSJulio Merino{
4325ae59decSJulio Merino	ensure_workdir
4335ae59decSJulio Merino	ensure_run
4345ae59decSJulio Merino
4355ae59decSJulio Merino	if [ -z "${TEST_N}" ] ; then
4365ae59decSJulio Merino		TEST_N=1
4375ae59decSJulio Merino	fi
4385ae59decSJulio Merino
4395ae59decSJulio Merino	FAIL=
4405ae59decSJulio Merino	N=1
4415ae59decSJulio Merino	while [ ${N} -le ${TEST_N} ] ; do
4425ae59decSJulio Merino		if ! skip_test ${N} ; then
4435ae59decSJulio Merino			cp ${OUTPUT_DIR}/stdout.${N} expected.stdout.${N}
4445ae59decSJulio Merino			cp ${OUTPUT_DIR}/stderr.${N} expected.stderr.${N}
4455ae59decSJulio Merino			cp ${OUTPUT_DIR}/status.${N} expected.status.${N}
4465ae59decSJulio Merino		fi
4475ae59decSJulio Merino		N=$((N + 1))
4485ae59decSJulio Merino	done
4495ae59decSJulio Merino}
4505ae59decSJulio Merino
4515ae59decSJulio Merino#
4525ae59decSJulio Merino# Print description
4535ae59decSJulio Merino#
4545ae59decSJulio Merinoeval_desc()
4555ae59decSJulio Merino{
4565ae59decSJulio Merino	echo "${SUBDIR}: ${DESC}"
4575ae59decSJulio Merino}
4585ae59decSJulio Merino
4595ae59decSJulio Merino#
4605ae59decSJulio Merino# Run the test
4615ae59decSJulio Merino#
4625ae59decSJulio Merinoeval_test()
4635ae59decSJulio Merino{
4645ae59decSJulio Merino	eval_setup
4655ae59decSJulio Merino	eval_run
4665ae59decSJulio Merino	eval_compare
4675ae59decSJulio Merino}
4685ae59decSJulio Merino
4695ae59decSJulio Merino#
4705ae59decSJulio Merino# Run the test for prove(1)
4715ae59decSJulio Merino#
4725ae59decSJulio Merinoeval_prove()
4735ae59decSJulio Merino{
4745ae59decSJulio Merino	eval_setup
4755ae59decSJulio Merino	eval_run
4765ae59decSJulio Merino	eval_compare
4775ae59decSJulio Merino	eval_clean
4785ae59decSJulio Merino}
4795ae59decSJulio Merino
4805ae59decSJulio Merino#
4815ae59decSJulio Merino# Main function. Execute the command(s) on the command line.
4825ae59decSJulio Merino#
4835ae59decSJulio Merinoeval_cmd()
4845ae59decSJulio Merino{
4855ae59decSJulio Merino	if [ $# -eq 0 ] ; then
4865ae59decSJulio Merino		# if no arguments given default to 'prove'
4875ae59decSJulio Merino		set -- prove
4885ae59decSJulio Merino	fi
4895ae59decSJulio Merino
4905ae59decSJulio Merino	if ! make_is_fmake ; then
4915ae59decSJulio Merino		for i in $(jot ${TEST_N:-1}) ; do
4925ae59decSJulio Merino			eval TEST_${i}_SKIP=\"make is not fmake\"
4935ae59decSJulio Merino		done
4945ae59decSJulio Merino	fi
4955ae59decSJulio Merino
4965ae59decSJulio Merino	for i
4975ae59decSJulio Merino	do
4985ae59decSJulio Merino		case $i in
4995ae59decSJulio Merino
5005ae59decSJulio Merino		setup | run | compare | diff | clean | reset | show | \
5015ae59decSJulio Merino		test | prove | desc | update)
5025ae59decSJulio Merino			eval eval_$i
5035ae59decSJulio Merino			;;
5045ae59decSJulio Merino		* | help)
5055ae59decSJulio Merino			print_usage
5065ae59decSJulio Merino			;;
5075ae59decSJulio Merino		esac
5085ae59decSJulio Merino	done
5095ae59decSJulio Merino}
5105ae59decSJulio Merino
5115ae59decSJulio Merino##############################################################################
5125ae59decSJulio Merino#
5135ae59decSJulio Merino# Main code
5145ae59decSJulio Merino#
5155ae59decSJulio Merino
5165ae59decSJulio Merino#
5175ae59decSJulio Merino# Determine our sub-directory. Argh.
5185ae59decSJulio Merino#
5195ae59decSJulio MerinoSRC_DIR=$(dirname $0)
5205ae59decSJulio MerinoSRC_BASE=`cd ${SRC_DIR} ; while [ ! -f common.sh ] ; do cd .. ; done ; pwd`
5215ae59decSJulio MerinoSUBDIR=`echo ${SRC_DIR} | sed "s@${SRC_BASE}/@@"`
5225ae59decSJulio Merino
5235ae59decSJulio Merino#
5245ae59decSJulio Merino# Construct working directory
5255ae59decSJulio Merino#
5265ae59decSJulio MerinoWORK_DIR=$(pwd)/work/${SUBDIR}
5275ae59decSJulio MerinoOUTPUT_DIR=${WORK_DIR}.OUTPUT
5285ae59decSJulio Merino
5295ae59decSJulio Merino#
5305ae59decSJulio Merino# Make to use
5315ae59decSJulio Merino#
5325ae59decSJulio MerinoMAKE_PROG=${MAKE_PROG:-/usr/bin/make}
533