Author: bdrewery
Date: Wed Dec  2 01:24:31 2015
New Revision: 291632
URL: https://svnweb.freebsd.org/changeset/base/291632

Log:
  Add assertions that capture invalid configurations for new libraries.
  
  Fix current findings, which should fix cases of NO_SHARED not building
  properly.
  
  Given libfoo:
   - Ensure that a LIBFOO is set.  For INTERNALLIBS advise setting this in
     src.libnames.mk, otherwise bsd.libnames.mk.
   - Ensure that a LIBFOODIR is properly set.
   - Ensure that _DP_foo is set and matches the LIBADD in the build of foo's own
     Makefile
  
  Sponsored by: EMC / Isilon Storage Division

Modified:
  head/share/mk/bsd.libnames.mk
  head/share/mk/src.libnames.mk

Modified: head/share/mk/bsd.libnames.mk
==============================================================================
--- head/share/mk/bsd.libnames.mk       Wed Dec  2 01:23:16 2015        
(r291631)
+++ head/share/mk/bsd.libnames.mk       Wed Dec  2 01:24:31 2015        
(r291632)
@@ -42,6 +42,7 @@ LIBCRYPT?=    ${DESTDIR}${LIBDIR}/libcrypt.
 LIBCRYPTO?=    ${DESTDIR}${LIBDIR}/libcrypto.a
 LIBCTF?=       ${DESTDIR}${LIBDIR}/libctf.a
 LIBCURSES?=    ${DESTDIR}${LIBDIR}/libcurses.a
+LIBCUSE?=      ${DESTDIR}${LIBDIR}/libcuse.a
 LIBDEVCTL?=    ${DESTDIR}${LIBDIR}/libdevctl.a
 LIBDEVINFO?=   ${DESTDIR}${LIBDIR}/libdevinfo.a
 LIBDEVSTAT?=   ${DESTDIR}${LIBDIR}/libdevstat.a
@@ -98,6 +99,7 @@ LIBNVPAIR?=   ${DESTDIR}${LIBDIR}/libnvpai
 LIBOPIE?=      ${DESTDIR}${LIBDIR}/libopie.a
 LIBPAM?=       ${DESTDIR}${LIBDIR}/libpam.a
 LIBPANEL?=     ${DESTDIR}${LIBDIR}/libpanel.a
+LIBPANELW?=    ${DESTDIR}${LIBDIR}/libpanelw.a
 LIBPCAP?=      ${DESTDIR}${LIBDIR}/libpcap.a
 LIBPJDLOG?=    ${DESTDIR}${LIBDIR}/libpjdlog.a
 LIBPMC?=       ${DESTDIR}${LIBDIR}/libpmc.a
@@ -117,6 +119,7 @@ LIBSSL?=    ${DESTDIR}${LIBDIR}/libssl.a
 LIBSSP_NONSHARED?=     ${DESTDIR}${LIBDIR}/libssp_nonshared.a
 LIBSTAND?=     ${DESTDIR}${LIBDIR}/libstand.a
 LIBSTDCPLUSPLUS?= ${DESTDIR}${LIBDIR}/libstdc++.a
+LIBSTDTHREADS?=        ${DESTDIR}${LIBDIR}/libstdthreads.a
 LIBTACPLUS?=   ${DESTDIR}${LIBDIR}/libtacplus.a
 LIBTERMCAP?=   ${DESTDIR}${LIBDIR}/libtermcap.a
 LIBTERMCAPW?=  ${DESTDIR}${LIBDIR}/libtermcapw.a
@@ -155,6 +158,13 @@ LDADD:=    ${LDADD:N-lc} -lc
 
 # Only do this for src builds.
 .if defined(SRCTOP)
+.if defined(_LIBRARIES) && defined(LIB) && \
+    ${_LIBRARIES:M${LIB}} != ""
+.if !defined(LIB${LIB:tu})
+.error ${.CURDIR}: Missing value for LIB${LIB:tu} in ${_this:T}.  Likely 
should be: LIB${LIB:tu}?= $${DESTDIR}$${LIBDIR}/lib${LIB}.a
+.endif
+.endif
+
 # Derive LIB*SRCDIR from LIB*DIR
 .for lib in ${_LIBRARIES}
 LIB${lib:tu}SRCDIR?=   ${SRCTOP}/${LIB${lib:tu}DIR:S,^${OBJTOP}/,,}

