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