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