1# $NetBSD: bsd.lib.mk,v 1.262 2006/01/08 01:23:51 christos 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} ${PROFFLAGS} ${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} ${PROFFLAGS} ${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} ${PROFFLAGS} -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} ${PROFFLAGS} -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} ${PROFFLAGS} ${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} ${PROFFLAGS} ${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} 365PROFFLAGS?=-DGPROF -DPROF 366.endif 367 368.if ${MKPIC} != "no" # { 369.if ${MKPICLIB} == "no" 370.if ${MKSHLIBOBJS} != "no" 371# make _pic.a, which isn't really pic, 372# since it's needed for making shared lib. 373# but don't install it. 374SOLIB=lib${LIB}_pic.a 375SOBJS+=${OBJS:.o=.so} 376.else 377SOLIB=lib${LIB}.a 378.endif 379.else 380SOLIB=lib${LIB}_pic.a 381_LIBS+=${SOLIB} 382SOBJS+=${OBJS:.o=.so} 383.endif 384.if defined(SHLIB_FULLVERSION) 385_LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION} 386.endif 387.endif # } 388 389LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 390.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 391_LIBS+=llib-l${LIB}.ln 392.endif 393 394.endif # ${MKPRIVATELIB} == "no" # } 395 396ALLOBJS= 397.if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ 398 || ${MKLINKLIB} != "no") && ${MKSTATICLIB} != "no" 399ALLOBJS+=${STOBJS} 400.endif 401ALLOBJS+=${POBJS} ${SOBJS} 402.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 403ALLOBJS+=${LOBJS} 404.endif 405.else # !defined(LIB) # } { 406LOBJS= 407SOBJS= 408.endif # !defined(LIB) # } 409 410_YLSRCS= ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 411 412.NOPATH: ${ALLOBJS} ${_LIBS} ${_YLSRCS} 413 414realall: ${SRCS} ${ALLOBJS:O} ${_LIBS} 415 416.if !target(__archivebuild) 417__archivebuild: .USE 418 ${_MKTARGET_BUILD} 419 rm -f ${.TARGET} 420 ${AR} cq ${.TARGET} `NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}` 421 ${RANLIB} ${.TARGET} 422.endif 423 424.if !target(__archiveinstall) 425__archiveinstall: .USE 426 ${_MKTARGET_INSTALL} 427 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 428 ${UPDATE:D:U-a "${RANLIB} -t"} ${SYSPKGTAG} ${.ALLSRC} ${.TARGET} 429.endif 430 431__archivesymlinkpic: .USE 432 ${_MKTARGET_INSTALL} 433 ${INSTALL_SYMLINK} ${SYSPKGTAG} ${.ALLSRC} ${.TARGET} 434 435DPSRCS+= ${_YLSRCS} 436CLEANFILES+= ${_YLSRCS} 437 438${STOBJS} ${POBJS} ${SOBJS} ${LOBJS}: ${DPSRCS} 439 440lib${LIB}.a:: ${STOBJS} __archivebuild 441 442lib${LIB}_p.a:: ${POBJS} __archivebuild 443 444lib${LIB}_pic.a:: ${SOBJS} __archivebuild 445 446 447_LIBLDOPTS= 448.if ${SHLIBDIR} != "/usr/lib" 449_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \ 450 -R${SHLIBDIR} \ 451 -L${DESTDIR}${SHLIBDIR} 452.elif ${SHLIBINSTALLDIR} != "/usr/lib" 453_LIBLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR}:${DESTDIR}/usr/lib \ 454 -L${DESTDIR}${SHLIBINSTALLDIR} 455.endif 456 457lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} \ 458 ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} 459 ${_MKTARGET_BUILD} 460 rm -f lib${LIB}.so.${SHLIB_FULLVERSION} 461.if defined(DESTDIR) 462 ${CC} -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ 463 ${_LIBLDOPTS} \ 464 -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} -o ${.TARGET} \ 465 -Wl,--whole-archive ${SOLIB} \ 466 -Wl,--no-whole-archive ${LDADD} \ 467 -L${_GCC_LIBGCCDIR} 468.else 469 ${CC} -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} -o ${.TARGET} \ 470 ${_LIBLDOPTS} \ 471 -Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${LDADD} 472.endif 473.if ${OBJECT_FMT} == "ELF" 474# We don't use INSTALL_SYMLINK here because this is just 475# happening inside the build directory/objdir. XXX Why does 476# this spend so much effort on libraries that aren't live??? XXX 477 ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp 478 mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR} 479 ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp 480 mv -f lib${LIB}.so.tmp lib${LIB}.so 481.endif 482 483.if !empty(LOBJS) # { 484LLIBS?= -lc 485llib-l${LIB}.ln: ${LOBJS} 486 ${_MKTARGET_COMPILE} 487 rm -f llib-l${LIB}.ln 488.if defined(DESTDIR) 489 ${LINT} -C${LIB} ${.ALLSRC} -L${DESTDIR}/usr/libdata ${LLIBS} 490.else 491 ${LINT} -C${LIB} ${.ALLSRC} ${LLIBS} 492.endif 493.endif # } 494 495cleanlib: .PHONY 496 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES} 497 rm -f lib${LIB}.a ${STOBJS} 498 rm -f lib${LIB}_p.a ${POBJS} 499 rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS} 500 rm -f ${STOBJS:=.tmp} ${POBJS:=.tmp} ${SOBJS:=.tmp} 501 rm -f llib-l${LIB}.ln ${LOBJS} 502 503 504.if !target(libinstall) # { 505# Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no 506libinstall:: 507 508.if ${MKLINKLIB} != "no" && ${MKSTATICLIB} != "no" 509libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a 510.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a 511 512.if !defined(UPDATE) 513.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 514${DESTDIR}${LIBDIR}/lib${LIB}.a! .MADE 515.endif 516${DESTDIR}${LIBDIR}/lib${LIB}.a! lib${LIB}.a __archiveinstall 517.else 518.if !defined(BUILD) && !make(all) && !make(lib${LIB}.a) 519${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE 520.endif 521${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall 522.endif 523.endif 524 525.if ${MKPROFILE} != "no" 526libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 527.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 528 529.if !defined(UPDATE) 530.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 531${DESTDIR}${LIBDIR}/lib${LIB}_p.a! .MADE 532.endif 533${DESTDIR}${LIBDIR}/lib${LIB}_p.a! lib${LIB}_p.a __archiveinstall 534.else 535.if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a) 536${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE 537.endif 538${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall 539.endif 540.endif 541 542.if ${MKPIC} != "no" && ${MKPICINSTALL} != "no" 543libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 544.PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 545 546.if !defined(UPDATE) 547.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 548${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! .MADE 549.endif 550.if ${MKPICLIB} == "no" 551${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}.a __archivesymlinkpic 552.else 553${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}_pic.a __archiveinstall 554.endif 555.else 556.if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a) 557${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE 558.endif 559.if ${MKPICLIB} == "no" 560${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}.a __archivesymlinkpic 561.else 562${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall 563.endif 564.endif 565.endif 566 567.if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION) 568libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 569.PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 570 571.if !defined(UPDATE) 572.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 573${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! .MADE 574.endif 575${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION} 576.else 577.if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) 578${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE 579.endif 580${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} 581.endif 582 ${_MKTARGET_INSTALL} 583 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 584 ${SYSPKGTAG} ${.ALLSRC} ${.TARGET} 585.if ${_LIBSODIR} != ${LIBDIR} 586 ${INSTALL_SYMLINK} ${SYSPKGTAG} \ 587 -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 588 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION} 589.endif 590.if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) 591 /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR} 592.endif 593.if ${OBJECT_FMT} == "ELF" 594 ${INSTALL_SYMLINK} ${SYSPKGTAG} \ 595 lib${LIB}.so.${SHLIB_FULLVERSION} \ 596 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR} 597.if ${_LIBSODIR} != ${LIBDIR} 598 ${INSTALL_SYMLINK} ${SYSPKGTAG} \ 599 ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 600 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR} 601.endif 602.if ${MKLINKLIB} != "no" 603 ${INSTALL_SYMLINK} ${SYSPKGTAG} \ 604 lib${LIB}.so.${SHLIB_FULLVERSION} \ 605 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so 606.if ${_LIBSODIR} != ${LIBDIR} 607 ${INSTALL_SYMLINK} ${SYSPKGTAG} \ 608 -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ 609 ${DESTDIR}${LIBDIR}/lib${LIB}.so 610.endif 611.endif 612.endif 613.endif 614 615.if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS) 616libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 617.PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln 618 619.if !defined(UPDATE) 620.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 621${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! .MADE 622.endif 623${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! llib-l${LIB}.ln 624.else 625.if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln) 626${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE 627.endif 628${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln 629.endif 630 ${_MKTARGET_INSTALL} 631 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 632 ${SYSPKGTAG} ${.ALLSRC} ${DESTDIR}${LINTLIBDIR} 633.endif 634.endif # !target(libinstall) # } 635 636##### Pull in related .mk logic 637.include <bsd.man.mk> 638.include <bsd.nls.mk> 639.include <bsd.files.mk> 640.include <bsd.inc.mk> 641.include <bsd.links.mk> 642.include <bsd.dep.mk> 643 644${TARGETS}: # ensure existence 645