bsd.lib.mk revision 92553
1#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2# $FreeBSD: head/share/mk/bsd.lib.mk 92553 2002-03-18 09:35:45Z ru $
3#
4
5.if !target(__initialized__)
6__initialized__:
7.if exists(${.CURDIR}/../Makefile.inc)
8.include "${.CURDIR}/../Makefile.inc"
9.endif
10.endif
11
12.if exists(${.CURDIR}/shlib_version)
13SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
14.if ${OBJFORMAT} == aout
15SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
16.endif
17.endif
18
19# Set up the variables controlling shared libraries.  After this section,
20# SHLIB_NAME will be defined only if we are to create a shared library.
21# SHLIB_LINK will be defined only if we are to create a link to it.
22# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
23.if defined(NOPIC)
24.undef SHLIB_NAME
25.undef INSTALL_PIC_ARCHIVE
26.else
27.if ${OBJFORMAT} == elf
28.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
29SHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
30SHLIB_LINK?=	lib${LIB}.so
31.endif
32SONAME?=	${SHLIB_NAME}
33.else
34.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
35SHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
36.endif
37.endif
38.endif
39
40.if defined(DEBUG_FLAGS)
41CFLAGS+= ${DEBUG_FLAGS}
42.endif
43
44.if !defined(DEBUG_FLAGS)
45STRIP?=	-s
46.endif
47
48.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
49.include <bsd.libnames.mk>
50.endif
51
52.MAIN: all
53
54# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
55# .So used for PIC object files
56.SUFFIXES:
57.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l .ln
58
59.c.ln:
60	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
61	    touch ${.TARGET}
62
63.cc.ln .C.ln .cpp.ln .cxx.ln:
64	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
65	    touch ${.TARGET}
66
67.c.o:
68	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
69	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
70	@mv ${.TARGET}.tmp ${.TARGET}
71
72.c.po:
73	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
74	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
75	@mv ${.TARGET}.tmp ${.TARGET}
76
77.c.So:
78	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
79	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
80	@mv ${.TARGET}.tmp ${.TARGET}
81
82.cc.o .C.o .cpp.o .cxx.o:
83	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
84	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
85	@mv ${.TARGET}.tmp ${.TARGET}
86
87.cc.po .C.po .cpp.po .cxx.po:
88	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
89	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
90	@mv ${.TARGET}.tmp ${.TARGET}
91
92.cc.So .C.So .cpp.So .cxx.So:
93	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
94	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
95	@mv ${.TARGET}.tmp ${.TARGET}
96
97.f.o:
98	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
99	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
100	@mv ${.TARGET}.tmp ${.TARGET}
101
102.f.po:
103	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
104	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
105	@mv ${.TARGET}.tmp ${.TARGET}
106
107.f.So:
108	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
109	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
110	@mv ${.TARGET}.tmp ${.TARGET}
111
112.m.o:
113	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
114	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
115	@mv ${.TARGET}.tmp ${.TARGET}
116
117.m.po:
118	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
119	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
120	@mv ${.TARGET}.tmp ${.TARGET}
121
122.m.So:
123	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
124	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
125	@mv ${.TARGET}.tmp ${.TARGET}
126
127.s.o:
128	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
129	    ${.IMPSRC} -o ${.TARGET}
130	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
131	@mv ${.TARGET}.tmp ${.TARGET}
132
133.s.po:
134	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
135	    ${.IMPSRC} -o ${.TARGET}
136	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
137	@mv ${.TARGET}.tmp ${.TARGET}
138
139.s.So:
140	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
141	    ${.IMPSRC} -o ${.TARGET}
142	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
143	@mv ${.TARGET}.tmp ${.TARGET}
144
145.S.o:
146	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
147	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
148	@mv ${.TARGET}.tmp ${.TARGET}
149
150.S.po:
151	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
152	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
153	@mv ${.TARGET}.tmp ${.TARGET}
154
155.S.So:
156	${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
157	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
158	@mv ${.TARGET}.tmp ${.TARGET}
159
160.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
161.if !defined(NOPROFILE) && !defined(INTERNALLIB)
162_LIBS=lib${LIB}.a lib${LIB}_p.a
163.else
164_LIBS=lib${LIB}.a
165.endif
166.endif
167
168LINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
169
170.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
171LINTLIB=llib-l${LIB}.ln
172_LIBS+=${LINTLIB}
173.endif
174
175.if defined(SHLIB_NAME)
176_LIBS+=${SHLIB_NAME}
177.endif
178.if defined(INSTALL_PIC_ARCHIVE)
179_LIBS+=lib${LIB}_pic.a
180.endif
181
182.if !defined(PICFLAG)
183.if ${MACHINE_ARCH} == "sparc64"
184PICFLAG=-fPIC
185.else
186PICFLAG=-fpic
187.endif
188.endif
189
190.if !defined(NOMAN)
191all: objwarn ${_LIBS} all-man _SUBDIR
192.else
193all: objwarn ${_LIBS} _SUBDIR
194.endif
195
196OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
197
198lib${LIB}.a:: ${OBJS} ${STATICOBJS}
199	@${ECHO} building static ${LIB} library
200	@rm -f lib${LIB}.a
201	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
202	${RANLIB} lib${LIB}.a
203
204POBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
205.if !defined(NOPROFILE)
206lib${LIB}_p.a:: ${POBJS}
207	@${ECHO} building profiled ${LIB} library
208	@rm -f lib${LIB}_p.a
209	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
210	${RANLIB} lib${LIB}_p.a
211.endif
212
213SOBJS+= ${OBJS:.o=.So}
214
215.if defined(SHLIB_NAME)
216${SHLIB_NAME}: ${SOBJS}
217	@${ECHO} building shared library ${SHLIB_NAME}
218	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
219.if defined(SHLIB_LINK)
220	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
221.endif
222.if ${OBJFORMAT} == aout
223	@${CC} -shared -Wl,-x,-assert,pure-text \
224	    -o ${SHLIB_NAME} \
225	    `lorder ${SOBJS} | tsort -q` ${LDADD}
226.else
227	@${CC} -shared -Wl,-x \
228	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
229	    `lorder ${SOBJS} | tsort -q` ${LDADD}
230.endif
231.endif
232
233.if defined(INSTALL_PIC_ARCHIVE)
234lib${LIB}_pic.a:: ${SOBJS}
235	@${ECHO} building special pic ${LIB} library
236	@rm -f lib${LIB}_pic.a
237	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
238	${RANLIB} lib${LIB}_pic.a
239.endif
240
241.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
242${LINTLIB}: ${LINTOBJS}
243	@${ECHO} building lint library ${LINTLIB}
244	@rm -f ${LINTLIB}
245	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
246.endif
247
248.if !target(clean)
249clean:	_SUBDIR
250	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
251	rm -f lib${LIB}.a
252	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
253	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
254	    ${SHLIB_NAME} ${SHLIB_LINK} \
255	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
256	rm -f ${LINTOBJS} ${LINTLIB}
257.if defined(CLEANDIRS) && !empty(CLEANDIRS)
258	rm -rf ${CLEANDIRS}
259.endif
260.endif
261
262_EXTRADEPEND:
263	@TMP=_depend$$$$; \
264	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
265	    > $$TMP; \
266	mv $$TMP ${DEPENDFILE}
267.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
268.if ${OBJFORMAT} == aout
269	echo ${SHLIB_NAME}: \
270	    `${CC} -shared -Wl,-f ${LDADD}` \
271	    >> ${DEPENDFILE}
272.else
273.if defined(DPADD) && !empty(DPADD)
274	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
275.endif
276.endif
277.endif
278
279.if !target(install)
280.if !target(beforeinstall)
281beforeinstall: _includeinstall
282.endif
283
284_includeinstall:
285.if defined(INCS)
286.for header in ${INCS}
287	cd ${.CURDIR} && \
288	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
289		${header} ${DESTDIR}${INCDIR}
290
291.endfor
292.endif
293
294.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
295SHLINSTALLFLAGS+= -fschg
296.endif
297
298_INSTALLFLAGS:=	${INSTALLFLAGS}
299.for ie in ${INSTALLFLAGS_EDIT}
300_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
301.endfor
302_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
303.for ie in ${INSTALLFLAGS_EDIT}
304_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
305.endfor
306
307realinstall: beforeinstall
308.if !defined(INTERNALLIB)
309	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
310	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
311.if !defined(NOPROFILE)
312	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
313	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
314.endif
315.endif
316.if defined(SHLIB_NAME)
317	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
318	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
319	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
320.if defined(SHLIB_LINK)
321	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
322.endif
323.endif
324.if defined(INSTALL_PIC_ARCHIVE)
325	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
326	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
327.endif
328.if defined(LINKS) && !empty(LINKS)
329	@set ${LINKS}; \
330	while test $$# -ge 2; do \
331		l=${DESTDIR}$$1; \
332		shift; \
333		t=${DESTDIR}$$1; \
334		shift; \
335		${ECHO} $$t -\> $$l; \
336		ln -f $$l $$t; \
337	done; true
338.endif
339.if defined(SYMLINKS) && !empty(SYMLINKS)
340	@set ${SYMLINKS}; \
341	while test $$# -ge 2; do \
342		l=$$1; \
343		shift; \
344		t=${DESTDIR}$$1; \
345		shift; \
346		${ECHO} $$t -\> $$l; \
347		ln -fs $$l $$t; \
348	done; true
349.endif
350.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
351	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
352	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
353.endif
354
355install: afterinstall _SUBDIR
356.if !defined(NOMAN)
357afterinstall: realinstall maninstall
358.else
359afterinstall: realinstall
360.endif
361.endif
362
363.if !target(regress)
364regress:
365.endif
366
367DISTRIBUTION?=	bin
368.if !target(distribute)
369distribute:	_SUBDIR
370.for dist in ${DISTRIBUTION}
371	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
372.endfor
373.endif
374
375.if !target(lint)
376lint: ${SRCS:M*.c} _SUBDIR
377	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
378.endif
379
380.if !defined(NOMAN)
381.include <bsd.man.mk>
382.else
383.if !target(all-man)
384all-man:
385.endif
386.if !target(maninstall)
387maninstall:
388.endif
389.endif
390
391.include <bsd.dep.mk>
392
393.if !exists(${DEPENDFILE})
394${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
395.endif
396
397.include <bsd.obj.mk>
398
399.include <bsd.sys.mk>
400