diff options
author | jmmv <jmmv@FreeBSD.org> | 2014-04-14 23:51:57 +0000 |
---|---|---|
committer | jmmv <jmmv@FreeBSD.org> | 2014-04-14 23:51:57 +0000 |
commit | 63fa6c9a5bcb0e744670fa34db16515102fe8431 (patch) | |
tree | 4a708e45badfa8bd5040762462d01df8f4160ae8 /share/mk | |
parent | 813864aadb85d56ff09c1dcac212be2307bba3ed (diff) | |
download | FreeBSD-src-63fa6c9a5bcb0e744670fa34db16515102fe8431.zip FreeBSD-src-63fa6c9a5bcb0e744670fa34db16515102fe8431.tar.gz |
MFC refactoring of the *.test.mk files.
- r263161 Make bsd.test.mk the only public mk fragment for the building of tests.
- r263172 Move FreeBSD Test Suite-specific code to a suite.test.mk file.
- r263204 Add some documentation for bsd.test.mk.
- r263217 Document support for TAP-compliant Perl test programs.
This is "make tinderbox" clean.
Diffstat (limited to 'share/mk')
-rw-r--r-- | share/mk/Makefile | 1 | ||||
-rw-r--r-- | share/mk/atf.test.mk | 8 | ||||
-rw-r--r-- | share/mk/bsd.README | 95 | ||||
-rw-r--r-- | share/mk/bsd.test.mk | 141 | ||||
-rw-r--r-- | share/mk/plain.test.mk | 8 | ||||
-rw-r--r-- | share/mk/suite.test.mk | 127 | ||||
-rw-r--r-- | share/mk/tap.test.mk | 8 |
7 files changed, 255 insertions, 133 deletions
diff --git a/share/mk/Makefile b/share/mk/Makefile index c776134..7d70df7 100644 --- a/share/mk/Makefile +++ b/share/mk/Makefile @@ -46,6 +46,7 @@ FILESDIR= ${BINDIR}/mk .if ${MK_TESTS} != "no" FILES+= atf.test.mk FILES+= plain.test.mk +FILES+= suite.test.mk FILES+= tap.test.mk .endif diff --git a/share/mk/atf.test.mk b/share/mk/atf.test.mk index 3ffb2cb..1be7244 100644 --- a/share/mk/atf.test.mk +++ b/share/mk/atf.test.mk @@ -1,9 +1,13 @@ # $FreeBSD$ # +# You must include bsd.test.mk instead of this file from your Makefile. +# # Logic to build and install ATF test programs; i.e. test programs linked # against the ATF libraries. -.include <bsd.init.mk> +.if !target(__<bsd.test.mk>__) +.error atf.test.mk cannot be included directly. +.endif # List of C, C++ and shell test programs to build. # @@ -164,5 +168,3 @@ realtest: .PHONY .endif .endif - -.include <bsd.test.mk> diff --git a/share/mk/bsd.README b/share/mk/bsd.README index a9adc1f..ba62100 100644 --- a/share/mk/bsd.README +++ b/share/mk/bsd.README @@ -39,6 +39,7 @@ bsd.prog.mk - building programs from source files bsd.snmpmod.mk - building modules for the SNMP daemon bsnmpd bsd.subdir.mk - targets for building subdirectories bsd.sys.mk - common settings used for building FreeBSD sources +bsd.test.mk - building test programs from source files sys.mk - default rules for all makes This file does not document bsd.port*.mk. They are documented in ports(7). @@ -365,3 +366,97 @@ It has rules for building profiled objects; profiled libraries are built by default. Libraries are ranlib'd before installation. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +The include file <bsd.test.mk> handles building one or more test programs +intended to be used in the FreeBSD Test Suite under /usr/tests/. + +It has seven targets: + + all: + build the test programs. + clean: + remove the test programs and any object files. + cleandir: + remove all of the files removed by the target clean, as + well as .depend and tags. + depend: + make the dependencies for the source files, and store + them in the file .depend. + install: + install the test programs and their data files; if the + Makefile does not itself define the target install, the + targets beforeinstall and afterinstall may also be used + to cause actions immediately before and after the + install target is executed. + lint: + run lint on the source files. + tags: + create a tags file for the source files. + test: + runs the test programs from the object directory; if the + Makefile does not itself define the target test, the + targets beforetest and aftertest may also be used to + cause actions immediately before and after the test + target is executed. + +It sets/uses the following variables, among many others: + +TESTDIR Path to the installed tests. Must be a subdirectory of + TESTSBASE and the subpath should match the relative + location of the tests within the src tree. + +KYUAFILE If 'auto' (the default), generate a Kyuafile out of the + test programs defined in the Makefile. If 'yes', then a + manually-crafted Kyuafile must be supplied with the + sources. If 'no', no Kyuafile is installed (useful for + subdirectories providing helper programs or data files + only). + +ATF_TESTS_C The names of the ATF C test programs to build. + +ATF_TESTS_CXX The names of the ATF C++ test programs to build. + +ATF_TESTS_SH The names of the ATF sh test programs to build. + +PLAIN_TESTS_C The names of the plain (legacy) programs to build. + +PLAIN_TESTS_CXX The names of the plain (legacy) test programs to build. + +PLAIN_TESTS_SH The names of the plain (legacy) test programs to build. + +TAP_PERL_INTERPRETER + Path to the Perl interpreter to be used for + TAP-compliant test programs that are written in Perl. + Refer to TAP_TESTS_PERL for details. + +TAP_TESTS_C The names of the TAP-compliant C test programs to build. + +TAP_TESTS_CXX The names of the TAP-compliant C++ test programs to + build. + +TAP_TESTS_PERL The names of the TAP-compliant Perl test programs to + build. The corresponding source files should end with + the .pl extension; the test program is marked as + requiring Perl; and TAP_PERL_INTERPRETER is used in the + built scripts as the interpreter of choice. + +TAP_TESTS_SH The names of the TAP-compliant sh test programs to + build. + +TESTS_SUBDIRS List of subdirectories containing tests into which to + recurse. Differs from SUBDIR in that these directories + get registered into the automatically-generated + Kyuafile (if any). + +NOT_FOR_TEST_SUITE + If defined, none of the built test programs get + installed under /usr/tests/ and no Kyuafile is + automatically generated. Should not be used within the + FreeBSD source tree but is provided for the benefit of + third-parties. + +The actual building of the test programs is performed by <bsd.prog.mk>. +Please see the documentation above for this other file for additional +details on the behavior of <bsd.test.mk>. diff --git a/share/mk/bsd.test.mk b/share/mk/bsd.test.mk index ee96f77..2e4b49d 100644 --- a/share/mk/bsd.test.mk +++ b/share/mk/bsd.test.mk @@ -2,23 +2,13 @@ # # Generic build infrastructure for test programs. # -# The code in this file is independent of the implementation of the test -# programs being built; this file just provides generic infrastructure for the -# build and the definition of various helper variables and targets. -# -# Makefiles should never include this file directly. Instead, they should -# include one of the various *.test.mk depending on the specific test programs -# being built. +# This is the only public file that should be included by Makefiles when +# tests are to be built. All other *.test.mk files are internal and not +# to be included directly. .include <bsd.init.mk> -# Directory in which to install tests defined by the current Makefile. -# Makefiles have to override this to point to a subdirectory of TESTSBASE. -TESTSDIR?= . - -# Name of the test suite these tests belong to. Should rarely be changed for -# Makefiles built into the FreeBSD src tree. -TESTSUITE?= FreeBSD +__<bsd.test.mk>__: # List of subdirectories containing tests into which to recurse. This has the # same semantics as SUBDIR at build-time. However, the directories listed here @@ -29,31 +19,10 @@ TESTSUITE?= FreeBSD # SUBDIR for directories that may contain helper binaries and/or data files. TESTS_SUBDIRS?= -# Knob to control the handling of the Kyuafile for this Makefile. -# -# If 'yes', a Kyuafile exists in the source tree and is installed into -# TESTSDIR. -# -# If 'auto', a Kyuafile is automatically generated based on the list of test -# programs built by the Makefile and is installed into TESTSDIR. This is the -# default and is sufficient in the majority of the cases. -# -# If 'no', no Kyuafile is installed. -KYUAFILE?= auto - -# Per-test program interface definition. -# -# The name provided here must match one of the interface names supported by -# Kyua as this is later encoded in the Kyuafile test program definitions. -#TEST_INTERFACE.<test-program>= interface-name - -# Per-test program metadata properties as a list of key/value pairs. -# -# All the variables for a particular program are appended to the program's -# definition in the Kyuafile. This feature can be used to avoid having to -# explicitly supply a Kyuafile in the source directory, allowing the caller -# Makefile to rely on the KYUAFILE=auto behavior defined here. -#TEST_METADATA.<test-program>+= key="value" +# If defined, indicates that the tests built by the Makefile are not part of +# the FreeBSD Test Suite. The implication of this is that the tests won't be +# installed under /usr/tests/ and that Kyua won't be able to run them. +#NOT_FOR_TEST_SUITE= # List of variables to pass to the tests at run-time via the environment. TESTS_ENV?= @@ -67,17 +36,14 @@ TESTS_ENV+= PATH=${TESTS_PATH:tW:C/ +/:/g} TESTS_LD_LIBRARY_PATH+= ${DESTDIR}/lib ${DESTDIR}/usr/lib TESTS_ENV+= LD_LIBRARY_PATH=${TESTS_LD_LIBRARY_PATH:tW:C/ +/:/g} -# List of all tests being built. This variable is internal should not be -# defined by the Makefile. The various *.test.mk modules extend this variable -# as needed. -_TESTS?= +# List of all tests being built. The various *.test.mk modules extend this +# variable as needed. +_TESTS= -# Path to the prefix of the installed Kyua CLI, if any. -# -# If kyua is installed from ports, we automatically define a realtest target -# below to run the tests using this tool. The tools are searched for in the -# hierarchy specified by this variable. -KYUA_PREFIX?= /usr/local +# Pull in the definitions of all supported test interfaces. +.include <atf.test.mk> +.include <plain.test.mk> +.include <tap.test.mk> .if !empty(TESTS_SUBDIRS) SUBDIR+= ${TESTS_SUBDIRS} @@ -93,82 +59,9 @@ WITHOUT_MAN=yes PROG_VARS+= BINDIR PROGS_TARGETS+= install -.if ${KYUAFILE:tl} == "yes" -FILES+= Kyuafile -FILESDIR_Kyuafile= ${TESTSDIR} - -CLEANFILES+= Kyuafile.auto Kyuafile.auto.tmp -.elif ${KYUAFILE:tl} == "auto" -FILES+= Kyuafile.auto -FILESDIR_Kyuafile.auto= ${TESTSDIR} -FILESNAME_Kyuafile.auto= Kyuafile - -CLEANFILES+= Kyuafile.auto Kyuafile.auto.tmp - -.NOPATH: Kyuafile.auto -Kyuafile.auto: Makefile - @{ \ - echo '-- Automatically generated by bsd.test.mk.'; \ - echo; \ - echo 'syntax(2)'; \ - echo; \ - echo 'test_suite("${TESTSUITE}")'; \ - echo; \ - } >Kyuafile.auto.tmp -.for _T in ${_TESTS} - @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \ - >>Kyuafile.auto.tmp -.endfor -.for _T in ${TESTS_SUBDIRS:N.WAIT} - @echo "include(\"${_T}/Kyuafile\")" >>Kyuafile.auto.tmp -.endfor - @mv Kyuafile.auto.tmp Kyuafile.auto -.endif - -KYUA?= ${KYUA_PREFIX}/bin/kyua -.if exists(${KYUA}) -# Definition of the "make test" target and supporting variables. -# -# This target, by necessity, can only work for native builds (i.e. a FreeBSD -# host building a release for the same system). The target runs Kyua, which is -# not in the toolchain, and the tests execute code built for the target host. -# -# Due to the dependencies of the binaries built by the source tree and how they -# are used by tests, it is highly possible for a execution of "make test" to -# report bogus results unless the new binaries are put in place. -realtest: .PHONY - @echo "*** WARNING: make test is experimental" - @echo "***" - @echo "*** Using this test does not preclude you from running the tests" - @echo "*** installed in ${TESTSBASE}. This test run may raise false" - @echo "*** positives and/or false negatives." - @echo - @set -e; \ - ${KYUA} test -k ${DESTDIR}${TESTSDIR}/Kyuafile; \ - result=0; \ - echo; \ - echo "*** Once again, note that "make test" is unsupported."; \ - test $${result} -eq 0 -.endif - -beforetest: .PHONY -.if defined(TESTSDIR) -.if ${TESTSDIR} == ${TESTSBASE} -# Forbid running from ${TESTSBASE}. It can cause false positives/negatives and -# it does not cover all the tests (e.g. it misses testing software in external). - @echo "*** Sorry, you cannot use make test from src/tests. Install the" - @echo "*** tests into their final location and run them from ${TESTSBASE}" - @false -.else - @echo "*** Using this test does not preclude you from running the tests" - @echo "*** installed in ${TESTSBASE}. This test run may raise false" - @echo "*** positives and/or false negatives." -.endif -.else - @echo "*** No TESTSDIR defined; nothing to do." - @false +.if !defined(NOT_FOR_TEST_SUITE) +.include <suite.test.mk> .endif - @echo .if !target(realtest) realtest: .PHONY diff --git a/share/mk/plain.test.mk b/share/mk/plain.test.mk index 2e2752d..99685ef 100644 --- a/share/mk/plain.test.mk +++ b/share/mk/plain.test.mk @@ -1,10 +1,14 @@ # $FreeBSD$ # +# You must include bsd.test.mk instead of this file from your Makefile. +# # Logic to build and install plain test programs. A plain test programs it not # supposed to use any specific testing framework: all it does is run some code # and report the test's pass or fail status via a 0 or 1 exit code. -.include <bsd.init.mk> +.if !target(__<bsd.test.mk>__) +.error plain.test.mk cannot be included directly. +.endif # List of C, C++ and shell test programs to build. # @@ -58,5 +62,3 @@ ${_T}: ${PLAIN_TESTS_SH_SRC_${_T}} mv ${.TARGET}.tmp ${.TARGET} .endfor .endif - -.include <bsd.test.mk> diff --git a/share/mk/suite.test.mk b/share/mk/suite.test.mk new file mode 100644 index 0000000..5e1504c --- /dev/null +++ b/share/mk/suite.test.mk @@ -0,0 +1,127 @@ +# $FreeBSD$ +# +# You must include bsd.test.mk instead of this file from your Makefile. +# +# Internal glue for the build of /usr/tests/. + +.if !target(__<bsd.test.mk>__) +.error suite.test.mk cannot be included directly. +.endif + +# Directory in which to install tests defined by the current Makefile. +# Makefiles have to override this to point to a subdirectory of TESTSBASE. +TESTSDIR?= . + +# Name of the test suite these tests belong to. Should rarely be changed for +# Makefiles built into the FreeBSD src tree. +TESTSUITE?= FreeBSD + +# Knob to control the handling of the Kyuafile for this Makefile. +# +# If 'yes', a Kyuafile exists in the source tree and is installed into +# TESTSDIR. +# +# If 'auto', a Kyuafile is automatically generated based on the list of test +# programs built by the Makefile and is installed into TESTSDIR. This is the +# default and is sufficient in the majority of the cases. +# +# If 'no', no Kyuafile is installed. +KYUAFILE?= auto + +# Per-test program interface definition. +# +# The name provided here must match one of the interface names supported by +# Kyua as this is later encoded in the Kyuafile test program definitions. +#TEST_INTERFACE.<test-program>= interface-name + +# Per-test program metadata properties as a list of key/value pairs. +# +# All the variables for a particular program are appended to the program's +# definition in the Kyuafile. This feature can be used to avoid having to +# explicitly supply a Kyuafile in the source directory, allowing the caller +# Makefile to rely on the KYUAFILE=auto behavior defined here. +#TEST_METADATA.<test-program>+= key="value" + +# Path to the prefix of the installed Kyua CLI, if any. +# +# If kyua is installed from ports, we automatically define a realtest target +# below to run the tests using this tool. The tools are searched for in the +# hierarchy specified by this variable. +KYUA_PREFIX?= /usr/local + +.if ${KYUAFILE:tl} == "yes" +FILES+= Kyuafile +FILESDIR_Kyuafile= ${TESTSDIR} + +CLEANFILES+= Kyuafile.auto Kyuafile.auto.tmp +.elif ${KYUAFILE:tl} == "auto" +FILES+= Kyuafile.auto +FILESDIR_Kyuafile.auto= ${TESTSDIR} +FILESNAME_Kyuafile.auto= Kyuafile + +CLEANFILES+= Kyuafile.auto Kyuafile.auto.tmp + +.NOPATH: Kyuafile.auto +Kyuafile.auto: Makefile + @{ \ + echo '-- Automatically generated by bsd.test.mk.'; \ + echo; \ + echo 'syntax(2)'; \ + echo; \ + echo 'test_suite("${TESTSUITE}")'; \ + echo; \ + } >Kyuafile.auto.tmp +.for _T in ${_TESTS} + @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \ + >>Kyuafile.auto.tmp +.endfor +.for _T in ${TESTS_SUBDIRS:N.WAIT} + @echo "include(\"${_T}/Kyuafile\")" >>Kyuafile.auto.tmp +.endfor + @mv Kyuafile.auto.tmp Kyuafile.auto +.endif + +KYUA?= ${KYUA_PREFIX}/bin/kyua +.if exists(${KYUA}) +# Definition of the "make test" target and supporting variables. +# +# This target, by necessity, can only work for native builds (i.e. a FreeBSD +# host building a release for the same system). The target runs Kyua, which is +# not in the toolchain, and the tests execute code built for the target host. +# +# Due to the dependencies of the binaries built by the source tree and how they +# are used by tests, it is highly possible for a execution of "make test" to +# report bogus results unless the new binaries are put in place. +realtest: .PHONY + @echo "*** WARNING: make test is experimental" + @echo "***" + @echo "*** Using this test does not preclude you from running the tests" + @echo "*** installed in ${TESTSBASE}. This test run may raise false" + @echo "*** positives and/or false negatives." + @echo + @set -e; \ + ${KYUA} test -k ${DESTDIR}${TESTSDIR}/Kyuafile; \ + result=0; \ + echo; \ + echo "*** Once again, note that "make test" is unsupported."; \ + test $${result} -eq 0 +.endif + +beforetest: .PHONY +.if defined(TESTSDIR) +.if ${TESTSDIR} == ${TESTSBASE} +# Forbid running from ${TESTSBASE}. It can cause false positives/negatives and +# it does not cover all the tests (e.g. it misses testing software in external). + @echo "*** Sorry, you cannot use make test from src/tests. Install the" + @echo "*** tests into their final location and run them from ${TESTSBASE}" + @false +.else + @echo "*** Using this test does not preclude you from running the tests" + @echo "*** installed in ${TESTSBASE}. This test run may raise false" + @echo "*** positives and/or false negatives." +.endif +.else + @echo "*** No TESTSDIR defined; nothing to do." + @false +.endif + @echo diff --git a/share/mk/tap.test.mk b/share/mk/tap.test.mk index 9c1ef54..4c05661 100644 --- a/share/mk/tap.test.mk +++ b/share/mk/tap.test.mk @@ -1,12 +1,16 @@ # $FreeBSD$ # +# You must include bsd.test.mk instead of this file from your Makefile. +# # Logic to build and install TAP-compliant test programs. # # This is provided to support existing tests in the FreeBSD source tree # (particularly those coming from tools/regression/) that comply with the # Test Anything Protocol. It should not be used for new tests. -.include <bsd.init.mk> +.if !target(__<bsd.test.mk>__) +.error tap.test.mk cannot be included directly. +.endif # List of C, C++ and shell test programs to build. # @@ -87,5 +91,3 @@ ${_T}: ${TAP_TESTS_SH_SRC_${_T}} mv ${.TARGET}.tmp ${.TARGET} .endfor .endif - -.include <bsd.test.mk> |