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