1 # $Id: Makefile.in,v 1.48 2015/12/07 04:06:29 sjg Exp $
3 # $NetBSD: Makefile,v 1.52 2015/05/05 21:51:09 sjg Exp $
5 # Unit tests for make(1)
6 # The main targets are:
8 # all: run all the tests
9 # test: run 'all', and compare to expected results
10 # accept: move generated output to expected results
13 # Each feature should get its own set of tests in its own suitably
14 # named makefile (*.mk), with its own set of expected results (*.exp),
15 # and it should be added to the TESTNAMES list.
20 UNIT_TESTS
:= ${.CURDIR
}
23 # Each test is in a sub-makefile.
24 # Keep the list sorted.
57 # these tests were broken by referting POSIX chanegs
58 STRICT_POSIX_TESTS
= \
65 # Override make flags for certain tests
69 OUTFILES
= ${TESTNAMES
:S
/$/.out
/}
73 CLEANFILES
+= *.rawout
*.out
*.status
*.tmp
*.core
*.tmp
74 CLEANFILES
+= obj
*.
[och
] lib
*.a
# posix1.mk
75 CLEANFILES
+= issue
* .
[ab
]* # suffixes.mk
76 CLEANRECURSIVE
+= dir dummy
# posix1.mk
80 .if
!empty
(CLEANRECURSIVE
)
81 rm -rf
${CLEANRECURSIVE}
90 .if defined
(.PARSEDIR
)
91 # ensure consistent results from sort(1)
97 # some tests need extra post-processing
98 SED_CMDS.varshell
= -e
's,^[a-z]*sh: ,,' \
99 -e
'/command/s,No such.*,not found,'
101 # the tests are actually done with sub-makes.
102 .SUFFIXES
: .mk .rawout .out
104 @echo
${TEST_MAKE} ${flags.
${.TARGET
:R
}:U-k
} -f
${.IMPSRC
}
106 { ${TEST_MAKE} ${flags.
${.TARGET
:R
}:U-k
} -f
${.IMPSRC
} \
107 2>&1 ; echo
$$?
>${.TARGET
:R
}.status
; } > ${.TARGET
}.tmp
108 @mv
${.TARGET
}.tmp
${.TARGET
}
110 # We always pretend .MAKE was called 'make'
111 # and strip ${.CURDIR}/ from the output
112 # and replace anything after 'stopped in' with unit-tests
113 # so the results can be compared.
115 @echo postprocess
${.TARGET
}
116 @
${TOOL_SED} -e
's,^${TEST_MAKE:T:C/\./\\\./g}[][0-9]*:,make:,' \
117 -e
's,${TEST_MAKE:C/\./\\\./g},make,' \
118 -e
'/stopped/s, /.*, unit-tests,' \
119 -e
's,${.CURDIR:C/\./\\\./g}/,,g' \
120 -e
's,${UNIT_TESTS:C/\./\\\./g}/,,g' ${SED_CMDS.
${.TARGET
:T
:R
}} \
121 < ${.IMPSRC
} > ${.TARGET
}.tmp
122 @echo
"exit status `cat ${.TARGET:R}.status`" >> ${.TARGET
}.tmp
123 @mv
${.TARGET
}.tmp
${.TARGET
}
125 # Compare all output files
126 test: ${OUTFILES} .PHONY
128 for
test in
${TESTNAMES}; do \
129 ${TOOL_DIFF} ${DIFF_FLAGS} ${UNIT_TESTS}/$${test}.exp
$${test}.out \
130 || failed
="$${failed}$${failed:+ }$${test}" ; \
132 if
[ -n
"$${failed}" ]; then \
133 echo
"Failed tests: $${failed}" ; false
; \
135 echo
"All tests passed" ; \
139 @for
test in
${TESTNAMES}; do \
140 cmp
-s
${UNIT_TESTS}/$${test}.exp
$${test}.out \
141 ||
{ echo
"Replacing $${test}.exp" ; \
142 cp
$${test}.out
${UNIT_TESTS}/$${test}.exp
; } \
145 .if exists
(${TEST_MAKE})
146 ${TESTNAMES
:S
/$/.rawout
/}: ${TEST_MAKE}
149 .sinclude
<bsd.obj.mk
>