svn commit: r295380 - in head: . share/man/man7 share/mk

Garrett Cooper ngie at FreeBSD.org
Sun Feb 7 18:40:06 UTC 2016


Author: ngie
Date: Sun Feb  7 18:40:04 2016
New Revision: 295380
URL: https://svnweb.freebsd.org/changeset/base/295380

Log:
  Simplify running the FreeBSD test suite
  
  Replace `make regress` (legacy test make target) and `make test` (incomplete
  test make target added with the FreeBSD test suite) with make check as it's
  consistent with other open source projects.
  
  `make check` defaults to running tests from `.OBJDIR`, but can be overridden
  with the `CHECKDIR` variable.
  
  Add `make checkworld` target to simplify running the FreeBSD test suite from
  `TESTSBASE` (i.e. the top-level tests directory), similar to buildworld.
  
  Document `make check` and `make checkworld` in build(7).
  
  Other minor changes:
  
  - Rename intermediate file (`Kyuafile.auto`) to `Kyuafile` to simplify
    `make check`.
  - Remove terse warnings attached to `beforetest`/`aftertest`.
  - Add kyua binary check to check target in suite.test.mk; error out if it's
    not found
  
  The MFC is [partly] contingent on other build related changes being MFCed.
  
  Differential Revision: https://reviews.freebsd.org/D4406
  MFC after: 2 months
  X-MFC to: stable/10
  Relnotes: yes
  Reviewed by: bdrewery, Evan Cramer <eccramer at gmail.com>
  Sponsored by: EMC / Isilon Storage Division

Modified:
  head/Makefile
  head/Makefile.inc1
  head/share/man/man7/build.7
  head/share/mk/bsd.README
  head/share/mk/bsd.subdir.mk
  head/share/mk/bsd.sys.mk
  head/share/mk/bsd.test.mk
  head/share/mk/suite.test.mk
Directory Properties:
  head/   (props changed)

Modified: head/Makefile
==============================================================================
--- head/Makefile	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/Makefile	Sun Feb  7 18:40:04 2016	(r295380)
@@ -21,6 +21,7 @@
 # kernel-toolchains   - Build kernel-toolchain for all universe targets.
 # doxygen             - Build API documentation of the kernel, needs doxygen.
 # update              - Convenient way to update your source tree(s).
+# checkworld          - Run test suite on installed world.
 # check-old           - List obsolete directories/files/libraries.
 # check-old-dirs      - List obsolete directories.
 # check-old-files     - List obsolete files.
@@ -112,8 +113,8 @@
 .else
 
 TGTS=	all all-man buildenv buildenvvars buildkernel buildworld \
-	check-old check-old-dirs check-old-files check-old-libs \
-	checkdpadd clean cleandepend cleandir cleanworld \
+	check check-old check-old-dirs check-old-files check-old-libs \
+	checkdpadd checkworld clean cleandepend cleandir cleanworld \
 	delete-old delete-old-dirs delete-old-files delete-old-libs \
 	depend distribute distributekernel distributekernel.debug \
 	distributeworld distrib-dirs distribution doxygen \
@@ -121,7 +122,7 @@ TGTS=	all all-man buildenv buildenvvars 
 	installkernel.debug packagekernel packageworld \
 	reinstallkernel reinstallkernel.debug \
 	installworld kernel-toolchain libraries lint maninstall \
-	obj objlink regress rerelease showconfig tags toolchain update \
+	obj objlink rerelease showconfig tags toolchain update \
 	_worldtmp _legacy _bootstrap-tools _cleanobj _obj \
 	_build-tools _cross-tools _includes _libraries _depend \
 	build32 builddtb distribute32 install32 xdev xdev-build xdev-install \
