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