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