bsd.lib.mk revision 1.224 1 # $NetBSD: bsd.lib.mk,v 1.224 2003/07/22 06:53:22 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
8 ##### Basic targets
9 .PHONY: checkver cleanlib libinstall
10 realinstall: checkver libinstall
11 clean: cleanlib
12
13 ##### Build and install rules
14 CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include}
15 CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include/g++}
16
17 .if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE})
18 SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major
19 SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor
20 SHLIB_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)
25 checkver:
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)
33 checkver:
34 .endif
35
36 print-shlib-major:
37 .if defined(SHLIB_MAJOR) && ${MKPIC} != "no"
38 @echo ${SHLIB_MAJOR}
39 .else
40 @false
41 .endif
42
43 print-shlib-minor:
44 .if defined(SHLIB_MINOR) && ${MKPIC} != "no"
45 @echo ${SHLIB_MINOR}
46 .else
47 @false
48 .endif
49
50 print-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)
60 SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}.${SHLIB_TEENY}
61 .else
62 SHLIB_FULLVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR}
63 .endif
64 .else
65 SHLIB_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 .cxx .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
101 FPICFLAGS ?= -fPIC
102 CPICFLAGS ?= -fPIC -DPIC
103 CPPPICFLAGS?= -DPIC
104 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
105 APICFLAGS ?=
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
112 FPICFLAGS ?= -fPIC
113 CPICFLAGS ?= -fPIC -DPIC
114 CPPPICFLAGS?= -DPIC -DBIGPIC
115 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
116 APICFLAGS ?= -KPIC
117
118 .elif ${MACHINE_ARCH} == "hppa"
119
120 FPICFLAGS ?= -fPIC
121 CPICFLAGS?= -fPIC -DPIC
122 CPPPICFLAGS?= -DPIC
123 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
124 APICFLAGS?= -k
125 # XXX libraries often need the millicode functions in libgcc.a,
126 # so we have to work around the -nostdlib:
127 LDADD+= `$(CC) -print-libgcc-file-name`
128
129 .else
130
131 # Platform-independent flags for NetBSD a.out shared libraries
132 SHLIB_SOVERSION=${SHLIB_FULLVERSION}
133 SHLIB_SHFLAGS=
134 FPICFLAGS ?= -fPIC
135 CPICFLAGS?= -fPIC -DPIC
136 CPPPICFLAGS?= -DPIC
137 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
138 APICFLAGS?= -k
139
140 .endif
141
142 .if ${MKPICLIB} != "no"
143 CSHLIBFLAGS+= ${CPICFLAGS}
144 .endif
145
146 .if defined(CSHLIBFLAGS) && !empty(CSHLIBFLAGS)
147 MKSHLIBOBJS= yes
148 .else
149 MKSHLIBOBJS= no
150 .endif
151
152 # Platform-independent linker flags for ELF shared libraries
153 .if ${OBJECT_FMT} == "ELF"
154 SHLIB_SOVERSION= ${SHLIB_MAJOR}
155 SHLIB_SHFLAGS= -Wl,-soname,lib${LIB}.so.${SHLIB_SOVERSION}
156 SHLIB_LDSTARTFILE?= ${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGINS}
157 SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${DESTDIR}/usr/lib/crtn.o
158 .endif
159
160 CFLAGS+= ${COPTS}
161 FFLAGS+= ${FOPTS}
162
163 .c.o:
164 .if defined(COPTS) && !empty(COPTS:M*-g*)
165 ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC}
166 .else
167 @echo ${COMPILE.c:Q} ${COPTS.${.IMPSRC:T}:Q} ${CPUFLAGS.${.IMPSRC:T}:Q} ${CPPFLAGS.${.IMPSRC:T}:Q} ${.IMPSRC}
168 @${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.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} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET}
176 .else
177 @echo ${COMPILE.c:Q} ${COPTS.${.IMPSRC:T}:Q} ${CPUFLAGS.${.IMPSRC:T}:Q} ${CPPFLAGS.${.IMPSRC:T}:Q} -pg ${.IMPSRC} -o ${.TARGET}
178 @${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -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} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET}
186 .else
187 @echo ${COMPILE.c:Q} ${COPTS.${.IMPSRC:T}:Q} ${CPUFLAGS.${.IMPSRC:T}:Q} ${CPPFLAGS.${.IMPSRC:T}:Q} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET}
188 @${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${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]*} ${CPPFLAGS.${.IMPSRC:T}:M-[-IDU]*} -i ${.IMPSRC}
195
196 .cc.o .cpp.o .cxx.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 .cxx.o .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 .cxx.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
315 OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g}
316
317 .if ${MKPROFILE} != "no"
318 _LIBS+=lib${LIB}_p.a
319 POBJS+=${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.
328 SOLIB=lib${LIB}_pic.a
329 SOBJS+=${OBJS:.o=.so}
330 .else
331 SOLIB=lib${LIB}.a
332 .endif
333 .else
334 SOLIB=lib${LIB}_pic.a
335 _LIBS+=${SOLIB}
336 SOBJS+=${OBJS:.o=.so}
337 .endif
338 .if defined(SHLIB_FULLVERSION)
339 _LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION}
340 .endif
341 .endif
342
343 LOBJS+=${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"
350 ALLOBJS=${OBJS} ${POBJS} ${SOBJS}
351 .else
352 ALLOBJS=${POBJS} ${SOBJS}
353 .endif
354 .if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS)
355 ALLOBJS+=${LOBJS}
356 .endif
357 .else
358 LOBJS=
359 SOBJS=
360 .endif
361
362 .NOPATH: ${ALLOBJS} ${_LIBS} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}}
363
364 realall: ${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
378 DPSRCS+= ${SRCS:M*.[ly]:C/\..$/.c/}
379 CLEANFILES+= ${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}}
380
381 lib${LIB}.a:: ${OBJS} __archivebuild
382 @echo building standard ${LIB} library
383
384 lib${LIB}_p.a:: ${POBJS} __archivebuild
385 @echo building profiled ${LIB} library
386
387 lib${LIB}_pic.a:: ${SOBJS} __archivebuild
388 @echo building shared object ${LIB} library
389
390 lib${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 $(CC) -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
396 -Wl,-x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \
397 -Wl,--whole-archive ${SOLIB} \
398 -Wl,--no-whole-archive ${LDADD} \
399 -L${_GCC_LIBGCCDIR} -L${DESTDIR}${_LIBSODIR} -L${DESTDIR}${LIBDIR} \
400 -R${_LIBSODIR} -R${LIBDIR}
401 .else
402 $(CC) -Wl,-x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \
403 -Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${LDADD}
404 .endif
405 .if ${OBJECT_FMT} == "ELF"
406 # We don't use INSTALL_SYMLINK here because this is just
407 # happening inside the build directory/objdir. XXX Why does
408 # this spend so much effort on libraries that aren't live??? XXX
409 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp
410 mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR}
411 ln -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp
412 mv -f lib${LIB}.so.tmp lib${LIB}.so
413 .endif
414
415 .if !empty(LOBJS)
416 LLIBS?= -lc
417 llib-l${LIB}.ln: ${LOBJS}
418 @echo building llib-l${LIB}.ln
419 @rm -f llib-l${LIB}.ln
420 .if defined(DESTDIR)
421 @${LINT} -C${LIB} ${.ALLSRC} -L${DESTDIR}/usr/libdata ${LLIBS}
422 .else
423 @${LINT} -C${LIB} ${.ALLSRC} ${LLIBS}
424 .endif
425 .endif
426
427 cleanlib:
428 rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
429 rm -f lib${LIB}.a ${OBJS}
430 rm -f lib${LIB}_p.a ${POBJS}
431 rm -f lib${LIB}_pic.a lib${LIB}.so.* lib${LIB}.so ${SOBJS}
432 rm -f llib-l${LIB}.ln ${LOBJS}
433
434 .if defined(SRCS)
435 afterdepend: .depend
436 @(TMP=/tmp/_depend$$$$; trap 'rm -f $$TMP ; exit 1' 1 2 3 13 15; \
437 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so \1.ln:/' \
438 < .depend > $$TMP && \
439 mv $$TMP .depend)
440 .endif
441
442 .if !target(libinstall)
443 # Make sure it gets defined, in case MKPIC==no && MKLINKLIB==no
444 libinstall::
445
446 .if ${MKLINKLIB} != "no"
447 libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}.a
448 .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}.a
449
450 .if !defined(UPDATE)
451 .if !defined(BUILD) && !make(all) && !make(lib${LIB}.a)
452 ${DESTDIR}${LIBDIR}/lib${LIB}.a! .MADE
453 .endif
454 ${DESTDIR}${LIBDIR}/lib${LIB}.a! lib${LIB}.a __archiveinstall
455 .else
456 .if !defined(BUILD) && !make(all) && !make(lib${LIB}.a)
457 ${DESTDIR}${LIBDIR}/lib${LIB}.a: .MADE
458 .endif
459 ${DESTDIR}${LIBDIR}/lib${LIB}.a: lib${LIB}.a __archiveinstall
460 .endif
461 .endif
462
463 .if ${MKPROFILE} != "no"
464 libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
465 .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
466
467 .if !defined(UPDATE)
468 .if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a)
469 ${DESTDIR}${LIBDIR}/lib${LIB}_p.a! .MADE
470 .endif
471 ${DESTDIR}${LIBDIR}/lib${LIB}_p.a! lib${LIB}_p.a __archiveinstall
472 .else
473 .if !defined(BUILD) && !make(all) && !make(lib${LIB}_p.a)
474 ${DESTDIR}${LIBDIR}/lib${LIB}_p.a: .MADE
475 .endif
476 ${DESTDIR}${LIBDIR}/lib${LIB}_p.a: lib${LIB}_p.a __archiveinstall
477 .endif
478 .endif
479
480 .if ${MKPIC} != "no" && ${MKPICINSTALL} != "no"
481 libinstall:: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
482 .PRECIOUS: ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
483
484 .if !defined(UPDATE)
485 .if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a)
486 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! .MADE
487 .endif
488 .if ${MKPICLIB} == "no"
489 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}.a __archivesymlinkpic
490 .else
491 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a! lib${LIB}_pic.a __archiveinstall
492 .endif
493 .else
494 .if !defined(BUILD) && !make(all) && !make(lib${LIB}_pic.a)
495 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: .MADE
496 .endif
497 .if ${MKPICLIB} == "no"
498 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}.a __archivesymlinkpic
499 .else
500 ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib${LIB}_pic.a __archiveinstall
501 .endif
502 .endif
503 .endif
504
505 .if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION)
506 libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
507 .PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
508
509 .if !defined(UPDATE)
510 .if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION})
511 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! .MADE
512 .endif
513 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION}
514 .else
515 .if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION})
516 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE
517 .endif
518 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION}
519 .endif
520 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
521 ${SYSPKGTAG} ${.ALLSRC} ${.TARGET}
522 .if ${_LIBSODIR} != ${LIBDIR}
523 ${INSTALL_SYMLINK} ${SYSPKGTAG} \
524 ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \
525 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION}
526 .endif
527 .if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR)
528 /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR}
529 .endif
530 .if ${OBJECT_FMT} == "ELF"
531 ${INSTALL_SYMLINK} ${SYSPKGTAG} \
532 lib${LIB}.so.${SHLIB_FULLVERSION} \
533 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR}
534 .if ${_LIBSODIR} != ${LIBDIR}
535 ${INSTALL_SYMLINK} ${SYSPKGTAG} \
536 ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \
537 ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR}
538 .endif
539 .if ${MKLINKLIB} != "no"
540 ${INSTALL_SYMLINK} ${SYSPKGTAG} \
541 lib${LIB}.so.${SHLIB_FULLVERSION} \
542 ${DESTDIR}${_LIBSODIR}/lib${LIB}.so
543 .if ${_LIBSODIR} != ${LIBDIR}
544 ${INSTALL_SYMLINK} ${SYSPKGTAG} \
545 ${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \
546 ${DESTDIR}${LIBDIR}/lib${LIB}.so
547 .endif
548 .endif
549 .endif
550 .endif
551
552 .if ${MKLINT} != "no" && ${MKLINKLIB} != "no" && !empty(LOBJS)
553 libinstall:: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
554 .PRECIOUS: ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln
555
556 .if !defined(UPDATE)
557 .if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln)
558 ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! .MADE
559 .endif
560 ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln! llib-l${LIB}.ln
561 .else
562 .if !defined(BUILD) && !make(all) && !make(llib-l${LIB}.ln)
563 ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .MADE
564 .endif
565 ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: llib-l${LIB}.ln
566 .endif
567 ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
568 ${SYSPKGTAG} ${.ALLSRC} ${DESTDIR}${LINTLIBDIR}
569 .endif
570 .endif
571
572 ##### Pull in related .mk logic
573 .include <bsd.man.mk>
574 .include <bsd.nls.mk>
575 .include <bsd.files.mk>
576 .include <bsd.inc.mk>
577 .include <bsd.links.mk>
578 .include <bsd.dep.mk>
579 .include <bsd.sys.mk>
580
581 ${TARGETS}: # ensure existence
582