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