bsd.lib.mk revision 92491
1#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2# $FreeBSD: head/share/mk/bsd.lib.mk 92491 2002-03-17 10:05:57Z markm $
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} ${CFLAGS: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) && (${LINTOBJS} != "")
171LINTLIB=llib-l${LIB}.ln
172.else
173LINTLIB=
174.endif
175
176.if defined(SHLIB_NAME)
177_LIBS+=${SHLIB_NAME}
178.endif
179.if defined(INSTALL_PIC_ARCHIVE)
180_LIBS+=lib${LIB}_pic.a
181.endif
182
183.if !defined(PICFLAG)
184.if ${MACHINE_ARCH} == "sparc64"
185PICFLAG=-fPIC
186.else
187PICFLAG=-fpic
188.endif
189.endif
190
191.if !defined(NOMAN)
192all: objwarn ${_LIBS} all-man _SUBDIR ${LINTLIB}
193.else
194all: objwarn ${_LIBS} _SUBDIR ${LINTLIB}
195.endif
196
197OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
198
199lib${LIB}.a:: ${OBJS} ${STATICOBJS}
200	@${ECHO} building static ${LIB} library
201	@rm -f lib${LIB}.a
202	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
203	${RANLIB} lib${LIB}.a
204
205POBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
206.if !defined(NOPROFILE)
207lib${LIB}_p.a:: ${POBJS}
208	@${ECHO} building profiled ${LIB} library
209	@rm -f lib${LIB}_p.a
210	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
211	${RANLIB} lib${LIB}_p.a
212.endif
213
214SOBJS+= ${OBJS:.o=.So}
215
216.if defined(SHLIB_NAME)
217${SHLIB_NAME}: ${SOBJS}
218	@${ECHO} building shared library ${SHLIB_NAME}
219	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
220.if defined(SHLIB_LINK)
221	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
222.endif
223.if ${OBJFORMAT} == aout
224	@${CC} -shared -Wl,-x,-assert,pure-text \
225	    -o ${SHLIB_NAME} \
226	    `lorder ${SOBJS} | tsort -q` ${LDADD}
227.else
228	@${CC} -shared -Wl,-x \
229	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
230	    `lorder ${SOBJS} | tsort -q` ${LDADD}
231.endif
232.endif
233
234.if defined(INSTALL_PIC_ARCHIVE)
235lib${LIB}_pic.a:: ${SOBJS}
236	@${ECHO} building special pic ${LIB} library
237	@rm -f lib${LIB}_pic.a
238	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
239	${RANLIB} lib${LIB}_pic.a
240.endif
241
242.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "")
243${LINTLIB}: ${LINTOBJS}
244	@${ECHO} building lint library ${SHLIB_NAME}
245	@rm -f ${LINTLIB}
246	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
247.endif
248
249.if !target(clean)
250clean:	_SUBDIR
251	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
252	rm -f lib${LIB}.a ${LINTLIB}
253	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
254	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
255	    ${SHLIB_NAME} ${SHLIB_LINK} \
256	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
257	rm -f ${LINTOBJS} ${LINTLIB}
258.if defined(CLEANDIRS) && !empty(CLEANDIRS)
259	rm -rf ${CLEANDIRS}
260.endif
261.endif
262
263_EXTRADEPEND:
264	@TMP=_depend$$$$; \
265	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
266	    > $$TMP; \
267	mv $$TMP ${DEPENDFILE}
268.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
269.if ${OBJFORMAT} == aout
270	echo ${SHLIB_NAME}: \
271	    `${CC} -shared -Wl,-f ${LDADD}` \
272	    >> ${DEPENDFILE}
273.else
274.if defined(DPADD) && !empty(DPADD)
275	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
276.endif
277.endif
278.endif
279
280.if !target(install)
281.if !target(beforeinstall)
282beforeinstall: _includeinstall
283.endif
284
285_includeinstall:
286.if defined(INCS)
287.for header in ${INCS}
288	cd ${.CURDIR} && \
289	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
290		${header} ${DESTDIR}${INCDIR}
291
292.endfor
293.endif
294
295.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
296SHLINSTALLFLAGS+= -fschg
297.endif
298
299_INSTALLFLAGS:=	${INSTALLFLAGS}
300.for ie in ${INSTALLFLAGS_EDIT}
301_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
302.endfor
303_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
304.for ie in ${INSTALLFLAGS_EDIT}
305_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
306.endfor
307
308realinstall: beforeinstall
309.if !defined(INTERNALLIB)
310	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
311	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
312.if !defined(NOPROFILE)
313	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
314	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
315.endif
316.endif
317.if defined(SHLIB_NAME)
318	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
319	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
320	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
321.if defined(SHLIB_LINK)
322	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
323.endif
324.endif
325.if defined(INSTALL_PIC_ARCHIVE)
326	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
327	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
328.endif
329.if defined(LINKS) && !empty(LINKS)
330	@set ${LINKS}; \
331	while test $$# -ge 2; do \
332		l=${DESTDIR}$$1; \
333		shift; \
334		t=${DESTDIR}$$1; \
335		shift; \
336		${ECHO} $$t -\> $$l; \
337		ln -f $$l $$t; \
338	done; true
339.endif
340.if defined(SYMLINKS) && !empty(SYMLINKS)
341	@set ${SYMLINKS}; \
342	while test $$# -ge 2; do \
343		l=$$1; \
344		shift; \
345		t=${DESTDIR}$$1; \
346		shift; \
347		${ECHO} $$t -\> $$l; \
348		ln -fs $$l $$t; \
349	done; true
350.endif
351.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "")
352	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
353	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
354.endif
355
356install: afterinstall _SUBDIR
357.if !defined(NOMAN)
358afterinstall: realinstall maninstall
359.else
360afterinstall: realinstall
361.endif
362.endif
363
364.if !target(regress)
365regress:
366.endif
367
368DISTRIBUTION?=	bin
369.if !target(distribute)
370distribute:	_SUBDIR
371.for dist in ${DISTRIBUTION}
372	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
373.endfor
374.endif
375
376.if !target(lint)
377lint: ${SRCS:M*.c} _SUBDIR
378	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} | more 2>&1
379.endif
380
381
382.if !defined(NOMAN)
383.include <bsd.man.mk>
384.else
385.if !target(all-man)
386all-man:
387.endif
388.if !target(maninstall)
389maninstall:
390.endif
391.endif
392
393.include <bsd.dep.mk>
394
395.if !exists(${DEPENDFILE})
396${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
397.endif
398
399.include <bsd.obj.mk>
400
401.include <bsd.sys.mk>
402