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