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