Makefile.in revision 281812
1281812Ssjg# $Id: Makefile.in,v 1.46 2014/11/06 01:47:57 sjg Exp $ 2236769Sobrien# 3281812Ssjg# $NetBSD: Makefile,v 1.51 2014/10/20 23:21:11 sjg Exp $ 4236769Sobrien# 5236769Sobrien# Unit tests for make(1) 6236769Sobrien# The main targets are: 7236769Sobrien# 8236769Sobrien# all: run all the tests 9281812Ssjg# test: run 'all', and compare to expected results 10236769Sobrien# accept: move generated output to expected results 11236769Sobrien# 12236769Sobrien# Adding a test case. 13236769Sobrien# Each feature should get its own set of tests in its own suitably 14281812Ssjg# named makefile (*.mk), with its own set of expected results (*.exp), 15281812Ssjg# and it should be added to the TESTNAMES list. 16236769Sobrien# 17236769Sobrien 18236769Sobriensrcdir= @srcdir@ 19236769Sobrien 20236769Sobrien.MAIN: all 21236769Sobrien 22236769SobrienUNIT_TESTS:= ${srcdir} 23281812Ssjg.PATH: ${UNIT_TESTS} 24236769Sobrien 25281812Ssjg# Each test is in a sub-makefile. 26281812Ssjg# Keep the list sorted. 27281812SsjgTESTNAMES= \ 28236769Sobrien comment \ 29236769Sobrien cond1 \ 30236769Sobrien error \ 31236769Sobrien export \ 32236769Sobrien export-all \ 33249033Ssjg export-env \ 34236769Sobrien doterror \ 35236769Sobrien dotwait \ 36237578Sobrien forloop \ 37236769Sobrien forsubst \ 38236769Sobrien hash \ 39236769Sobrien misc \ 40236769Sobrien moderrs \ 41236769Sobrien modmatch \ 42236769Sobrien modmisc \ 43236769Sobrien modorder \ 44236769Sobrien modts \ 45236769Sobrien modword \ 46243115Ssjg order \ 47236769Sobrien posix \ 48236769Sobrien qequals \ 49255253Ssjg sunshcmd \ 50236769Sobrien sysv \ 51236769Sobrien ternary \ 52236769Sobrien unexport \ 53236769Sobrien unexport-env \ 54281812Ssjg varcmd \ 55281812Ssjg varmisc \ 56281812Ssjg varshell 57236769Sobrien 58281812Ssjg# these tests were broken by referting POSIX chanegs 59281812SsjgSTRICT_POSIX_TESTS = \ 60281812Ssjg escape \ 61281812Ssjg impsrc \ 62281812Ssjg phony-end \ 63281812Ssjg posix1 \ 64281812Ssjg suffixes 65236769Sobrien 66281812Ssjg# Override make flags for certain tests 67236769Sobrienflags.doterror= 68243115Ssjgflags.order=-j1 69236769Sobrien 70281812SsjgOUTFILES= ${TESTNAMES:S/$/.out/} 71236769Sobrien 72281812Ssjgall: ${OUTFILES} 73281812Ssjg 74281812SsjgCLEANFILES += *.rawout *.out *.status *.tmp *.core *.tmp 75281812SsjgCLEANFILES += obj*.[och] lib*.a # posix1.mk 76281812SsjgCLEANFILES += issue* .[ab]* # suffixes.mk 77281812SsjgCLEANRECURSIVE += dir dummy # posix1.mk 78281812Ssjg 79236769Sobrienclean: 80281812Ssjg rm -f ${CLEANFILES} 81281812Ssjg.if !empty(CLEANRECURSIVE) 82281812Ssjg rm -rf ${CLEANRECURSIVE} 83281812Ssjg.endif 84236769Sobrien 85236769SobrienTEST_MAKE?= ${.MAKE} 86236769SobrienTOOL_SED?= sed 87236769SobrienTOOL_TR?= tr 88236769SobrienTOOL_DIFF?= diff 89236769SobrienDIFF_FLAGS?= @diff_u@ 90236769Sobrien 91249033Ssjg.if defined(.PARSEDIR) 92236769Sobrien# ensure consistent results from sort(1) 93236769SobrienLC_ALL= C 94236769SobrienLANG= C 95236769Sobrien.export LANG LC_ALL 96249033Ssjg.endif 97236769Sobrien 98281812Ssjg# some tests need extra post-processing 99281812SsjgSED_CMDS.varshell = -e 's,^[a-z]*sh: ,,' \ 100281812Ssjg -e '/command/s,No such.*,not found,' 101281812Ssjg 102281812Ssjg# the tests are actually done with sub-makes. 103281812Ssjg.SUFFIXES: .mk .rawout .out 104281812Ssjg.mk.rawout: 105281812Ssjg @echo ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC} 106281812Ssjg -@cd ${.OBJDIR} && \ 107281812Ssjg { ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC} \ 108281812Ssjg 2>&1 ; echo $$? >${.TARGET:R}.status ; } > ${.TARGET}.tmp 109281812Ssjg @mv ${.TARGET}.tmp ${.TARGET} 110281812Ssjg 111236769Sobrien# We always pretend .MAKE was called 'make' 112236769Sobrien# and strip ${.CURDIR}/ from the output 113236769Sobrien# and replace anything after 'stopped in' with unit-tests 114236769Sobrien# so the results can be compared. 115281812Ssjg.rawout.out: 116281812Ssjg @echo postprocess ${.TARGET} 117281812Ssjg @${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}[][0-9]*:,make:,' \ 118281812Ssjg -e 's,${TEST_MAKE:C/\./\\\./g},make,' \ 119281812Ssjg -e '/stopped/s, /.*, unit-tests,' \ 120281812Ssjg -e 's,${.CURDIR:C/\./\\\./g}/,,g' \ 121281812Ssjg -e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' ${SED_CMDS.${.TARGET:T:R}} \ 122281812Ssjg < ${.IMPSRC} > ${.TARGET}.tmp 123281812Ssjg @echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp 124281812Ssjg @mv ${.TARGET}.tmp ${.TARGET} 125236769Sobrien 126281812Ssjg# Compare all output files 127281812Ssjgtest: ${OUTFILES} .PHONY 128281812Ssjg @failed= ; \ 129281812Ssjg for test in ${TESTNAMES}; do \ 130281812Ssjg ${TOOL_DIFF} -u ${UNIT_TESTS}/$${test}.exp $${test}.out \ 131281812Ssjg || failed="$${failed}$${failed:+ }$${test}" ; \ 132281812Ssjg done ; \ 133281812Ssjg if [ -n "$${failed}" ]; then \ 134281812Ssjg echo "Failed tests: $${failed}" ; false ; \ 135281812Ssjg else \ 136281812Ssjg echo "All tests passed" ; \ 137281812Ssjg fi 138281812Ssjg 139236769Sobrienaccept: 140281812Ssjg @for test in ${TESTNAMES}; do \ 141281812Ssjg cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \ 142281812Ssjg || { echo "Replacing $${test}.exp" ; \ 143281812Ssjg cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \ 144281812Ssjg done 145236769Sobrien 146281812Ssjg.if exists(${TEST_MAKE}) 147281812Ssjg${TESTNAMES:S/$/.rawout/}: ${TEST_MAKE} 148281812Ssjg.endif 149281812Ssjg 150281812Ssjg.-include <obj.mk> 151