@@ -329,6 +330,10 @@ bmake: .PHONY
 		${MMAKE} all; \
 		${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR=
 
+regress: .PHONY
+	@echo "'make regress' has been renamed 'make check'" | /usr/bin/fmt
+	@false
+
 tinderbox toolchains kernel-toolchains kernels worlds: upgrade_checks
 
 tinderbox:

Modified: head/Makefile.inc1
==============================================================================
--- head/Makefile.inc1	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/Makefile.inc1	Sun Feb  7 18:40:04 2016	(r295380)
@@ -37,6 +37,7 @@
 # The intended user-driven targets are:
 # buildworld  - rebuild *everything*, including glue to help do upgrades
 # installworld- install everything built by "buildworld"
+# checkworld  - run test suite on installed world
 # doxygen     - build API documentation of the kernel
 # update      - convenient way to update your source tree (eg: svn/svnup)
 #
@@ -1323,6 +1324,20 @@ packagekernel:
 .endif
 
 #
+#
+# checkworld
+#
+# Run test suite on installed world.
+#
+checkworld: .PHONY
+	@if [ ! -x ${LOCALBASE}/bin/kyua ]; then \
+		echo "You need kyua (devel/kyua) to run the test suite." | /usr/bin/fmt; \
+		exit 1; \
+	fi
+	${_+_}${LOCALBASE}/bin/kyua test -k ${TESTSBASE}/Kyuafile
+
+#
+#
 # doxygen
 #
 # Build the API documentation with doxygen

Modified: head/share/man/man7/build.7
==============================================================================
--- head/share/man/man7/build.7	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/man/man7/build.7	Sun Feb  7 18:40:04 2016	(r295380)
@@ -107,6 +107,16 @@ section below, and by the variables docu
 The following list provides the names and actions for the targets
 supported by the build system:
 .Bl -tag -width ".Cm cleandepend"
+.It Cm check
+Run tests for a given subdirectory.
+The default directory used is
+.Pa ${.OBJDIR} ,
+but the check directory can be changed with
+.Pa ${CHECKDIR} .
+.It Cm checkworld
+Run the
+.Fx
+test suite on installed world.
 .It Cm clean
 Remove any files created during the build process.
 .It Cm cleandepend
@@ -653,6 +663,7 @@ make TARGET=sparc64 DESTDIR=/clients/spa
 .Xr mergemaster 8 ,
 .Xr portsnap 8 ,
 .Xr reboot 8 ,
-.Xr shutdown 8
+.Xr shutdown 8 ,
+.Xr tests 7
 .Sh AUTHORS
 .An Mike W. Meyer Aq Mt mwm at mired.org

Modified: head/share/mk/bsd.README
==============================================================================
--- head/share/mk/bsd.README	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/mk/bsd.README	Sun Feb  7 18:40:04 2016	(r295380)
@@ -448,6 +448,17 @@ It has seven targets:
 
 	all:
 		build the test programs.
+	check:
+		runs the test programs from CHECKDIR with kyua test.
+
+		The beforecheck and aftercheck targets will be invoked, if
+		defined, to execute commands before and after the realcheck
+		target has been executed, respectively.
+
+		The devel/kyua package must be installed before invoking this
+		target.
+
+		See CHECKDIR for more details.
 	clean:
 		remove the test programs and any object files.
 	cleandir:
@@ -466,12 +477,6 @@ It has seven targets:
 		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:
 
@@ -485,6 +490,10 @@ TESTSDIR	Path to the installed tests.  M
 		${TESTSBASE}/${RELDIR:H} , e.g. /usr/tests/bin/ls when
 		included from bin/ls/tests .
 
+CHECKDIR	The directory that 'make check' executes tests from.
+
+		The value of CHECKDIR defaults to .OBJDIR.
+
 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

Modified: head/share/mk/bsd.subdir.mk
==============================================================================
--- head/share/mk/bsd.subdir.mk	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/mk/bsd.subdir.mk	Sun Feb  7 18:40:04 2016	(r295380)
@@ -43,11 +43,11 @@ SUBDIR_TARGETS+= \
 		checkdpadd clean cleandepend cleandir cleanilinks \
 		cleanobj depend distribute files includes installconfig \
 		installfiles installincludes realinstall lint maninstall \
-		manlint obj objlink regress tags \
+		manlint obj objlink tags \
 
 # Described above.
 STANDALONE_SUBDIR_TARGETS+= \
-		obj checkdpadd clean cleandepend cleandir \
+		obj check checkdpadd clean cleandepend cleandir \
 		cleanilinks cleanobj installconfig \
 
 .include <bsd.init.mk>

Modified: head/share/mk/bsd.sys.mk
==============================================================================
--- head/share/mk/bsd.sys.mk	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/mk/bsd.sys.mk	Sun Feb  7 18:40:04 2016	(r295380)
@@ -178,11 +178,11 @@ CXXFLAGS+=	 ${CXXFLAGS.${COMPILER_TYPE}}
 # or expect to ever be up-to-date.
 PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \
 		beforelinking build build-tools buildconfig buildfiles \
-		buildincludes checkdpadd clean cleandepend cleandir cleanobj \
-		configure depend dependall distclean distribute exe \
+		buildincludes check checkdpadd clean cleandepend cleandir \
+		cleanobj configure depend dependall distclean distribute exe \
 		files html includes install installconfig installfiles \
 		installincludes lint obj objlink objs objwarn realall \
-		realdepend realinstall regress subdir-all subdir-depend \
+		realdepend realinstall subdir-all subdir-depend \
 		subdir-install tags whereobj
 
 # we don't want ${PROG} to be PHONY

Modified: head/share/mk/bsd.test.mk
==============================================================================
--- head/share/mk/bsd.test.mk	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/mk/bsd.test.mk	Sun Feb  7 18:40:04 2016	(r295380)
@@ -60,11 +60,15 @@ _TESTS=
 .include <plain.test.mk>
 .include <tap.test.mk>
 
+# kyua automatically descends directories; only run make check on the
+# top-level directory
+.if !make(check)
 .for ts in ${TESTS_SUBDIRS}
 .if empty(SUBDIR:M${ts})
 SUBDIR+= ${ts}
 .endif
 .endfor
+.endif
 
 # it is rare for test cases to have man pages
 .if !defined(MAN)
@@ -79,19 +83,14 @@ PROGS_TARGETS+= install
 .include <suite.test.mk>
 .endif
 
-.if !target(realtest)
-realtest: .PHONY
+.if !target(realcheck)
+realcheck: .PHONY
 	@echo "$@ not defined; skipping"
 .endif
 
-test: .PHONY
-.ORDER: beforetest realtest
-test: beforetest realtest
-
-.if target(aftertest)
-.ORDER: realtest aftertest
-test: aftertest
-.endif
+beforecheck realcheck aftercheck check: .PHONY
+.ORDER: beforecheck realcheck aftercheck
+check: beforecheck realcheck aftercheck
 
 .ifdef PROG
 # we came here via bsd.progs.mk below

Modified: head/share/mk/suite.test.mk
==============================================================================
--- head/share/mk/suite.test.mk	Sun Feb  7 17:03:49 2016	(r295379)
+++ head/share/mk/suite.test.mk	Sun Feb  7 18:40:04 2016	(r295380)
@@ -50,15 +50,12 @@ FILES+=	Kyuafile
 FILESDIR_Kyuafile= ${TESTSDIR}
 .endif
 
-.if ${KYUAFILE:tl} == "auto"
-CLEANFILES+= Kyuafile Kyuafile.tmp
-.endif
-
 .for _T in ${_TESTS}
 _TEST_METADATA.${_T}= ${TEST_METADATA} ${TEST_METADATA.${_T}}
 .endfor
 
 .if ${KYUAFILE:tl} == "auto"
+CLEANFILES+= Kyuafile Kyuafile.tmp
 Kyuafile: Makefile
 	@{ \
 	    echo '-- Automatically generated by bsd.test.mk.'; \
@@ -78,9 +75,11 @@ Kyuafile: Makefile
 	@mv ${.TARGET}.tmp ${.TARGET}
 .endif
 
+CHECKDIR?=	${DESTDIR}${TESTSDIR}
+
 KYUA= ${LOCALBASE}/bin/kyua
-.if exists(${KYUA})
-# Definition of the "make test" target and supporting variables.
+
+# Definition of the "make check" 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
@@ -89,35 +88,15 @@ KYUA= ${LOCALBASE}/bin/kyua
 # 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
-	@${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
+realcheck: .PHONY
+	@if [ ! -x ${KYUA} ]; then \
+		echo; \
+		echo "kyua binary not installed at expected location (${.TARGET})"; \
+		echo; \
+		echo "Please install via pkg install, or specify the path to the kyua"; \
+		echo "package via the \$${LOCALBASE} variable, e.g. "; \
+		echo "LOCALBASE=\"${LOCALBASE}\""; \
+		false; \
+	fi
+	@${KYUA} test -k ${CHECKDIR}/Kyuafile


More information about the svn-src-all mailing list