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