svn commit: r270187 - in stable/10: . etc lib share/mk

Ian Lepore ian at FreeBSD.org
Tue Aug 19 23:33:52 UTC 2014


Author: ian
Date: Tue Aug 19 23:33:51 2014
New Revision: 270187
URL: http://svnweb.freebsd.org/changeset/base/270187

Log:
  MFC r266473,267331,267511:
  
    Use an intermediate target to associate with _SUBDIR which is marked .MAKE
    this allows make -n to do tree walks as expected without
    doing anything else (as intended).
    Use prefix _sub. to help avoid conflict with any real target.
  
    Put the test suite in its own tests.txz distribution file.
    Force all the contents of /usr/tests to go into a separate distribution
    file so that users of binary releases can easily choose to not install
  
    Create a mechanism for providing fine-grained build order dependencies
    during SUBDIR_PARALLEL builds.  This augments the coarse .WAIT mechanism,
    which is still useful if you've got a situation such as "almost everything
    depends on A and B".

Modified:
  stable/10/Makefile.inc1
  stable/10/etc/Makefile
  stable/10/lib/Makefile
  stable/10/share/mk/bsd.subdir.mk
  stable/10/share/mk/bsd.test.mk
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/Makefile.inc1
==============================================================================
--- stable/10/Makefile.inc1	Tue Aug 19 23:15:47 2014	(r270186)
+++ stable/10/Makefile.inc1	Tue Aug 19 23:33:51 2014	(r270187)
@@ -779,6 +779,9 @@ EXTRA_DISTRIBUTIONS+=	games
 .if defined(LIB32TMP) && ${MK_LIB32} != "no"
 EXTRA_DISTRIBUTIONS+=	lib32
 .endif
+.if ${MK_TESTS} != "no"
+EXTRA_DISTRIBUTIONS+=	tests
+.endif
 
 MTREE_MAGIC?=	mtree 2.0
 
@@ -820,6 +823,10 @@ distributeworld installworld: _installch
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
 	    -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null
 .endif
+.if ${MK_TESTS} != "no" && ${dist} == "tests"
+	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
+	    -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
+.endif
 .if defined(NO_ROOT)
 	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \
 	    sed -e 's#^\./#./${dist}/#' >> ${METALOG}

Modified: stable/10/etc/Makefile
==============================================================================
--- stable/10/etc/Makefile	Tue Aug 19 23:15:47 2014	(r270186)
+++ stable/10/etc/Makefile	Tue Aug 19 23:33:51 2014	(r270187)
@@ -174,7 +174,10 @@ afterinstall:
 .endif
 
 distribute:
-	${_+_}cd ${.CURDIR} ; ${MAKE} install DESTDIR=${DISTDIR}/${DISTRIBUTION}
+	# Avoid installing tests here; "make distribution" will do this and
+	# correctly place them in the right location.
+	${_+_}cd ${.CURDIR} ; ${MAKE} MK_TESTS=no install \
+	    DESTDIR=${DISTDIR}/${DISTRIBUTION}
 	${_+_}cd ${.CURDIR} ; ${MAKE} distribution DESTDIR=${DISTDIR}/${DISTRIBUTION}
 
 .include <bsd.endian.mk>

Modified: stable/10/lib/Makefile
==============================================================================
--- stable/10/lib/Makefile	Tue Aug 19 23:15:47 2014	(r270186)
+++ stable/10/lib/Makefile	Tue Aug 19 23:33:51 2014	(r270187)
@@ -3,73 +3,40 @@
 
 .include <bsd.own.mk>
 
-# To satisfy shared library or ELF linkage when only the libraries being
-# built are visible:
-#
-# csu must be built before all shared libaries for ELF.
-# libc must be built before all other shared libraries.
-# libbsm must be built before libauditd.
-# libcom_err must be built before libpam.
-# libcrypt must be built before libpam.
-# libkvm must be built before libdevstat.
-# libldns must be built before libunbound.
-# msun must be built before libg++ and libstdc++.
-# libmd must be built before libatm, libopie, libradius, and libtacplus.
-# ncurses must be built before libdialog, libedit and libreadline.
-# libnetgraph must be built before libbsnmp/modules/snmp_netgraph.
-# libopie must be built before libpam.
-# libradius must be built before libpam.
-# librpcsvc must be built before libpam.
-# libsbuf must be built before libcam.
-# libtacplus must be built before libpam.
-# libutil must be built before libpam.
-# libypclnt must be built before libpam.
-# libgssapi must be built before librpcsec_gss
-#
-# Otherwise, the SUBDIR list should be in alphabetical order.
-#
-# Except it appears bind needs to be compiled last
+# The SUBDIR_ORDERED list is a small set of libraries which are used by many
+# of the other libraries.  These are built first with a .WAIT between them
+# and the main list to avoid needing a SUBDIR_DEPEND line on every library
+# naming just these few items.
 
 SUBDIR_ORDERED=	${_csu} \
