Index: Mk/Scripts/do-depends.sh =================================================================== --- Mk/Scripts/do-depends.sh +++ Mk/Scripts/do-depends.sh @@ -21,6 +21,7 @@ target=$2 depends_args=$3 if [ -z "${dp_USE_PACKAGE_DEPENDS}" -a -z "${dp_USE_PACKAGE_DEPENDS_ONLY}" ]; then + echo ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args} ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args} return 0 fi @@ -46,6 +47,7 @@ echo "===> dp_USE_PACKAGE_DEPENDS_ONLY set - not building missing dependency from source" >&2 exit 1 else + echo MAKE ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args} fi } Index: Mk/Uses/perl5.mk =================================================================== --- Mk/Uses/perl5.mk +++ Mk/Uses/perl5.mk @@ -308,15 +308,10 @@ @${RM} -f ${STAGEDIR}${PREFIX}/lib/perl5/${PERL_VER}/${PERL_ARCH}/perllocal.pod* || : @${RMDIR} -p ${STAGEDIR}${PREFIX}/lib/perl5/${PERL_VER}/${PERL_ARCH} 2>/dev/null || : -.if !target(regression-test) -TEST_ARGS?= ${MAKE_ARGS} -TEST_ENV?= ${MAKE_ENV} +.if !target(do-test) TEST_TARGET?= test TEST_WRKSRC?= ${BUILD_WRKSRC} -.if !target(test) -test: regression-test -.endif # test -regression-test: build +do-test: .if ${USE_PERL5:Mmodbuild*} -cd ${TEST_WRKSRC}/ && ${SETENV} ${TEST_ENV} ${PERL5} ${PL_BUILD} ${TEST_TARGET} ${TEST_ARGS} .elif ${USE_PERL5:Mconfigure} Index: Mk/bsd.port.mk =================================================================== --- Mk/bsd.port.mk +++ Mk/bsd.port.mk @@ -650,6 +650,9 @@ # run-depends-list # - Show all directories which are run-dependencies # for this port. +# test-depends-list +# - Show all directories which are test-dependencies +# for this port. # # extract - Unpacks ${DISTFILES} into ${WRKDIR}. # patch - Apply any provided patches to the source. @@ -661,6 +664,7 @@ # flag. # deinstall - Remove the installation. # deinstall-all - Remove all installations with the same PKGORIGIN. +# test - Run tests fot the port. # package - Create a package from an _installed_ port. # package-recursive # - Create a package for a port and _all_ of its dependencies. @@ -845,6 +849,13 @@ # - Disable CCACHE support for example for certain ports if # CCACHE is enabled. User settable. # +# For test: +# +# TEST_TARGET +# - Default target for sub-make in test stage. +# Default: (none) +# TEST_WRKSRC - Directory to do test in (default: ${WRKSRC}). +# # For install: # # INSTALL_TARGET @@ -1422,7 +1433,7 @@ DESTDIRNAME?= DESTDIR # setup empty variables for USES targets -.for target in sanity fetch extract patch configure build install package stage +.for target in sanity fetch extract patch configure build install test package stage _USES_${target}?= .endfor @@ -1477,6 +1488,9 @@ PKG_NOTE_no_provide_shlib= yes .endif +TEST_ARGS?= ${MAKE_ARGS} +TEST_ENV?= ${MAKE_ENV} + PKG_ENV+= PORTSDIR=${PORTSDIR} CONFIGURE_ENV+= XDG_DATA_HOME=${WRKDIR} \ XDG_CONFIG_HOME=${WRKDIR} \ @@ -1546,6 +1560,7 @@ CONFIGURE_WRKSRC?= ${WRKSRC} BUILD_WRKSRC?= ${WRKSRC} INSTALL_WRKSRC?=${WRKSRC} +TEST_WRKSRC?= ${WRKSRC} PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} \ RESETPREFIX=${PREFIX} @@ -1932,6 +1947,7 @@ EXTRACT_COOKIE?= ${WRKDIR}/.extract_done.${PORTNAME}.${PREFIX:S/\//_/g} CONFIGURE_COOKIE?= ${WRKDIR}/.configure_done.${PORTNAME}.${PREFIX:S/\//_/g} INSTALL_COOKIE?= ${WRKDIR}/.install_done.${PORTNAME}.${PREFIX:S/\//_/g} +TEST_COOKIE?= ${WRKDIR}/.test_done.${PORTNAME}.${PREFIX:S/\//_/g} BUILD_COOKIE?= ${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g} PATCH_COOKIE?= ${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g} PACKAGE_COOKIE?= ${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g} @@ -2792,7 +2808,7 @@ .endif _TARGETS= check-sanity fetch checksum extract patch configure all build \ - install reinstall package stage restage + install reinstall test package stage restage .for target in ${_TARGETS} .if !target(${target}) @@ -3453,6 +3469,23 @@ @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKEROOT} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET}) .endif +# Test + +.if !target(do-test) && defined(TEST_TARGET) +DO_MAKE_TEST?= ${SETENV} ${TEST_ENV} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${TEST_ARGS:C,^${DESTDIRNAME}=.*,,g} +do-test: + @(cd ${TEST_WRKSRC}; if ! ${DO_MAKE_TEST} ${TEST_TARGET}; then \ + if [ -n "${TEST_FAIL_MESSAGE}" ] ; then \ + ${ECHO_MSG} "===> Tests failed unexpectedly."; \ + (${ECHO_CMD} "${TEST_FAIL_MESSAGE}") | ${FMT} 75 79 ; \ + fi; \ + ${FALSE}; \ + fi) +.elif !target(do-test) +do-test: + @${DO_NADA} +.endif + # Package .if !target(do-package) @@ -3739,6 +3772,8 @@ @${ECHO_MSG} "===> Staging for ${PKGNAME}" install-message: @${ECHO_MSG} "===> Installing for ${PKGNAME}" +test-message: + @${ECHO_MSG} "===> Testing for ${PKGNAME}" package-message: @${ECHO_MSG} "===> Building package for ${PKGNAME}" @@ -4259,7 +4294,7 @@ .if !target(depends) depends: pkg-depends extract-depends patch-depends lib-depends fetch-depends build-depends run-depends -.for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN +.for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN TEST ${deptype:tl}-depends: .if defined(${deptype}_DEPENDS) && !defined(NO_DEPENDS) @${SETENV} \ @@ -4457,6 +4492,24 @@ fi; \ done | ${SORT} -u +test-depends-list: +.if defined(TEST_DEPENDS) + @${TEST-DEPENDS-LIST} +.endif + +TEST-DEPENDS-LIST= \ + for dir in $$(${ECHO_CMD} "${TEST_DEPENDS}" | ${SED} -E -e 's,([^: ]*):([^: ]*)(:[^ ]*)?,\2,g' -e 'y/ /\n/'| ${SORT} -u); do \ + case $$dir in \ + /*) pdir=$$dir ;; \ + *) pdir=${PORTSDIR}/$$dir ;; \ + esac ; \ + if [ -d $$pdir ]; then \ + ${ECHO_CMD} $$pdir; \ + else \ + ${ECHO_MSG} "${PKGNAME}: \"$$pdir\" non-existent -- dependency list incomplete" >&2; \ + fi; \ + done | ${SORT} -u + # Package (recursive runtime) dependency list. Print out both directory names # and package names. @@ -5555,7 +5608,7 @@ # Please note that the order of the following targets is important, and # should not be modified. -_TARGETS_STAGES= SANITY PKG FETCH EXTRACT PATCH CONFIGURE BUILD INSTALL PACKAGE STAGE +_TARGETS_STAGES= SANITY PKG FETCH EXTRACT PATCH CONFIGURE BUILD INSTALL TEST PACKAGE STAGE # Define the SEQ of actions to take when each target is ran, and which targets # it depends on before running its SEQ. @@ -5619,6 +5672,8 @@ .if defined(DEVELOPER) _STAGE_SEQ+= 995:stage-qa .endif +_TEST_DEP= stage +_TEST_SEQ= 100:test-message 150:test-depends 300:pre-test 500:do-test 800:post-test _INSTALL_DEP= stage _INSTALL_SEQ= 100:install-message 150:run-depends 151:lib-depends \ 200:check-already-installed @@ -5669,7 +5724,7 @@ # See above *_SEQ and *_DEP. The _DEP will run before this defined target is # ran. The _SEQ will run as this target once _DEP is satisfied. -.for target in extract patch configure build stage install package +.for target in extract patch configure build stage install test package # Check if config dialog needs to show and execute it if needed. If is it not # needed (_OPTIONS_OK), then just depend on the cookie which is defined later Index: devel/pire/Makefile =================================================================== --- devel/pire/Makefile +++ devel/pire/Makefile @@ -33,7 +33,7 @@ BUILD_DEPENDS+= cppunit-config:${PORTSDIR}/devel/cppunit CONFIGURE_ARGS+=--with-cppunit-prefix=${LOCALBASE} -regression-test: build +do-test: @cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} check || \ (${CAT} ${WRKSRC}/tests/test-suite.log; false) .endif