1# $NetBSD: bsd.lib.mk,v 1.196 2001/12/28 01:40:50 lukem Exp $ 2# @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94 3 4.include <bsd.init.mk> 5 6##### Basic targets 7.PHONY: checkver cleanlib libinstall 8realinstall: checkver libinstall 9clean: cleanlib 10 11##### Build and install rules 12CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include} 13CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include/g++} 14 15.if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE}) 16SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major 17SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor 18SHLIB_TEENY != . ${SHLIB_VERSION_FILE} ; echo $$teeny 19 20# Check for higher installed library versions. 21.if !defined(NOCHECKVER) && !defined(NOCHECKVER_${LIB}) && \ 22 exists(${BSDSRCDIR}/lib/checkver) 23checkver: 24 @(cd ${.CURDIR} && \ 25 sh ${BSDSRCDIR}/lib/checkver -v ${SHLIB_VERSION_FILE} \ 26 -d ${DESTDIR}${_LIBSODIR} ${LIB}) 27.endif 28.endif 29 30.if !target(checkver) 31checkver: 32.endif 33 34print-shlib-major: 35.if defined(SHLIB_MAJOR) && ${MKPIC} != "no" 36 @echo ${SHLIB_MAJOR} 37.else 38 @false 39.endif 40 41print-shlib-minor: 42.if defined(SHLIB_MINOR) && ${MKPIC} != "no" 43 @echo ${SHLIB_MINOR} 44.else 45 @false 46.endif 47 48print-shlib-teeny: 49.if defined(SHLIB_TEENY) && ${MKPIC} != "no" 50 @echo ${SHLIB_TEENY} 51.else 52 @false 53.endif 54 55.if defined(SHLIB_MAJOR) && !empty(SHLIB_MAJOR) 56.if defined(SHLIB_MINOR) && !empty(SHLIB_MINOR) 57.if defined(SHLIB_TEENY) && !empty(SHLIB_TEENY) 58SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY} 59.else 60SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} 61.endif 62.else 63SHLIB_FULLVERSION=${SHLIB_MAJOR} 64.endif 65.endif 66 67# add additional suffixes not exported. 68# .po is used for profiling object files. 69# .so is used for PIC object files. 70.SUFFIXES: .out .a .ln .so .po .o .s .S .c .cc .C .m .F .f .r .y .l .cl .p .h 71.SUFFIXES: .sh .m4 .m 72 73 74# Set PICFLAGS to cc flags for producing position-independent code, 75# if not already set. Includes -DPIC, if required. 76 77# Data-driven table using make variables to control how shared libraries 78# are built for different platforms and object formats. 79# OBJECT_FMT: currently either "ELF" or "a.out", from <bsd.own.mk> 80# SHLIB_SOVERSION: version number to be compiled into a shared library 81# via -soname. Usualy ${SHLIB_MAJOR} on ELF. 82# NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR} 83# [.${SHLIB_TEENY}]] 84# SHLIB_SHFLAGS: Flags to tell ${LD} to emit shared library. 85# with ELF, also set shared-lib version for ld.so. 86# SHLIB_LDSTARTFILE: support .o file, call C++ file-level constructors 87# SHLIB_LDENDFILE: support .o file, call C++ file-level destructors 88# FPICFLAGS: flags for ${FC} to compile .[fF] files to .so objects. 89# CPPICFLAGS: flags for ${CPP} to preprocess .[sS] files for ${AS} 90# CPICFLAGS: flags for ${CC} to compile .[cC] files to .so objects. 91# CAPICFLAGS flags for {$CC} to compiling .[Ss] files 92# (usually just ${CPPPICFLAGS} ${CPICFLAGS}) 93# APICFLAGS: flags for ${AS} to assemble .[sS] to .so objects. 94 95.if ${MACHINE_ARCH} == "alpha" 96 # Alpha-specific shared library flags 97FPICFLAGS ?= -fPIC 98CPICFLAGS ?= -fPIC -DPIC 99CPPPICFLAGS?= -DPIC 100CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 101APICFLAGS ?= 102.elif ${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb" 103 # mips-specific shared library flags 104 105# On mips, all libs are compiled with ABIcalls, not just sharedlibs. 106MKPICLIB= no 107 108# so turn shlib PIC flags on for ${AS}. 109AINC+=-DABICALLS 110AFLAGS+= -fPIC 111AS+= -KPIC 112 113.elif ${MACHINE_ARCH} == "vax" && ${OBJECT_FMT} == "ELF" 114# On the VAX, all object are PIC by default, not just sharedlibs. 115MKPICLIB= no 116 117.elif (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") && \ 118 ${OBJECT_FMT} == "ELF" 119 120FPICFLAGS ?= -fPIC 121CPICFLAGS ?= -fPIC -DPIC 122CPPPICFLAGS?= -DPIC 123CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 124APICFLAGS ?= -KPIC 125 126.else 127 128# Platform-independent flags for NetBSD a.out shared libraries 129SHLIB_SOVERSION=${SHLIB_FULLVERSION} 130SHLIB_SHFLAGS= 131FPICFLAGS ?= -fPIC 132CPICFLAGS?= -fPIC -DPIC 133CPPPICFLAGS?= -DPIC 134CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 135APICFLAGS?= -k 136 137.endif 138 139MKPICLIB?= yes 140 141# Platform-independent linker flags for ELF shared libraries 142.if ${OBJECT_FMT} == "ELF" 143SHLIB_SOVERSION= ${SHLIB_MAJOR} 144SHLIB_SHFLAGS= -soname lib${LIB}.so.${SHLIB_SOVERSION} 145SHLIB_LDSTARTFILE?= ${DESTDIR}/usr/lib/crtbeginS.o 146SHLIB_LDENDFILE?= ${DESTDIR}/usr/lib/crtendS.o 147.endif 148 149CFLAGS+= ${COPTS} 150FFLAGS+= ${FOPTS} 151 152.c.o: 153.if defined(COPTS) && !empty(COPTS:M*-g*) 154 ${COMPILE.c} ${.IMPSRC} 155.else 156 @echo ${COMPILE.c:Q} ${.IMPSRC} 157 @${COMPILE.c} ${.IMPSRC} -o ${.TARGET}.o 158 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 159 @rm -f ${.TARGET}.o 160.endif 161 162.c.po: 163.if defined(COPTS) && !empty(COPTS:M*-g*) 164 ${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET} 165.else 166 @echo ${COMPILE.c:Q} -pg ${.IMPSRC} -o ${.TARGET} 167 @${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}.o 168 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 169 @rm -f ${.TARGET}.o 170.endif 171 172.c.so: 173.if defined(COPTS) && !empty(COPTS:M*-g*) 174 ${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 175.else 176 @echo ${COMPILE.c:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 177 @${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 178 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 179 @rm -f ${.TARGET}.o 180.endif 181 182.c.ln: 183 ${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC} 184 185.cc.o .C.o: 186.if defined(COPTS) && !empty(COPTS:M*-g*) 187 ${COMPILE.cc} ${.IMPSRC} 188.else 189 @echo ${COMPILE.cc:Q} ${.IMPSRC} 190 @${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o 191 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 192 @rm -f ${.TARGET}.o 193.endif 194 195.cc.po .C.po: 196.if defined(COPTS) && !empty(COPTS:M*-g*) 197 ${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET} 198.else 199 @echo ${COMPILE.cc:Q} -pg ${.IMPSRC} -o ${.TARGET} 200 @${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o 201 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 202 @rm -f ${.TARGET}.o 203.endif 204 205.cc.so .C.so: 206.if defined(COPTS) && !empty(COPTS:M*-g*) 207 ${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 208.else 209 @echo ${COMPILE.cc:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 210 @${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 211 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 212 @rm -f ${.TARGET}.o 213.endif 214 215.f.o: 216.if defined(FOPTS) && !empty(FOPTS:M*-g*) 217 ${COMPILE.f} ${.IMPSRC} 218.else 219 @echo ${COMPILE.f:Q} ${.IMPSRC} 220 @${COMPILE.f} ${.IMPSRC} -o ${.TARGET}.o 221 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 222 @rm -f ${.TARGET}.o 223.endif 224 225.f.po: 226.if defined(FOPTS) && !empty(FOPTS:M*-g*) 227 ${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET} 228.else 229 @echo ${COMPILE.f:Q} -pg ${.IMPSRC} -o ${.TARGET} 230 @${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET}.o 231 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 232 @rm -f ${.TARGET}.o 233.endif 234 235.f.so: 236.if defined(FOPTS) && !empty(FOPTS:M*-g*) 237 ${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} 238.else 239 @echo ${COMPILE.f:Q} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} 240 @${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 241 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 242 @rm -f ${.TARGET}.o 243.endif 244 245.f.ln: 246 ${ECHO} Skipping lint for Fortran libraries. 247 248.m.o: 249.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 250 ${COMPILE.m} ${.IMPSRC} 251.else 252 @echo ${COMPILE.m:Q} ${.IMPSRC} 253 @${COMPILE.m} ${.IMPSRC} -o ${.TARGET}.o 254 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 255 @rm -f ${.TARGET}.o 256.endif 257 258.m.po: 259.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 260 ${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET} 261.else 262 @echo ${COMPILE.m:Q} -pg ${.IMPSRC} -o ${.TARGET} 263 @${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET}.o 264 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 265 @rm -f ${.TARGET}.o 266.endif 267 268.m.so: 269.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 270 ${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 271.else 272 @echo ${COMPILE.m:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 273 @${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 274 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 275 @rm -f ${.TARGET}.o 276.endif 277 278.S.o .s.o: 279 @echo ${COMPILE.S:Q} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} 280 @${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 281 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 282 @rm -f ${.TARGET}.o 283 284.S.po .s.po: 285 @echo ${COMPILE.S:Q} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} 286 @${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 287 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 288 @rm -f ${.TARGET}.o 289 290.S.so .s.so: 291 @echo ${COMPILE.S:Q} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} 292 @${COMPILE.S} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 293 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 294 @rm -f ${.TARGET}.o 295 296.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 297 || ${MKLINKLIB} != "no" 298_LIBS=lib${LIB}.a 299.else 300_LIBS= 301.endif 302 303OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g} 304 305.if ${MKPROFILE} != "no" 306_LIBS+=lib${LIB}_p.a 307POBJS+=${OBJS:.o=.po} 308.endif 309 310.if ${MKPIC} != "no" 311.if ${MKPICLIB} == "no" 312SOLIB=lib${LIB}.a 313.else 314SOLIB=lib${LIB}_pic.a 315_LIBS+=${SOLIB} 316SOBJS+=${OBJS:.o=.so} 317.endif 318.if defined(SHLIB_FULLVERSION) 319_LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION} 320.endif 321.endif 322 323LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 324.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 325_LIBS+=llib-l${LIB}.ln 326.endif 327 328.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 329 || ${MKLINKLIB} != "no" 330ALLOBJS=${OBJS} ${POBJS} ${SOBJS} 331.else 332ALLOBJS=${POBJS} ${SOBJS} 333.endif 334.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 335ALLOBJS+=${LOBJS} 336.endif 337 338.NOPATH: ${ALLOBJS} ${_LIBS} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 339 340realall: ${SRCS} ${ALLOBJS:O} ${_LIBS} 341 342__archivebuild: .USE 343 @rm -f ${.TARGET} 344 @${AR} cq ${.TARGET} `NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}` 345 ${RANLIB} ${.TARGET} 346 347__archiveinstall: .USE 348 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m 600 ${.ALLSRC} ${.TARGET} 349 ${RANLIB} -t ${.TARGET} 350 chmod ${LIBMODE} ${.TARGET} 351 352DPSRCS+= ${SRCS:M*.[ly]:C/\..$/.c/} 353CLEANFILES+= ${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}} 354 355lib${LIB}.a:: ${OBJS} __archivebuild 356 @echo building standard ${LIB} library 357 358lib${LIB}_p.a:: ${POBJS} __archivebuild 359 @echo building profiled ${LIB} library 360 361lib${LIB}_pic.a:: ${SOBJS} __archivebuild 362 @echo building shared object ${LIB} library 363 364lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} \ 365 ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} 366 @echo building shared ${LIB} library \(version ${SHLIB_FULLVERSION}\) 367 @rm -f lib${LIB}.so.${SHLIB_FULLVERSION} 368.if defined(DESTDIR) 369 $(LD) -nostdlib -x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \ 370 ${SHLIB_LDSTARTFILE} \ 371 --whole-archive ${SOLIB} \ 372 --no-whole-archive ${LDADD} \ 373 -L${DESTDIR}${_LIBSODIR} -L${DESTDIR}${LIBDIR} \ 374 -R${_LIBSODIR} -R${LIBDIR} \ 375 ${SHLIB_LDENDFILE} 376.else 377 $(LD) -x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \ 378 ${SHLIB_LDSTARTFILE} \ 379 --whole-archive ${SOLIB} --no-whole-archive ${LDADD} \ 380 ${SHLIB_LDENDFILE} 381.endif 382.if ${OBJECT_FMT} == "ELF" 383# We don't use INSTALL_SYMLINK here because this is just 384# happening inside the build directory/objdir. XXX Why does 385# this spend so much effort on libraries that aren't live??? XXX 386 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp 387 mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR} 388 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp 389 mv -f lib${LIB}.so.tmp lib${LIB}.so 390.endif 391 392.if !empty(LOBJS) 393LLIBS?= -lc 394llib-l${LIB}.ln: ${LOBJS} 395 @echo building llib-l${LIB}.ln 396 @rm -f llib-l${LIB}.ln 397 @${LINT} -C${LIB} ${.ALLSRC} ${LLIBS} 398.endif 399 400cleanlib: 401 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} 402 rm -f lib${LIB}.a ${OBJS} 403 rm -f lib${LIB}_p.a ${POBJS} 404 rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS} 405 rm -f llib-l${LIB}.ln ${LOBJS} 406 407.if defined(SRCS) 408afterdepend: .depend 409 @(TMP=/tmp/_depend$$$$; \ 410 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so \1.ln:/' \ 411 < .depend > $$TMP; \ 412 mv $$TMP .depend) 413.endif 414 415.if !target(libinstall) 416# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no 417libinstall:: 418 419.if ${MKLINKLIB} != "no" 420libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a 421.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a 422.if !defined(UPDATE) 423.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}.a 424.endif 425 426.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 427${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE 428.endif 429${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall 430.endif 431 432.if ${MKPROFILE} != "no" 433libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 434.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 435.if !defined(UPDATE) 436.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 437.endif 438 439.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 440${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE 441.endif 442${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall 443.endif 444 445.if ${MKPIC} != "no" && ${MKPICINSTALL} != "no" 446libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 447.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 448.if !defined(UPDATE) 449.PHONY: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 450.endif 451 452.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 453${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE 454.endif 455.if ${MKPICLIB} == "no" 456${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: 457 ${INSTALL_SYMLINK} lib${LIB}.a ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 458.else 459${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall 460.endif 461.endif 462 463.if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION) 464libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 465.PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 466.if !defined(UPDATE) 467.PHONY: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 468.endif 469 470.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 471${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE 472.endif 473${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} 474 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 475 ${.ALLSRC} ${.TARGET} 476.if ${_LIBSODIR} != ${LIBDIR} 477 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 478 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 479.endif 480.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) 481 /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR} 482.endif 483.if ${OBJECT_FMT} == "ELF" 484 ${INSTALL_SYMLINK} lib${LIB}.so.${SHLIB_FULLVERSION} \ 485 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR} 486.if ${_LIBSODIR} != ${LIBDIR} 487 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 488 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR} 489.endif 490.if ${MKLINKLIB} != "no" 491 ${INSTALL_SYMLINK} lib${LIB}.so.${SHLIB_FULLVERSION} \ 492 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so 493.if ${_LIBSODIR} != ${LIBDIR} 494 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 495 ${DESTDIR}${LIBDIR}/lib${LIB}.so 496.endif 497.endif 498.endif 499.endif 500 501.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 502libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 503.PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 504.if !defined(UPDATE) 505.PHONY: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 506.endif 507 508.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 509${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE 510.endif 511${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln 512 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 513 ${.ALLSRC} ${DESTDIR}${LINTLIBDIR} 514.endif 515.endif 516 517##### Pull in related .mk logic 518.include <bsd.man.mk> 519.include <bsd.nls.mk> 520.include <bsd.files.mk> 521.include <bsd.inc.mk> 522.include <bsd.links.mk> 523.include <bsd.dep.mk> 524.include <bsd.sys.mk> 525 526${TARGETS}: # ensure existence 527