Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Aug 2005 17:16:37 GMT
From:      skv@FreeBSD.org
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/84448: Add "make test" to ports
Message-ID:  <200508011716.j71HGbq3069287@freefall.freebsd.org>
Resent-Message-ID: <200508011720.j71HKDaD069461@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         84448
>Category:       ports
>Synopsis:       Add "make test" to ports
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Aug 01 17:20:12 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Sergey Skvortsov
>Release:        FreeBSD 4.11-STABLE i386
>Organization:
<Organization of PR author (multiple lines)>
>Environment:

	<Relevant environment information (multiple lines)>

>Description:

Add to ports ability to run tests.

To enable "test" target just define HAS_TEST variable in Makefile.
All perl ports have automatically activated tests.

New variables are introduced: TEST_DEPENDS, TEST_TARGET, TEST_WRKSRC, TEST_ENV, TEST_ARGS.

>How-To-Repeat:

	<Code/input/activities to reproduce the problem (multiple lines)>

>Fix:

Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.515
diff -u -r1.515 bsd.port.mk
--- bsd.port.mk	24 Jun 2005 09:18:54 -0000	1.515
+++ bsd.port.mk	1 Aug 2005 17:11:22 -0000
@@ -477,6 +477,12 @@
 #				  package depends on.  "lib" is the name of a shared library.
 #				  make will use "ldconfig -r" to search for the library.
 #				  lib can contain extended regular expressions.
+# TEST_DEPENDS	- A list of "path:dir[:target]" tuples of other ports this
+#				  package depends to test.  The test done to determine
+#				  the existence of the dependency is the same as
+#				  FETCH_DEPENDS.  This will be checked during the
+#				  "test" stage.  If the third field ("target") exists,
+#				  it will be used instead of ${DEPENDS_TARGET}.
 # DEPENDS		- A list of "dir[:target]" tuples of other ports this
 #				  package depends on being made first.  Use this only for
 #				  things that don't fall into the above four categories.
@@ -628,6 +634,9 @@
 # build-depends-list
 #				- Show all directories which are build-dependencies
 #				  for this port.
+# test-depends-list
+#				- Show all directories which are test-dependencies
+#				  for this port.
 # package-depends-list
 #				- Show all directories which are
 #				  package-dependencies for this port.
@@ -808,6 +817,19 @@
 # MAKE_ARGS		- Any extra arguments to sub-make in build and install stages.
 #				  Default: none
 #
+# For test:
+#
+# HAS_TEST	- If set, this port has its own test suite.  The
+#				  test stage will not do anything if this is not set.
+# TEST_TARGET
+#				- Default target for sub-make in test stage.
+#				  Default: test
+# TEST_WRKSRC	- Directory to do test in (default: ${WRKSRC}).
+# TEST_ENV		- Additional environment vars passed to sub-make in test stage.
+#				  Default: see below
+# TEST_ARGS		- Any extra arguments to sub-make in test stage.
+#				  Default: none
+#
 # For install:
 #
 # INSTALL_TARGET
@@ -1399,6 +1421,7 @@
 PATCH_WRKSRC?=	${WRKSRC}
 CONFIGURE_WRKSRC?=	${WRKSRC}
 BUILD_WRKSRC?=	${WRKSRC}
+TEST_WRKSRC?=	${WRKSRC}
 INSTALL_WRKSRC?=${WRKSRC}
 
 PLIST_SUB+=	OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
@@ -1425,6 +1448,7 @@
 CONFIGURE_ENV+=	SHELL=${SH} CONFIG_SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
 SCRIPTS_ENV+=	PORTOBJFORMAT=${PORTOBJFORMAT}
 MAKE_ENV+=		SHELL=${SH} PORTOBJFORMAT=${PORTOBJFORMAT}
+TEST_ENV+=		SHELL=${SH}
 PLIST_SUB+=		PORTOBJFORMAT=${PORTOBJFORMAT}
 
 .if defined(MANCOMPRESSED)
@@ -1692,6 +1716,7 @@
 .if defined(PERL_MODBUILD)
 PERL_CONFIGURE=		yes
 CONFIGURE_SCRIPT?=	Build.PL
