xref: /netbsd-src/share/mk/bsd.lib.mk (revision d710132b4b8ce7f7cccaaf660cb16aa16b4077a0)
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