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