Modified: head/share/mk/src.libnames.mk
==============================================================================
--- head/share/mk/src.libnames.mk       Wed Dec  2 01:23:16 2015        
(r291631)
+++ head/share/mk/src.libnames.mk       Wed Dec  2 01:24:31 2015        
(r291632)
@@ -163,6 +163,8 @@ _LIBRARIES= \
                ypclnt \
                z
 
+# Each library's LIBADD needs to be duplicated here for static linkage of
+# 2nd+ order consumers.  Auto-generating this would be better.
 _DP_80211=     sbuf bsdxml
 _DP_archive=   z bz2 lzma bsdxml
 .if ${MK_OPENSSL} != "no"
@@ -188,7 +190,7 @@ _DP_kvm=    elf
 _DP_pjdlog=    util
 _DP_opie=      md
 _DP_usb=       pthread
-_DP_unbound=   pthread
+_DP_unbound=   ssl crypto pthread
 _DP_rt=        pthread
 .if ${MK_OPENSSL} == "no"
 _DP_radius=    md
@@ -219,7 +221,7 @@ _DP_fetch=  md
 .endif
 _DP_execinfo=  elf
 _DP_dwarf=     elf
-_DP_dpv=       dialog figpar util
+_DP_dpv=       dialog figpar util ncursesw
 _DP_dialog=    ncursesw m
 _DP_cuse=      pthread
 _DP_atf_cxx=   atf_c
@@ -234,8 +236,21 @@ _DP_pam+=  ssh
 .if ${MK_NIS} != "no"
 _DP_pam+=      ypclnt
 .endif
-_DP_krb5+=     asn1 com_err crypt crypto hx509 roken wind heimbase heimipcc \
-               pthread
+_DP_readline=  ncursesw
+_DP_roken=     crypt
+_DP_kadm5clnt= com_err krb5 roken
+_DP_kadm5srv=  com_err hdb krb5 roken
+_DP_heimntlm=  crypto com_err krb5 roken
+_DP_hx509=     asn1 com_err crypto roken wind
+_DP_hdb=       asn1 com_err krb5 roken sqlite3
+_DP_asn1=      com_err roken
+_DP_kdc=       roken hdb hx509 krb5 heimntlm asn1 crypto
+_DP_wind=      com_err roken
+_DP_heimbase=  pthread
+_DP_heimipcc=  heimbase roken pthread
+_DP_heimipcs=  heimbase roken pthread
+_DP_kafs5=     asn1 krb5 roken
+_DP_krb5+=     asn1 com_err crypt crypto hx509 roken wind heimbase heimipcc
 _DP_gssapi_krb5+=      gssapi krb5 crypto roken asn1 com_err
 _DP_lzma=      pthread
 _DP_ucl=       m
@@ -243,6 +258,19 @@ _DP_vmmapi=        util
 _DP_ctf=       z
 _DP_dtrace=    ctf elf proc pthread rtld_db
 _DP_xo=                util
+# The libc dependencies are not strictly needed but are defined to make the
+# assert happy.
+_DP_c=         compiler_rt
+.if ${MK_SSP} != "no"
+_DP_c+=                ssp_nonshared
+.endif
+_DP_stdthreads=        pthread
+_DP_tacplus=   md
+_DP_panel=     ncurses
+_DP_panelw=    ncursesw
+_DP_rpcsec_gss=        gssapi
+_DP_smb=       kiconv
+_DP_ulog=      md
 
 # Define spacial cases
 LDADD_supcplusplus=    -lsupc++
@@ -273,12 +301,21 @@ LDADD_${_l}+=     ${LDADD_${_d}}
 .endif
 .endfor
 
+# These are special cases where the library is broken and anything that uses
+# it needs to add more dependencies.  Many _INTERNALLIBS fall into this
+# category.  Unless the library itself is broken then the proper place to
+# define dependencies is _DP_* above.
+
+# libatf-c++ exposes libatf-c abi hence we need to explicit link to atf_c for
+# atf_cxx
 DPADD_atf_cxx+=        ${DPADD_atf_c}
 LDADD_atf_cxx+=        ${LDADD_atf_c}
 
+# _INTERNALLIBS.
+# XXX: This should likely be reworked to have LIBADD in them and use normal
+# _DP_ lists just to avoid temptation to add more similar entries here.
 DPADD_fifolog+=        ${DPADD_z}
 LDADD_fifolog+=        ${LDADD_z}
