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