+	.WAIT \
 	libc \
 	libc_nonshared \
-	libbsm \
-	libauditd \
 	libcompiler_rt \
-	libcrypt \
-	libelf \
-	${_libiconv_modules} \
-	libkvm \
-	${_libldns} \
-	msun \
-	libmd \
-	ncurses \
-	${_libnetgraph} \
-	libradius \
-	librpcsvc \
-	libsbuf \
-	libtacplus \
-	libutil \
-	${_libypclnt} \
+	${_libcplusplus} \
 	${_libcxxrt} \
-	${_libcplusplus}
+	libelf \
+	msun
 
-.if ${MK_KERBEROS_SUPPORT} != "no"
-SUBDIR_ORDERED+=	libcom_err
-.endif
+# The main list; please keep these sorted alphabetically.
 
 SUBDIR=	${SUBDIR_ORDERED} \
+	.WAIT \
 	libalias \
 	libarchive \
 	${_libatm} \
+	libauditd \
 	libbegemot \
 	libblocksruntime \
 	${_libbluetooth} \
 	${_libbsnmp} \
+	libbsm \
 	libbz2 \
 	libcalendar \
 	libcam \
+	${_libcom_err} \
 	libcompat \
+	libcrypt \
 	libdevinfo \
 	libdevstat \
 	libdwarf \
@@ -82,18 +49,23 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	${_libgpib} \
 	${_libgssapi} \
 	${_librpcsec_gss} \
+	${_libiconv_modules} \
 	libipsec \
 	${_libipx} \
 	libjail \
 	libkiconv \
+	libkvm \
+	${_libldns} \
 	liblzma \
 	libmagic \
 	libmandoc \
 	libmemstat \
+	libmd \
 	${_libmilter} \
 	${_libmp} \
 	${_libnandfs} \
 	libnetbsd \
+	${_libnetgraph} \
 	${_libngatm} \
 	libopie \
 	libpam \
@@ -101,8 +73,11 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	${_libpmc} \
 	${_libproc} \
 	libprocstat \
+	libradius \
+	librpcsvc \
 	librt \
 	${_librtld_db} \
+	libsbuf \
 	${_libsdp} \
 	${_libsm} \
 	${_libsmb} \
@@ -111,6 +86,7 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	libstand \
 	libstdbuf \
 	libstdthreads \
+	libtacplus \
 	${_libtelnet} \
 	${_libthr} \
 	libthread_db \
@@ -121,16 +97,49 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	${_libunbound} \
 	${_libusbhid} \
 	${_libusb} \
+	libutil \
 	${_libvgl} \
 	${_libvmmapi} \
 	libwrap \
 	liby \
+	${_libypclnt} \
 	libyaml \
 	libz \
+	ncurses \
 	${_atf} \
 	${_clang} \
 	${_tests}
 
+# Inter-library dependencies.  When the makefile for a library contains LDADD
+# libraries, those libraries should be listed as build order dependencies here.
+
+SUBDIR_DEPEND_libarchive= libz libbz2 libexpat liblzma libmd
+SUBDIR_DEPEND_libatm= libmd
+SUBDIR_DEPEND_libauditdm= libbsm
+SUBDIR_DEPEND_libbsnmp= ${_libnetgraph}
+SUBDIR_DEPEND_libc++= libcxxrt
+SUBDIR_DEPEND_libc= libcompiler_rt
+SUBDIR_DEPEND_libcam= libsbuf
+SUBDIR_DEPEND_libdevstat= libkvm
+SUBDIR_DEPEND_libdiaglog= ncurses
+SUBDIR_DEPEND_libedit= ncurses
+SUBDIR_DEPEND_libg++= msun
+SUBDIR_DEPEND_libgeom= libexpat libsbuf
+SUBDIR_DEPEND_liblibrpcsec_gss= libgssapi
+SUBDIR_DEPEND_libmagic= libz
+SUBDIR_DEPEND_libmemstat= libkvm
+SUBDIR_DEPEND_libopie= libmd
+SUBDIR_DEPEND_libpam= libcrypt libopie libradius librpcsvc libtacplus libutil ${_libypclnt} ${_libcom_err} 
+SUBDIR_DEPEND_libpjdlog= libutil
+SUBDIR_DEPEND_libprocstat= libkvm libutil
+SUBDIR_DEPEND_libradius= libmd
+SUBDIR_DEPEND_libreadline= ncurses
+SUBDIR_DEPEND_libsmb= libkiconv
+SUBDIR_DEPEND_libstdc++= msun
+SUBDIR_DEPEND_libtacplus= libmd
+SUBDIR_DEPEND_libulog= libmd
+SUBDIR_DEPEND_libunbound= ${_libldns}
+
 .if exists(${.CURDIR}/csu/${MACHINE_ARCH}-elf)
 _csu=csu/${MACHINE_ARCH}-elf
 .elif exists(${.CURDIR}/csu/${MACHINE_ARCH})