-
 DPADD_ipf+=    ${DPADD_kvm}
 LDADD_ipf+=    ${LDADD_kvm}
 
@@ -288,9 +325,10 @@ LDADD+=            ${LDADD_${_l}}
 .endfor
 
 .if defined(DPADD) && ${DPADD:Mmissing-dpadd_*}
-.error Missing ${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//:S/^/DPADD_/} 
variable add "${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//}" to _LIBRARIES, 
_INTERNALLIBS, or _PRIVATELIBS and define 
"${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//:S/^/LIB/:tu}".
+.error ${.CURDIR}: Missing 
${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//:S/^/DPADD_/} variable add 
"${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//}" to _LIBRARIES, _INTERNALLIBS, or 
_PRIVATELIBS and define 
"${DPADD:Mmissing-dpadd_*:S/missing-dpadd_//:S/^/LIB/:tu}".
 .endif
 
+# INTERNALLIB definitions.
 LIBELFTCDIR=   ${OBJTOP}/lib/libelftc
 LIBELFTC?=     ${LIBELFTCDIR}/libelftc.a
 
@@ -334,7 +372,7 @@ LIBNTPEVENTDIR=     ${OBJTOP}/usr.sbin/ntp/l
 LIBNTPEVENT?=  ${LIBNTPEVENTDIR}/libntpevent.a
 
 LIBOPTSDIR=    ${OBJTOP}/usr.sbin/ntp/libopts
-LIBOTPS?=      ${LIBOPTSDIR}/libopts.a
+LIBOPTS?=      ${LIBOPTSDIR}/libopts.a
 
 LIBPARSEDIR=   ${OBJTOP}/usr.sbin/ntp/libparse
 LIBPARSE?=     ${LIBPARSEDIR}/libparse.a
@@ -398,8 +436,10 @@ LIBFORMDIR=        ${OBJTOP}/lib/ncurses/form
 LIBFORMLIBWDIR=        ${OBJTOP}/lib/ncurses/formw
 LIBMENUDIR=    ${OBJTOP}/lib/ncurses/menu
 LIBMENULIBWDIR=        ${OBJTOP}/lib/ncurses/menuw
-LIBTERMCAPDIR= ${OBJTOP}/lib/ncurses/ncurses
-LIBTERMCAPWDIR=        ${OBJTOP}/lib/ncurses/ncursesw
+LIBNCURSESDIR= ${OBJTOP}/lib/ncurses/ncurses
+LIBNCURSESWDIR=        ${OBJTOP}/lib/ncurses/ncursesw
+LIBTERMCAPDIR= ${LIBNCURSESDIR}
+LIBTERMCAPWDIR=        ${LIBNCURSESWDIR}
 LIBPANELDIR=   ${OBJTOP}/lib/ncurses/panel
 LIBPANELWDIR=  ${OBJTOP}/lib/ncurses/panelw
 LIBCRYPTODIR=  ${OBJTOP}/secure/lib/libcrypto
@@ -414,4 +454,18 @@ LIBLNDIR=  ${OBJTOP}/usr.bin/lex/lib
 LIB${lib:tu}DIR?=      ${OBJTOP}/lib/lib${lib}
 .endfor
 
+# Sanity check that libraries are defined here properly when building them.
+.if defined(LIB) && ${_LIBRARIES:M${LIB}} != ""
+.if !empty(LIBADD) && \
+    (!defined(_DP_${LIB}) || ${LIBADD:O:u} != ${_DP_${LIB}:O:u})
+.error ${.CURDIR}: Missing or incorrect _DP_${LIB} entry in ${_this:T}.  
Should match LIBADD for ${LIB} ('${LIBADD}' vs '${_DP_${LIB}}')
+.endif
+.if !defined(LIB${LIB:tu}DIR) || 
!exists(${SRCTOP}/${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,})
+.error ${.CURDIR}: Missing or incorrect value for LIB${LIB:tu}DIR in 
${_this:T}: ${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,}
+.endif
+.if ${_INTERNALLIBS:M${LIB}} != "" && !defined(LIB${LIB:tu})
+.error ${.CURDIR}: Missing value for LIB${LIB:tu} in ${_this:T}.  Likely 
should be: LIB${LIB:tu}?= $${LIB${LIB:tu}DIR}/lib${LIB}.a
+.endif
+.endif
+
 .endif # !target(__<src.libnames.mk>__)
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to