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