1# $NetBSD: bsd.lib.mk,v 1.203 2002/05/07 02:06:32 eeh 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(${NETBSDSRCDIR}/lib/checkver) 23checkver: 24 @(cd ${.CURDIR} && \ 25 sh ${NETBSDSRCDIR}/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# If you use -fPIC you need to define BIGPIC to turn on 32-bit 120# relocations in asm code 121FPICFLAGS ?= -fPIC 122CPICFLAGS ?= -fPIC -DPIC 123CPPPICFLAGS?= -DPIC -DBIGPIC 124CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 125APICFLAGS ?= -KPIC 126 127.else 128 129# Platform-independent flags for NetBSD a.out shared libraries 130SHLIB_SOVERSION=${SHLIB_FULLVERSION} 131SHLIB_SHFLAGS= 132FPICFLAGS ?= -fPIC 133CPICFLAGS?= -fPIC -DPIC 134CPPPICFLAGS?= -DPIC 135CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS} 136APICFLAGS?= -k 137 138.endif 139 140MKPICLIB?= yes 141 142# Platform-independent linker flags for ELF shared libraries 143.if ${OBJECT_FMT} == "ELF" 144SHLIB_SOVERSION= ${SHLIB_MAJOR} 145SHLIB_SHFLAGS= -soname lib${LIB}.so.${SHLIB_SOVERSION} 146SHLIB_LDSTARTFILE?= ${DESTDIR}/usr/lib/crtbeginS.o 147SHLIB_LDENDFILE?= ${DESTDIR}/usr/lib/crtendS.o 148.endif 149 150CFLAGS+= ${COPTS} 151FFLAGS+= ${FOPTS} 152 153.c.o: 154.if defined(COPTS) && !empty(COPTS:M*-g*) 155 ${COMPILE.c} ${.IMPSRC} 156.else 157 @echo ${COMPILE.c:Q} ${.IMPSRC} 158 @${COMPILE.c} ${.IMPSRC} -o ${.TARGET}.o 159 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 160 @rm -f ${.TARGET}.o 161.endif 162 163.c.po: 164.if defined(COPTS) && !empty(COPTS:M*-g*) 165 ${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET} 166.else 167 @echo ${COMPILE.c:Q} -pg ${.IMPSRC} -o ${.TARGET} 168 @${COMPILE.c} -pg ${.IMPSRC} -o ${.TARGET}.o 169 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 170 @rm -f ${.TARGET}.o 171.endif 172 173.c.so: 174.if defined(COPTS) && !empty(COPTS:M*-g*) 175 ${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 176.else 177 @echo ${COMPILE.c:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 178 @${COMPILE.c} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 179 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 180 @rm -f ${.TARGET}.o 181.endif 182 183.c.ln: 184 ${LINT} ${LINTFLAGS} ${CPPFLAGS:M-[IDU]*} -i ${.IMPSRC} 185 186.cc.o .C.o: 187.if defined(COPTS) && !empty(COPTS:M*-g*) 188 ${COMPILE.cc} ${.IMPSRC} 189.else 190 @echo ${COMPILE.cc:Q} ${.IMPSRC} 191 @${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o 192 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 193 @rm -f ${.TARGET}.o 194.endif 195 196.cc.po .C.po: 197.if defined(COPTS) && !empty(COPTS:M*-g*) 198 ${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET} 199.else 200 @echo ${COMPILE.cc:Q} -pg ${.IMPSRC} -o ${.TARGET} 201 @${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o 202 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 203 @rm -f ${.TARGET}.o 204.endif 205 206.cc.so .C.so: 207.if defined(COPTS) && !empty(COPTS:M*-g*) 208 ${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 209.else 210 @echo ${COMPILE.cc:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 211 @${COMPILE.cc} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 212 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 213 @rm -f ${.TARGET}.o 214.endif 215 216.f.o: 217.if defined(FOPTS) && !empty(FOPTS:M*-g*) 218 ${COMPILE.f} ${.IMPSRC} 219.else 220 @echo ${COMPILE.f:Q} ${.IMPSRC} 221 @${COMPILE.f} ${.IMPSRC} -o ${.TARGET}.o 222 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 223 @rm -f ${.TARGET}.o 224.endif 225 226.f.po: 227.if defined(FOPTS) && !empty(FOPTS:M*-g*) 228 ${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET} 229.else 230 @echo ${COMPILE.f:Q} -pg ${.IMPSRC} -o ${.TARGET} 231 @${COMPILE.f} -pg ${.IMPSRC} -o ${.TARGET}.o 232 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 233 @rm -f ${.TARGET}.o 234.endif 235 236.f.so: 237.if defined(FOPTS) && !empty(FOPTS:M*-g*) 238 ${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} 239.else 240 @echo ${COMPILE.f:Q} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} 241 @${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 242 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 243 @rm -f ${.TARGET}.o 244.endif 245 246.f.ln: 247 ${ECHO} Skipping lint for Fortran libraries. 248 249.m.o: 250.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 251 ${COMPILE.m} ${.IMPSRC} 252.else 253 @echo ${COMPILE.m:Q} ${.IMPSRC} 254 @${COMPILE.m} ${.IMPSRC} -o ${.TARGET}.o 255 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 256 @rm -f ${.TARGET}.o 257.endif 258 259.m.po: 260.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 261 ${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET} 262.else 263 @echo ${COMPILE.m:Q} -pg ${.IMPSRC} -o ${.TARGET} 264 @${COMPILE.m} -pg ${.IMPSRC} -o ${.TARGET}.o 265 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 266 @rm -f ${.TARGET}.o 267.endif 268 269.m.so: 270.if defined(OBJCFLAGS) && !empty(OBJCFLAGS:M*-g*) 271 ${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 272.else 273 @echo ${COMPILE.m:Q} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET} 274 @${COMPILE.m} ${CPICFLAGS} ${.IMPSRC} -o ${.TARGET}.o 275 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 276 @rm -f ${.TARGET}.o 277.endif 278 279.S.o .s.o: 280 @echo ${COMPILE.S:Q} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} 281 @${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 282 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 283 @rm -f ${.TARGET}.o 284 285.S.po .s.po: 286 @echo ${COMPILE.S:Q} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} 287 @${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 288 @${LD} -X -r ${.TARGET}.o -o ${.TARGET} 289 @rm -f ${.TARGET}.o 290 291.S.so .s.so: 292 @echo ${COMPILE.S:Q} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} 293 @${COMPILE.S} ${CAPICFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o 294 @${LD} -x -r ${.TARGET}.o -o ${.TARGET} 295 @rm -f ${.TARGET}.o 296 297.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 298 || ${MKLINKLIB} != "no" 299_LIBS=lib${LIB}.a 300.else 301_LIBS= 302.endif 303 304OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g} 305 306.if ${MKPROFILE} != "no" 307_LIBS+=lib${LIB}_p.a 308POBJS+=${OBJS:.o=.po} 309.endif 310 311.if ${MKPIC} != "no" 312.if ${MKPICLIB} == "no" 313SOLIB=lib${LIB}.a 314.else 315SOLIB=lib${LIB}_pic.a 316_LIBS+=${SOLIB} 317SOBJS+=${OBJS:.o=.so} 318.endif 319.if defined(SHLIB_FULLVERSION) 320_LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION} 321.endif 322.endif 323 324LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 325.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 326_LIBS+=llib-l${LIB}.ln 327.endif 328 329.if ${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 330 || ${MKLINKLIB} != "no" 331ALLOBJS=${OBJS} ${POBJS} ${SOBJS} 332.else 333ALLOBJS=${POBJS} ${SOBJS} 334.endif 335.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 336ALLOBJS+=${LOBJS} 337.endif 338 339.NOPATH: ${ALLOBJS} ${_LIBS} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 340 341realall: ${SRCS} ${ALLOBJS:O} ${_LIBS} 342 343__archivebuild: .USE 344 @rm -f ${.TARGET} 345 @${AR} cq ${.TARGET} `NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}` 346 ${RANLIB} ${.TARGET} 347 348__archiveinstall: .USE 349 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 350 ${UPDATE:D:U-a "${RANLIB} -t"} ${.ALLSRC} ${.TARGET} 351 352__archivesymlinkpic: .USE 353 ${INSTALL_SYMLINK} ${.ALLSRC} ${.TARGET} 354 355DPSRCS+= ${SRCS:M*.[ly]:C/\..$/.c/} 356CLEANFILES+= ${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}} 357 358lib${LIB}.a:: ${OBJS} __archivebuild 359 @echo building standard ${LIB} library 360 361lib${LIB}_p.a:: ${POBJS} __archivebuild 362 @echo building profiled ${LIB} library 363 364lib${LIB}_pic.a:: ${SOBJS} __archivebuild 365 @echo building shared object ${LIB} library 366 367lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} \ 368 ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} 369 @echo building shared ${LIB} library \(version ${SHLIB_FULLVERSION}\) 370 @rm -f lib${LIB}.so.${SHLIB_FULLVERSION} 371.if defined(DESTDIR) 372 $(LD) -nostdlib -x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \ 373 ${SHLIB_LDSTARTFILE} \ 374 --whole-archive ${SOLIB} \ 375 --no-whole-archive ${LDADD} \ 376 -L${DESTDIR}${_LIBSODIR} -L${DESTDIR}${LIBDIR} \ 377 -R${_LIBSODIR} -R${LIBDIR} \ 378 ${SHLIB_LDENDFILE} 379.else 380 $(LD) -x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \ 381 ${SHLIB_LDSTARTFILE} \ 382 --whole-archive ${SOLIB} --no-whole-archive ${LDADD} \ 383 ${SHLIB_LDENDFILE} 384.endif 385.if ${OBJECT_FMT} == "ELF" 386# We don't use INSTALL_SYMLINK here because this is just 387# happening inside the build directory/objdir. XXX Why does 388# this spend so much effort on libraries that aren't live??? XXX 389 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp 390 mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR} 391 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp 392 mv -f lib${LIB}.so.tmp lib${LIB}.so 393.endif 394 395.if !empty(LOBJS) 396LLIBS?= -lc 397llib-l${LIB}.ln: ${LOBJS} 398 @echo building llib-l${LIB}.ln 399 @rm -f llib-l${LIB}.ln 400 @${LINT} -C${LIB} ${.ALLSRC} ${LLIBS} 401.endif 402 403cleanlib: 404 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} 405 rm -f lib${LIB}.a ${OBJS} 406 rm -f lib${LIB}_p.a ${POBJS} 407 rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS} 408 rm -f llib-l${LIB}.ln ${LOBJS} 409 410.if defined(SRCS) 411afterdepend: .depend 412 @(TMP=/tmp/_depend$$$$; \ 413 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so \1.ln:/' \ 414 < .depend > $$TMP; \ 415 mv $$TMP .depend) 416.endif 417 418.if !target(libinstall) 419# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no 420libinstall:: 421 422.if ${MKLINKLIB} != "no" 423libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a 424.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a 425 426.if !defined(UPDATE) 427.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 428${DESTDIR}${LIBDIR}/lib${LIB}.a! .MADE 429.endif 430${DESTDIR}${LIBDIR}/lib${LIB}.a! lib${LIB}.a __archiveinstall 431.else 432.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 433${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE 434.endif 435${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall 436.endif 437.endif 438 439.if ${MKPROFILE} != "no" 440libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 441.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 442 443.if !defined(UPDATE) 444.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 445${DESTDIR}${LIBDIR}/lib${LIB}_p.a! .MADE 446.endif 447${DESTDIR}${LIBDIR}/lib${LIB}_p.a! lib${LIB}_p.a __archiveinstall 448.else 449.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 450${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE 451.endif 452${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall 453.endif 454.endif 455 456.if ${MKPIC} != "no" && ${MKPICINSTALL} != "no" 457libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 458.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 459 460.if !defined(UPDATE) 461.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 462${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! .MADE 463.endif 464.if ${MKPICLIB} == "no" 465${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}.a __archivesymlinkpic 466.else 467${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}_pic.a __archiveinstall 468.endif 469.else 470.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 471${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE 472.endif 473.if ${MKPICLIB} == "no" 474${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}.a __archivesymlinkpic 475.else 476${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall 477.endif 478.endif 479.endif 480 481.if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION) 482libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 483.PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 484 485.if !defined(UPDATE) 486.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 487${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! .MADE 488.endif 489${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION} 490.else 491.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 492${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE 493.endif 494${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} 495.endif 496 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 497 ${.ALLSRC} ${.TARGET} 498.if ${_LIBSODIR} != ${LIBDIR} 499 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 500 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 501.endif 502.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) 503 /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR} 504.endif 505.if ${OBJECT_FMT} == "ELF" 506 ${INSTALL_SYMLINK} lib${LIB}.so.${SHLIB_FULLVERSION} \ 507 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR} 508.if ${_LIBSODIR} != ${LIBDIR} 509 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 510 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR} 511.endif 512.if ${MKLINKLIB} != "no" 513 ${INSTALL_SYMLINK} lib${LIB}.so.${SHLIB_FULLVERSION} \ 514 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so 515.if ${_LIBSODIR} != ${LIBDIR} 516 ${INSTALL_SYMLINK} ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 517 ${DESTDIR}${LIBDIR}/lib${LIB}.so 518.endif 519.endif 520.endif 521.endif 522 523.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 524libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 525.PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 526 527.if !defined(UPDATE) 528.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 529${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! .MADE 530.endif 531${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! llib-l${LIB}.ln 532.else 533.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 534${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE 535.endif 536${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln 537.endif 538 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 539 ${.ALLSRC} ${DESTDIR}${LINTLIBDIR} 540.endif 541.endif 542 543##### Pull in related .mk logic 544.include <bsd.man.mk> 545.include <bsd.nls.mk> 546.include <bsd.files.mk> 547.include <bsd.inc.mk> 548.include <bsd.links.mk> 549.include <bsd.dep.mk> 550.include <bsd.sys.mk> 551 552${TARGETS}: # ensure existence 553