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