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