summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.inc17
-rw-r--r--etc/Makefile5
-rw-r--r--lib/Makefile107
-rw-r--r--share/mk/bsd.subdir.mk22
-rw-r--r--share/mk/bsd.test.mk9
5 files changed, 96 insertions, 54 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index 3fbf035..f8ebcc0 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -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: _installcheck_world
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}
diff --git a/etc/Makefile b/etc/Makefile
index 302523c..e16b52d 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -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>
diff --git a/lib/Makefile b/lib/Makefile
index ab6c579..0f8f9da 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -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
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index 1500947..f76d5e1 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -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)
diff --git a/share/mk/bsd.test.mk b/share/mk/bsd.test.mk
index 2e4b49d..38e945e 100644
--- a/share/mk/bsd.test.mk
+++ b/share/mk/bsd.test.mk
@@ -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
OpenPOWER on IntegriCloud