freebsd-dev/lib/Makefile
Peter Wemm 091b8336ae Attempt to move the POSIX iconv* symbols out of runtime linker space.
FreeBSD systems usually implemented this as a third party module and
our implementation hasn't played as nicely with the old way as it could
have.

To that end:
* Rename the iconv* symbols in libc.so.7 to have a __bsd_ prefix.
* Provide .symver compatability with existing 10.x+ binaries that
  referenced the iconv symbols. All existing binaries should work.
* Like on Linux/glibc systems, add a libc_nonshared.a to the ldscript
  at /usr/lib/libc.so.
* Move the "iconv*" wrapper symbols to libc_nonshared.a

This should solve the runtime ambiguity about which symbols resolve
to where.  If you compile against the iconv in libc, your runtime
dependencies will be unambiguous.

Old 9.x libraries and binaries will always resolve against their
libiconv.so.3 like they did on 9.x.  They won't resolve against libc.

Old 10.x binaries will be satisified by the .symver helpers.

This should allow ports to selectively compile against the libiconv
port if needed and it should behave without ambiguity now.

Discussed with:	 kib
2013-11-17 22:52:17 +00:00

275 lines
4.7 KiB
Makefile

# @(#)Makefile 8.1 (Berkeley) 6/4/93
# $FreeBSD$
.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
SUBDIR_ORDERED= ${_csu} \
libc \
libc_nonshared \
libbsm \
libauditd \
libcompiler_rt \
libcrypt \
libelf \
${_libiconv_modules} \
libkvm \
${_libldns} \
msun \
libmd \
ncurses \
${_libnetgraph} \
libradius \
librpcsvc \
libsbuf \
libtacplus \
libutil \
${_libypclnt} \
${_libcxxrt} \
${_libcplusplus}
.if ${MK_KERBEROS_SUPPORT} != "no"
SUBDIR_ORDERED+= libcom_err
.endif
SUBDIR= ${SUBDIR_ORDERED} \
libalias \
libarchive \
${_libatm} \
libbegemot \
libblocksruntime \
${_libbluetooth} \
${_libbsnmp} \
libbz2 \
libcalendar \
libcam \
libcompat \
libdevinfo \
libdevstat \
libdwarf \
libedit \
${_libefi} \
libexecinfo \
libexpat \
libfetch \
libgeom \
${_libgpib} \
${_libgssapi} \
${_librpcsec_gss} \
libipsec \
${_libipx} \
libjail \
libkiconv \
liblzma \
libmagic \
libmandoc \
libmemstat \
${_libmilter} \
${_libmp} \
${_libnandfs} \
libnetbsd \
${_libngatm} \
libnv \
libopie \
libpam \
libpcap \
${_libpmc} \
${_libproc} \
libprocstat \
librt \
${_librtld_db} \
${_libsdp} \
${_libsm} \
${_libsmb} \
${_libsmdb} \
${_libsmutil} \
libstand \
libstdbuf \
libstdthreads \
${_libtelnet} \
${_libthr} \
libthread_db \
libufs \
libugidfw \
libulog \
${_libunbound} \
${_libusbhid} \
${_libusb} \
${_libvgl} \
${_libvmmapi} \
libwrap \
liby \
libyaml \
libz \
${_atf} \
${_clang} \
${_tests}
.if exists(${.CURDIR}/csu/${MACHINE_ARCH}-elf)
_csu=csu/${MACHINE_ARCH}-elf
.elif exists(${.CURDIR}/csu/${MACHINE_ARCH})
_csu=csu/${MACHINE_ARCH}
.elif exists(${.CURDIR}/csu/${MACHINE_CPUARCH}/Makefile)
_csu=csu/${MACHINE_CPUARCH}
.else
_csu=csu
.endif
# NB: keep these sorted by MK_* knobs
.if ${MK_ATM} != "no"
_libngatm= libngatm
.endif
.if ${MK_BLUETOOTH} != "no"
_libbluetooth= libbluetooth
_libsdp= libsdp
.endif
.if ${MK_BSNMP} != "no"
_libbsnmp= libbsnmp
.endif
.if ${MK_CLANG} != "no" && !defined(COMPAT_32BIT)
_clang= clang
.endif
.if ${MK_GPIB} != "no"
_libgpib= libgpib
.endif
.if ${MK_GSSAPI} != "no"
_libgssapi= libgssapi
_librpcsec_gss= librpcsec_gss
.endif
.if ${MK_ICONV} != "no"
_libiconv_modules= libiconv_modules
.endif
.if ${MK_IPX} != "no"
_libipx= libipx
.endif
.if ${MK_LDNS} != "no"
_libldns= libldns
.endif
.if ${MK_LIBCPLUSPLUS} != "no"
_libcxxrt= libcxxrt
_libcplusplus= libc++
.endif
.if ${MK_LIBTHR} != "no"
_libthr= libthr
.endif
.if ${MK_NAND} != "no"
_libnandfs= libnandfs
.endif
.if ${MK_NETGRAPH} != "no"
_libnetgraph= libnetgraph
.endif
.if ${MK_NIS} != "no"
_libypclnt= libypclnt
.endif
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
_libsmb= libsmb
_libvgl= libvgl
_libproc= libproc
_librtld_db= librtld_db
.endif
.if ${MACHINE_CPUARCH} == "amd64"
_libvmmapi= libvmmapi
.endif
.if ${MACHINE_CPUARCH} == "ia64"
_libefi= libefi
_libsmb= libsmb
.endif
.if ${MACHINE_CPUARCH} == "mips"
_libproc= libproc
_librtld_db= librtld_db
.endif
.if ${MACHINE_CPUARCH} == "powerpc"
_libproc= libproc
_librtld_db= librtld_db
_libsmb= libsmb
.endif
.if ${MACHINE_CPUARCH} == "sparc64"
_libsmb= libsmb
.endif
.if ${MK_OPENSSL} != "no"
_libmp= libmp
.endif
.if ${MK_PMC} != "no"
_libpmc= libpmc
.endif
.if ${MK_SENDMAIL} != "no"
_libmilter= libmilter
_libsm= libsm
_libsmdb= libsmdb
_libsmutil= libsmutil
.endif
.if ${MK_TELNET} != "no"
_libtelnet= libtelnet
.endif
.if ${MK_TESTS} != "no"
_atf= atf
_tests= tests
.endif
.if ${MK_UNBOUND} != "no"
_libunbound= libunbound
.endif
.if ${MK_USB} != "no"
_libusbhid= libusbhid
_libusb= libusb
.endif
.if !defined(LIBRARIES_ONLY)
afterinstall:
${INSTALL_SYMLINK} ../include ${DESTDIR}/usr/lib/include
.endif
.include <bsd.subdir.mk>