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