+HAS_TEST?=		yes
 .if ${PORTNAME} != Module-Build
 BUILD_DEPENDS+=		${SITE_PERL}/Module/Build.pm:${PORTSDIR}/devel/p5-Module-Build
 .endif
@@ -1707,6 +1732,7 @@
 	install_path=bindoc="${MAN1PREFIX}/man/man1"
 .elif defined(PERL_CONFIGURE)
 CONFIGURE_ARGS+=	INSTALLDIRS="site"
+HAS_TEST?=		yes
 .endif
 
 .if defined(PERL_CONFIGURE)
@@ -2156,6 +2182,7 @@
 MOTIFLIB?=	-L${X11BASE}/lib -lXm -lXp
 
 ALL_TARGET?=		all
+TEST_TARGET?=		test
 INSTALL_TARGET?=	install
 
 # This is a mid-term solution patch while pkg-comment files are
@@ -3378,6 +3405,35 @@
 .endif
 .endif
 
+# Test
+
+.if !target(do-test)
+do-test:
+.if defined(HAS_TEST)
+.if defined(USE_GMAKE)
+	@(cd ${BUILD_WRKSRC}; ${SETENV} ${TEST_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${TEST_ARGS} ${TEST_TARGET})
+.else
+.if defined(PERL_MODBUILD)
+	@(cd ${BUILD_WRKSRC}; ${SETENV} ${TEST_ENV} ${PERL5} ${PL_BUILD} ${TEST_ARGS} ${TEST_TARGET})
+.else
+	@(cd ${BUILD_WRKSRC}; ${SETENV} ${TEST_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${TEST_ARGS} ${TEST_TARGET})
+.endif
+.endif
+.endif
+.endif
+
+.if !target(test)
+test: build test-depends
+	@${ECHO_MSG} "===>  Testing for ${PKGNAME}"
+.if target(pre-test)
+	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-test
+.endif
+	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} do-test
+.if target(post-test)
+	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} post-test
+.endif
+.endif
+
 # Check conflicts
 
 .if !target(check-conflicts)
@@ -4289,7 +4345,7 @@
 _DEPEND_ALWAYS=	0
 .endif
 
-.for deptype in EXTRACT PATCH FETCH BUILD RUN
+.for deptype in EXTRACT PATCH FETCH BUILD RUN TEST
 ${deptype:L}-depends:
 .if defined(${deptype}_DEPENDS)
 .if !defined(NO_DEPENDS)
@@ -4464,13 +4520,13 @@
 # Dependency lists: both build and runtime, recursive.  Print out directory names.
 
 all-depends-list:
-.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(DEPENDS)
+.if defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS) || defined(TEST_DEPENDS) || defined(DEPENDS)
 	@${ALL-DEPENDS-LIST}
 .endif
 
 ALL-DEPENDS-LIST= \
 	checked="${PARENT_CHECKED}"; \
-	for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
+	for dir in $$(${ECHO_CMD} "${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS} ${TEST_DEPENDS}" | ${SED} -e 'y/ /\n/' | ${CUT} -f 2 -d ':') $$(${ECHO_CMD} ${DEPENDS} | ${SED} -e 'y/ /\n/' | ${CUT} -f 1 -d ':'); do \
 		if [ -d $$dir ]; then \
 			if (${ECHO_CMD} $$checked | ${GREP} -qwv "$$dir"); then \
 				child=$$(cd $$dir; ${MAKE} PARENT_CHECKED="$$checked" all-depends-list); \
@@ -4607,6 +4663,20 @@
 		fi; \
 	done | ${SORT} -u
 
+test-depends-list:
+.if defined(TEST_DEPENDS) || defined(DEPENDS)
+	@${TEST-DEPENDS-LIST}
+.endif
+
+TEST-DEPENDS-LIST= \
+	for dir in $$(${ECHO_CMD} "${TEST_DEPENDS}" | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' | ${SORT} -u) $$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//' | ${SORT} -u); do \
+		if [ -d $$dir ]; then \
+			${ECHO_CMD} $$dir; \
+		else \
+			${ECHO_MSG} "${PKGNAME}: \"$$dir\" non-existent -- dependency list incomplete" >&2; \
+		fi; \
+	done | ${SORT} -u
+
 # Package (recursive runtime) dependency list.  Print out both directory names
 # and package names.
 
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508011716.j71HGbq3069287>