xref: /NextBSD/share/mk/src.libnames.mk (revision 5da7319dfc1e514b566ff8f06458d01cc8075f5c)
1# $FreeBSD$
2#
3# The include file <src.libnames.mk> define library names suitable
4# for INTERNALLIB and PRIVATELIB definition
5
6.if !target(__<bsd.init.mk>__)
7.error src.libnames.mk cannot be included directly.
8.endif
9
10.if !target(__<src.libnames.mk>__)
11__<src.libnames.mk>__:
12
13.include <src.opts.mk>
14
15_PRIVATELIBS=	\
16		atf_c \
17		atf_cxx \
18		bsdstat \
19		event \
20		heimipcc \
21		heimipcs \
22		ldns \
23		sqlite3 \
24		ssh \
25		ucl \
26		unbound
27
28_INTERNALLIBS=	\
29		amu \
30		bsnmptools \
31		cron \
32		elftc \
33		fifolog \
34		ipf \
35		lpr \
36		netbsd \
37		ntp \
38		ntpevent \
39		openbsd \
40		opts \
41		parse \
42		readline \
43		sl \
44		sm \
45		smdb \
46		smutil \
47		telnet \
48		vers
49
50_LIBRARIES=	\
51		${_PRIVATELIBS} \
52		${_INTERNALLIBS} \
53		${LOCAL_LIBRARIES} \
54		80211 \
55		alias \
56		archive \
57		asn1 \
58		auditd \
59		avl \
60		begemot \
61		BlocksRuntime \
62		bluetooth \
63		bsdxml \
64		bsm \
65		bsnmp \
66		bz2 \
67		c \
68		c_pic \
69		calendar \
70		cam \
71		capsicum \
72		casper \
73		com_err \
74		compiler_rt \
75		crypt \
76		crypto \
77		ctf \
78		cuse \
79		cxxrt \
80		devctl \
81		devinfo \
82		devstat \
83		dialog \
84		dispatch \
85		dpv \
86		dtrace \
87		dwarf \
88		edit \
89		elf \
90		execinfo \
91		fetch \
92		figpar \
93		geom \
94		gnuregex \
95		gpio \
96		gssapi \
97		gssapi_krb5 \
98		hdb \
99		heimbase \
100		heimntlm \
101		heimsqlite \
102		hx509 \
103		ipsec \
104		jail \
105		kadm5clnt \
106		kadm5srv \
107		kafs5 \
108		kdc \
109		kiconv \
110		krb5 \
111		kvm \
112		l \
113		launch \
114		lzma \
115		m \
116		mach \
117		magic \
118		md \
119		memstat \
120		mp \
121		mt \
122		nandfs \
123		ncurses \
124		ncursesw \
125		netgraph \
126		ngatm \
127		nv \
128		nvpair \
129		opie \
130		osxsupport \
131		pam \
132		panel \
133		panelw \
134		pcap \
135		pcsclite \
136		pjdlog \
137		pmc \
138		proc \
139		procstat \
140		pthread \
141		radius \
142		readline \
143		roken \
144		rpcsec_gss \
145		rpcsvc \
146		rt \
147		rtld_db \
148		sbuf \
149		sdp \
150		sm \
151		smb \
152		ssl \
153		ssp_nonshared \
154		stdthreads \
155		supcplusplus \
156		sysdecode \
157		tacplus \
158		termcap \
159		termcapw \
160		ufs \
161		ugidfw \
162		ulog \
163		umem \
164		usb \
165		usbhid \
166		util \
167		uutil \
168		vmmapi \
169		wind \
170		wrap \
171		xo \
172		xpc \
173		y \
174		ypclnt \
175		z \
176		zfs_core \
177		zfs \
178		zpool \
179
180.if ${MK_OFED} != "no"
181_LIBRARIES+= \
182		cxgb4 \
183		ibcm \
184		ibcommon \
185		ibmad \
186		ibsdp \
187		ibumad \
188		ibverbs \
189		mlx4 \
190		mthca \
191		opensm \
192		osmcomp \
193		osmvendor \
194		rdmacm \
195
196.endif
197
198# Each library's LIBADD needs to be duplicated here for static linkage of
199# 2nd+ order consumers.  Auto-generating this would be better.
200_DP_80211=	sbuf bsdxml
201_DP_archive=	z bz2 lzma bsdxml
202.if ${MK_OPENSSL} != "no"
203_DP_archive+=	crypto
204.else
205_DP_archive+=	md
206.endif
207_DP_sqlite3=	pthread
208_DP_ssl=	crypto
209_DP_ssh=	crypto crypt z
210.if ${MK_LDNS} != "no"
211_DP_ssh+=	ldns
212.endif
213_DP_edit=	ncursesw
214.if ${MK_OPENSSL} != "no"
215_DP_bsnmp=	crypto
216.endif
217_DP_geom=	bsdxml sbuf
218_DP_cam=	sbuf
219_DP_casper=	capsicum nv pjdlog
220_DP_capsicum=	nv
221_DP_kvm=	elf
222_DP_pjdlog=	util
223_DP_opie=	md
224_DP_usb=	pthread
225_DP_unbound=	ssl crypto pthread
226_DP_rt=	pthread
227.if ${MK_OPENSSL} == "no"
228_DP_radius=	md
229.else
230_DP_radius=	crypto
231.endif
232_DP_procstat=	kvm util elf
233.if ${MK_CXX} == "yes"
234.if ${MK_LIBCPLUSPLUS} != "no"
235_DP_proc=	cxxrt
236.else
237_DP_proc=	supcplusplus
238.endif
239.endif
240.if ${MK_CDDL} != "no"
241_DP_proc+=	ctf
242.endif
243_DP_proc+=	elf rtld_db util
244_DP_mp=	crypto
245_DP_memstat=	kvm
246_DP_magic=	z
247_DP_mt=		sbuf bsdxml
248_DP_ldns=	crypto
249.if ${MK_OPENSSL} != "no"
250_DP_fetch=	ssl crypto
251.else
252_DP_fetch=	md
253.endif
254_DP_execinfo=	elf
255_DP_dwarf=	elf
256_DP_dpv=	dialog figpar util ncursesw
257_DP_dialog=	ncursesw m
258_DP_cuse=	pthread
259_DP_atf_cxx=	atf_c
260_DP_devstat=	kvm
261_DP_pam=	radius tacplus opie md util
262.if ${MK_KERBEROS} != "no"
263_DP_pam+=	krb5
264.endif
265.if ${MK_OPENSSH} != "no"
266_DP_pam+=	ssh
267.endif
268.if ${MK_NIS} != "no"
269_DP_pam+=	ypclnt
270.endif
271_DP_readline=	ncursesw
272_DP_roken=	crypt
273_DP_kadm5clnt=	com_err krb5 roken
274_DP_kadm5srv=	com_err hdb krb5 roken
275_DP_heimntlm=	crypto com_err krb5 roken
276_DP_hx509=	asn1 com_err crypto roken wind
277_DP_hdb=	asn1 com_err krb5 roken sqlite3
278_DP_asn1=	com_err roken
279_DP_kdc=	roken hdb hx509 krb5 heimntlm asn1 crypto
280_DP_wind=	com_err roken
281_DP_heimbase=	pthread
282_DP_heimipcc=	heimbase roken pthread
283_DP_heimipcs=	heimbase roken pthread
284_DP_kafs5=	asn1 krb5 roken
285_DP_krb5+=	asn1 com_err crypt crypto hx509 roken wind heimbase heimipcc
286_DP_gssapi_krb5+=	gssapi krb5 crypto roken asn1 com_err
287_DP_lzma=	pthread
288_DP_ucl=	m
289_DP_vmmapi=	util
290_DP_ctf=	z
291_DP_dtrace=	ctf elf proc pthread rtld_db
292_DP_xo=		util
293# The libc dependencies are not strictly needed but are defined to make the
294# assert happy.
295_DP_c=		compiler_rt
296.if ${MK_SSP} != "no"
297_DP_c+=		ssp_nonshared
298.endif
299_DP_stdthreads=	pthread
300_DP_tacplus=	md
301_DP_panel=	ncurses
302_DP_panelw=	ncursesw
303_DP_rpcsec_gss=	gssapi
304_DP_smb=	kiconv
305_DP_ulog=	md
306_DP_fifolog=	z
307_DP_ipf=	kvm
308_DP_zfs=	md pthread umem util uutil m nvpair avl bsdxml geom nvpair z \
309		zfs_core
310_DP_zfs_core=	nvpair
311_DP_zpool=	md pthread z nvpair avl umem
312
313# Define special cases
314LDADD_supcplusplus=	-lsupc++
315LIBATF_C=	${DESTDIR}${LIBDIR}/libprivateatf-c.a
316LIBATF_CXX=	${DESTDIR}${LIBDIR}/libprivateatf-c++.a
317LDADD_atf_c=	-lprivateatf-c
318LDADD_atf_cxx=	-lprivateatf-c++
319
320.for _l in ${_PRIVATELIBS}
321LIB${_l:tu}?=	${DESTDIR}${LIBDIR}/libprivate${_l}.a
322.endfor
323
324.for _l in ${_LIBRARIES}
325.if ${_INTERNALLIBS:M${_l}}
326LDADD_${_l}_L+=		-L${LIB${_l:tu}DIR}
327.endif
328DPADD_${_l}?=	${LIB${_l:tu}}
329.if ${_PRIVATELIBS:M${_l}}
330LDADD_${_l}?=	-lprivate${_l}
331.else
332LDADD_${_l}?=	${LDADD_${_l}_L} -l${_l}
333.endif
334# Add in all dependencies for static linkage.
335.if defined(_DP_${_l}) && (${_INTERNALLIBS:M${_l}} || \
336    (defined(NO_SHARED) && (${NO_SHARED} != "no" && ${NO_SHARED} != "NO")))
337.for _d in ${_DP_${_l}}
338DPADD_${_l}+=	${DPADD_${_d}}
339LDADD_${_l}+=	${LDADD_${_d}}
340.endfor
341.endif
342.endfor
343
344# These are special cases where the library is broken and anything that uses
345# it needs to add more dependencies.  Broken usually means that it has a
346# cyclic dependency and cannot link its own dependencies.  This is bad, please
347# fix the library instead.
348# Unless the library itself is broken then the proper place to define
349# dependencies is _DP_* above.
350
351# libatf-c++ exposes libatf-c abi hence we need to explicit link to atf_c for
352# atf_cxx
353DPADD_atf_cxx+=	${DPADD_atf_c}
354LDADD_atf_cxx+=	${LDADD_atf_c}
355
356# Detect LDADD/DPADD that should be LIBADD, before modifying LDADD here.
357_BADLDADD=
358.for _l in ${LDADD:M-l*:N-l*/*:C,^-l,,}
359.if ${_LIBRARIES:M${_l}} && !${_PRIVATELIBS:M${_l}}
360_BADLDADD+=	${_l}
361.endif
362.endfor
363.if !empty(_BADLDADD)
364.error ${.CURDIR}: These libraries should be LIBADD+=foo rather than DPADD/LDADD+=-lfoo: ${_BADLDADD}
365.endif
366
367.for _l in ${LIBADD}
368DPADD+=		${DPADD_${_l}}
369LDADD+=		${LDADD_${_l}}
370.endfor
371
372# INTERNALLIB definitions.
373LIBELFTCDIR=	${OBJTOP}/lib/libelftc
374LIBELFTC?=	${LIBELFTCDIR}/libelftc.a
375
376LIBREADLINEDIR=	${OBJTOP}/gnu/lib/libreadline/readline
377LIBREADLINE?=	${LIBREADLINEDIR}/libreadline.a
378
379LIBOPENBSDDIR=	${OBJTOP}/lib/libopenbsd
380LIBOPENBSD?=	${LIBOPENBSDDIR}/libopenbsd.a
381
382LIBSMDIR=	${OBJTOP}/lib/libsm
383LIBSM?=		${LIBSMDIR}/libsm.a
384
385LIBSMDBDIR=	${OBJTOP}/lib/libsmdb
386LIBSMDB?=	${LIBSMDBDIR}/libsmdb.a
387
388LIBSMUTILDIR=	${OBJTOP}/lib/libsmutil
389LIBSMUTIL?=	${LIBSMDBDIR}/libsmutil.a
390
391LIBNETBSDDIR?=	${OBJTOP}/lib/libnetbsd
392LIBNETBSD?=	${LIBNETBSDDIR}/libnetbsd.a
393
394LIBVERSDIR?=	${OBJTOP}/kerberos5/lib/libvers
395LIBVERS?=	${LIBVERSDIR}/libvers.a
396
397LIBSLDIR=	${OBJTOP}/kerberos5/lib/libsl
398LIBSL?=		${LIBSLDIR}/libsl.a
399
400LIBIPFDIR=	${OBJTOP}/sbin/ipf/libipf
401LIBIPF?=	${LIBIPFDIR}/libipf.a
402
403LIBTELNETDIR=	${OBJTOP}/lib/libtelnet
404LIBTELNET?=	${LIBTELNETDIR}/libtelnet.a
405
406LIBCRONDIR=	${OBJTOP}/usr.sbin/cron/lib
407LIBCRON?=	${LIBCRONDIR}/libcron.a
408
409LIBNTPDIR=	${OBJTOP}/usr.sbin/ntp/libntp
410LIBNTP?=	${LIBNTPDIR}/libntp.a
411
412LIBNTPEVENTDIR=	${OBJTOP}/usr.sbin/ntp/libntpevent
413LIBNTPEVENT?=	${LIBNTPEVENTDIR}/libntpevent.a
414
415LIBOPTSDIR=	${OBJTOP}/usr.sbin/ntp/libopts
416LIBOPTS?=	${LIBOPTSDIR}/libopts.a
417
418LIBPARSEDIR=	${OBJTOP}/usr.sbin/ntp/libparse
419LIBPARSE?=	${LIBPARSEDIR}/libparse.a
420
421LIBLPRDIR=	${OBJTOP}/usr.sbin/lpr/common_source
422LIBLPR?=	${LIBOPTSDIR}/liblpr.a
423
424LIBFIFOLOGDIR=	${OBJTOP}/usr.sbin/fifolog/lib
425LIBFIFOLOG?=	${LIBOPTSDIR}/libfifolog.a
426
427LIBBSNMPTOOLSDIR=	${OBJTOP}/usr.sbin/bsnmpd/tools/libbsnmptools
428LIBBSNMPTOOLS?=	${LIBBSNMPTOOLSDIR}/libbsnmptools.a
429
430LIBAMUDIR=	${OBJTOP}/usr.sbin/amd/libamu
431LIBAMU?=	${LIBAMUDIR}/libamu/libamu.a
432
433# Define a directory for each library.  This is useful for adding -L in when
434# not using a --sysroot or for meta mode bootstrapping when there is no
435# Makefile.depend.  These are sorted by directory.
436LIBAVLDIR=	${OBJTOP}/cddl/lib/libavl
437LIBCTFDIR=	${OBJTOP}/cddl/lib/libctf
438LIBDTRACEDIR=	${OBJTOP}/cddl/lib/libdtrace
439LIBNVPAIRDIR=	${OBJTOP}/cddl/lib/libnvpair
440LIBUMEMDIR=	${OBJTOP}/cddl/lib/libumem
441LIBUUTILDIR=	${OBJTOP}/cddl/lib/libuutil
442LIBZFSDIR=	${OBJTOP}/cddl/lib/libzfs
443LIBZFS_COREDIR=	${OBJTOP}/cddl/lib/libzfs_core
444LIBZPOOLDIR=	${OBJTOP}/cddl/lib/libzpool
445LIBCXGB4DIR=	${OBJTOP}/contrib/ofed/usr.lib/libcxgb4
446LIBIBCMDIR=	${OBJTOP}/contrib/ofed/usr.lib/libibcm
447LIBIBCOMMONDIR=	${OBJTOP}/contrib/ofed/usr.lib/libibcommon
448LIBIBMADDIR=	${OBJTOP}/contrib/ofed/usr.lib/libibmad
449LIBIBUMADDIR=	${OBJTOP}/contrib/ofed/usr.lib/libibumad
450LIBIBVERBSDIR=	${OBJTOP}/contrib/ofed/usr.lib/libibverbs
451LIBMLX4DIR=	${OBJTOP}/contrib/ofed/usr.lib/libmlx4
452LIBMTHCADIR=	${OBJTOP}/contrib/ofed/usr.lib/libmthca
453LIBOPENSMDIR=	${OBJTOP}/contrib/ofed/usr.lib/libopensm
454LIBOSMCOMPDIR=	${OBJTOP}/contrib/ofed/usr.lib/libosmcomp
455LIBOSMVENDORDIR=	${OBJTOP}/contrib/ofed/usr.lib/libosmvendor
456LIBRDMACMDIR=	${OBJTOP}/contrib/ofed/usr.lib/librdmacm
457LIBIBSDPDIR=	${OBJTOP}/contrib/ofed/usr.lib/libsdp
458LIBDIALOGDIR=	${OBJTOP}/gnu/lib/libdialog
459LIBGCOVDIR=	${OBJTOP}/gnu/lib/libgcov
460LIBGOMPDIR=	${OBJTOP}/gnu/lib/libgomp
461LIBGNUREGEXDIR=	${OBJTOP}/gnu/lib/libregex
462LIBSSPDIR=	${OBJTOP}/gnu/lib/libssp
463LIBSSP_NONSHAREDDIR=	${OBJTOP}/gnu/lib/libssp/libssp_nonshared
464LIBSUPCPLUSPLUSDIR=	${OBJTOP}/gnu/lib/libsupc++
465LIBASN1DIR=	${OBJTOP}/kerberos5/lib/libasn1
466LIBGSSAPI_KRB5DIR=	${OBJTOP}/kerberos5/lib/libgssapi_krb5
467LIBGSSAPI_NTLMDIR=	${OBJTOP}/kerberos5/lib/libgssapi_ntlm
468LIBGSSAPI_SPNEGODIR=	${OBJTOP}/kerberos5/lib/libgssapi_spnego
469LIBHDBDIR=	${OBJTOP}/kerberos5/lib/libhdb
470LIBHEIMBASEDIR=	${OBJTOP}/kerberos5/lib/libheimbase
471LIBHEIMIPCCDIR=	${OBJTOP}/kerberos5/lib/libheimipcc
472LIBHEIMIPCSDIR=	${OBJTOP}/kerberos5/lib/libheimipcs
473LIBHEIMNTLMDIR=	${OBJTOP}/kerberos5/lib/libheimntlm
474LIBHX509DIR=	${OBJTOP}/kerberos5/lib/libhx509
475LIBKADM5CLNTDIR=	${OBJTOP}/kerberos5/lib/libkadm5clnt
476LIBKADM5SRVDIR=	${OBJTOP}/kerberos5/lib/libkadm5srv
477LIBKAFS5DIR=	${OBJTOP}/kerberos5/lib/libkafs5
478LIBKDCDIR=	${OBJTOP}/kerberos5/lib/libkdc
479LIBKRB5DIR=	${OBJTOP}/kerberos5/lib/libkrb5
480LIBROKENDIR=	${OBJTOP}/kerberos5/lib/libroken
481LIBWINDDIR=	${OBJTOP}/kerberos5/lib/libwind
482LIBALIASDIR=	${OBJTOP}/lib/libalias/libalias
483LIBBLOCKSRUNTIMEDIR=	${OBJTOP}/lib/libblocksruntime
484LIBBLOCKSRUNTIME?=	${OBJTOP}/lib/libBlocksRuntime.a
485LIBBSNMPDIR=	${OBJTOP}/lib/libbsnmp/libbsnmp
486LIBDISPATCH?=	${OBJTOP}/lib/libdispatch.a
487LIBBSDXMLDIR=	${OBJTOP}/lib/libexpat
488LIBKVMDIR=	${OBJTOP}/lib/libkvm
489LIBMACH?=	${OBJTOP}/lib/libmach.a
490LIBOSXSUPPORT?=	${OBJTOP}/lib/libosxsupport.a
491LIBPTHREADDIR=	${OBJTOP}/lib/libthr
492LIBLAUNCH?=	${OBJDIR}/lib/liblaunch.a
493LIBXPC?=	${OBJDIR}/lib/libxpc.a
494LIBMDIR=	${OBJTOP}/lib/msun
495LIBFORMDIR=	${OBJTOP}/lib/ncurses/form
496LIBFORMLIBWDIR=	${OBJTOP}/lib/ncurses/formw
497LIBMENUDIR=	${OBJTOP}/lib/ncurses/menu
498LIBMENULIBWDIR=	${OBJTOP}/lib/ncurses/menuw
499LIBNCURSESDIR=	${OBJTOP}/lib/ncurses/ncurses
500LIBNCURSESWDIR=	${OBJTOP}/lib/ncurses/ncursesw
501LIBPANELDIR=	${OBJTOP}/lib/ncurses/panel
502LIBPANELWDIR=	${OBJTOP}/lib/ncurses/panelw
503LIBCRYPTODIR=	${OBJTOP}/secure/lib/libcrypto
504LIBSSHDIR=	${OBJTOP}/secure/lib/libssh
505LIBSSLDIR=	${OBJTOP}/secure/lib/libssl
506LIBTEKENDIR=	${OBJTOP}/sys/teken/libteken
507LIBEGACYDIR=	${OBJTOP}/tools/build
508LIBLNDIR=	${OBJTOP}/usr.bin/lex/lib
509
510LIBTERMCAPDIR=	${LIBNCURSESDIR}
511LIBTERMCAPWDIR=	${LIBNCURSESWDIR}
512
513# Default other library directories to lib/libNAME.
514.for lib in ${_LIBRARIES}
515LIB${lib:tu}DIR?=	${OBJTOP}/lib/lib${lib}
516.endfor
517
518# Validate that listed LIBADD are valid.
519.for _l in ${LIBADD}
520.if empty(_LIBRARIES:M${_l})
521_BADLIBADD+= ${_l}
522.endif
523.endfor
524.if !empty(_BADLIBADD)
525.error ${.CURDIR}: Invalid LIBADD used which may need to be added to ${_this:T}: ${_BADLIBADD}
526.endif
527
528# Sanity check that libraries are defined here properly when building them.
529.if defined(LIB) && ${_LIBRARIES:M${LIB}} != ""
530.if !empty(LIBADD) && \
531    (!defined(_DP_${LIB}) || ${LIBADD:O:u} != ${_DP_${LIB}:O:u})
532.error ${.CURDIR}: Missing or incorrect _DP_${LIB} entry in ${_this:T}.  Should match LIBADD for ${LIB} ('${LIBADD}' vs '${_DP_${LIB}}')
533.endif
534# Note that OBJTOP is not yet defined here but for the purpose of the check
535# it is fine as it resolves to the SRC directory.
536.if !defined(LIB${LIB:tu}DIR) || !exists(${SRCTOP}/${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,})
537.error ${.CURDIR}: Missing or incorrect value for LIB${LIB:tu}DIR in ${_this:T}: ${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,}
538.endif
539.if ${_INTERNALLIBS:M${LIB}} != "" && !defined(LIB${LIB:tu})
540.error ${.CURDIR}: Missing value for LIB${LIB:tu} in ${_this:T}.  Likely should be: LIB${LIB:tu}?= $${LIB${LIB:tu}DIR}/lib${LIB}.a
541.endif
542.endif
543
544.endif	# !target(__<src.libnames.mk>__)
545