@@ -173,6 +182,10 @@ _librpcsec_gss=	librpcsec_gss
 _libiconv_modules=	libiconv_modules
 .endif
 
+.if ${MK_KERBEROS_SUPPORT} != "no"
+_libcom_err= libcom_err
+.endif
+
 .if ${MK_IPX} != "no"
 _libipx=	libipx
 .endif

Modified: stable/10/share/mk/bsd.subdir.mk
==============================================================================
--- stable/10/share/mk/bsd.subdir.mk	Tue Aug 19 23:15:47 2014	(r270186)
+++ stable/10/share/mk/bsd.subdir.mk	Tue Aug 19 23:33:51 2014	(r270187)
@@ -47,15 +47,15 @@ _SUBDIR: .USE .MAKE
 .if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
 	@${_+_}set -e; for entry in ${SUBDIR:N.WAIT}; do \
 		if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \
-			${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:realinstall=install})"; \
+			${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
 			edir=$${entry}.${MACHINE_ARCH}; \
 			cd ${.CURDIR}/$${edir}; \
 		else \
-			${ECHODIR} "===> ${DIRPRFX}$$entry (${.TARGET:realinstall=install})"; \
+			${ECHODIR} "===> ${DIRPRFX}$$entry (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
 			edir=$${entry}; \
 			cd ${.CURDIR}/$${edir}; \
 		fi; \
-		${MAKE} ${.TARGET:realinstall=install} \
+		${MAKE} ${.TARGET:S,realinstall,install,:S,^_sub.,,} \
 		    DIRPRFX=${DIRPRFX}$$edir/; \
 	done
 .endif
@@ -80,7 +80,12 @@ __subdir_targets=
 __subdir_targets+= .WAIT
 .else
 __subdir_targets+= ${__target}_subdir_${__dir}
-${__target}_subdir_${__dir}: .MAKE
+__deps=
+.for __dep in ${SUBDIR_DEPEND_${__dir}}
+__deps+= ${__target}_subdir_${__dep}
+.endfor
+${__target}_subdir_${__dir}: .MAKE ${__deps}
+.if !defined(NO_SUBDIR)
 	@${_+_}set -e; \
 		if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
 			${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
@@ -94,10 +99,12 @@ ${__target}_subdir_${__dir}: .MAKE
 		${MAKE} ${__target:realinstall=install} \
 		    DIRPRFX=${DIRPRFX}$$edir/
 .endif
+.endif
 .endfor
 ${__target}: ${__subdir_targets}
 .else
-${__target}: _SUBDIR
+${__target}: _sub.${__target}
+_sub.${__target}: _SUBDIR
 .endif
 .endfor
 
@@ -105,11 +112,14 @@ ${__target}: _SUBDIR
 .for __stage in build install
 ${__stage}${__target}:
 .if make(${__stage}${__target})
-${__stage}${__target}: _SUBDIR
+${__stage}${__target}: _sub.${__stage}${__target}
+_sub.${__stage}${__target}: _SUBDIR
 .endif
 .endfor
+.if !target(${__target})
 ${__target}: .MAKE
 	${_+_}set -e; cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
+.endif
 .endfor
 
 .if !target(install)

Modified: stable/10/share/mk/bsd.test.mk
==============================================================================
--- stable/10/share/mk/bsd.test.mk	Tue Aug 19 23:15:47 2014	(r270186)
+++ stable/10/share/mk/bsd.test.mk	Tue Aug 19 23:33:51 2014	(r270187)
@@ -27,6 +27,15 @@ TESTS_SUBDIRS?=
 # List of variables to pass to the tests at run-time via the environment.
 TESTS_ENV?=
 
+# Force all tests in a separate distribution file.
+#
+# We want this to be the case even when the distribution name is already
+# overriden.  For example: we want the tests for programs in the 'games'
+# distribution to end up in the 'tests' distribution; the test programs
+# themselves have all the necessary logic to detect that the games are not
+# installed and thus won't cause false negatives.
+DISTRIBUTION:=	tests
+
 # Ordered list of directories to construct the PATH for the tests.
 TESTS_PATH+= ${DESTDIR}/bin ${DESTDIR}/sbin \
              ${DESTDIR}/usr/bin ${DESTDIR}/usr/sbin


More information about the svn-src-all mailing list