bsd.lib.mk revision 5621
1#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2#	$Id: bsd.lib.mk,v 1.19 1995/01/14 22:14:54 wollman Exp $
3#
4
5.if exists(${.CURDIR}/../Makefile.inc)
6.include "${.CURDIR}/../Makefile.inc"
7.endif
8
9.if exists(${.CURDIR}/shlib_version)
10SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
11SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
12.endif
13
14.if defined(DESTDIR)
15CFLAGS+= -I${DESTDIR}/usr/include
16CXXINCLUDES+= -I${DESTDIR}/usr/include/${CXX}
17.endif
18
19.if defined(DEBUG_FLAGS)
20CFLAGS+= ${DEBUG_FLAGS}
21.endif
22
23RANTOUCH?=	${RANLIB} -t
24
25LIBDIR?=	/usr/lib
26LINTLIBDIR?=	/usr/libdata/lint
27LIBGRP?=	bin
28LIBOWN?=	bin
29LIBMODE?=	444
30SHLIBDIR?=	${LIBDIR}
31
32.if !defined(DEBUG_FLAGS)
33STRIP?=	-s
34.endif
35
36BINGRP?=	bin
37BINOWN?=	bin
38BINMODE?=	555
39
40.MAIN: all
41
42# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
43# .so used for PIC object files
44.SUFFIXES:
45.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
46
47.c.o:
48	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
49	@${LD} -x -r ${.TARGET}
50	@mv a.out ${.TARGET}
51
52.c.po:
53	${CC} -p ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
54	@${LD} -X -r ${.TARGET}
55	@mv a.out ${.TARGET}
56
57.c.so:
58	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
59	@${LD} -X -r ${.TARGET}
60	@mv a.out ${.TARGET}
61
62.cc.o .cxx.o .C.o:
63	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
64	@${LD} -x -r ${.TARGET}
65	@mv a.out ${.TARGET}
66
67.cc.po .C.po .cxx.o:
68	${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
69	@${LD} -X -r ${.TARGET}
70	@mv a.out ${.TARGET}
71
72.cc.so .C.so:
73	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
74	@${LD} -X -r ${.TARGET}
75	@mv a.out ${.TARGET}
76
77.f.o:
78	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
79	@${LD} -x -r ${.TARGET}
80	@mv a.out ${.TARGET}
81
82.f.po:
83	${FC} -p ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
84	@${LD} -X -r ${.TARGET}
85	@mv a.out ${.TARGET}
86
87.f.so:
88	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
89	@${LD} -X -r ${.TARGET}
90	@mv a.out ${.TARGET}
91
92.s.o:
93	${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
94	    ${AS} -o ${.TARGET}
95	@${LD} -x -r ${.TARGET}
96	@mv a.out ${.TARGET}
97
98.s.po:
99	${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
100	    ${AS} -o ${.TARGET}
101	@${LD} -X -r ${.TARGET}
102	@mv a.out ${.TARGET}
103
104.s.so:
105	${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
106	   ${AS} -k -o ${.TARGET}
107	@${LD} -X -r ${.TARGET}
108	@mv a.out ${.TARGET}
109
110.S.o:
111	${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
112	    ${AS} -o ${.TARGET}
113
114.S.po:
115	${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
116	    ${AS} -o ${.TARGET}
117
118.S.so:
119	${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
120	   ${AS} -k -o ${.TARGET}
121	@${LD} -X -r ${.TARGET}
122	@mv a.out ${.TARGET}
123
124.m.po:
125	${CC} ${CFLAGS} -p -c ${.IMPSRC} -o ${.TARGET}
126	@${LD} -X -r ${.TARGET}
127	@mv a.out ${.TARGET}
128
129.m.o:
130	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
131	@${LD} -X -r ${.TARGET}
132	@mv a.out ${.TARGET}
133
134.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
135.if !defined(NOPROFILE) && !defined(INTERNALLIB)
136_LIBS=lib${LIB}.a lib${LIB}_p.a
137.else
138_LIBS=lib${LIB}.a
139.endif
140.endif
141
142.if !defined(NOPIC)
143.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
144_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
145.endif
146.if defined(INSTALL_PIC_ARCHIVE)
147_LIBS+=lib${LIB}_pic.a
148.endif
149.endif
150
151.if !defined(PICFLAG)
152PICFLAG=-fpic
153.endif
154
155_LIBSUBDIR: .USE
156.if defined(SUBDIR) && !empty(SUBDIR)
157	@for entry in ${SUBDIR}; do \
158		(${ECHODIR} "===> ${DIRPRFX}$$entry"; \
159		if test -d ${.CURDIR}/$${entry}.${MACHINE}; then \
160			cd ${.CURDIR}/$${entry}.${MACHINE}; \
161		else \
162			cd ${.CURDIR}/$${entry}; \
163		fi; \
164		${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} DIRPRFX=${DIRPRFX}$$entry/); \
165	done
166.endif
167
168all: ${_LIBS} _LIBSUBDIR # llib-l${LIB}.ln
169
170OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
171
172lib${LIB}.a:: ${OBJS}
173	@${ECHO} building standard ${LIB} library
174	@rm -f lib${LIB}.a
175	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD}
176	${RANLIB} lib${LIB}.a
177
178.if !defined(NOPROFILE)
179POBJS+=	${OBJS:.o=.po}
180lib${LIB}_p.a:: ${POBJS}
181	@${ECHO} building profiled ${LIB} library
182	@rm -f lib${LIB}_p.a
183	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD}
184	${RANLIB} lib${LIB}_p.a
185.endif
186
187.if defined(DESTDIR)
188LDDESTDIR?=	-L${DESTDIR}/usr/lib
189.endif
190
191.if !defined(NOPIC)
192.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir)
193SOBJS+= ${DESTDIR}/usr/lib/c++rt0.o
194.endif
195
196SOBJS+= ${OBJS:.o=.so}
197lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
198	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
199	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
200	@${LD} -Bshareable \
201	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
202	    ${SOBJS} ${LDDESTDIR} ${LDADD}
203
204lib${LIB}_pic.a:: ${SOBJS}
205	@${ECHO} building special pic ${LIB} library
206	@rm -f lib${LIB}_pic.a
207	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
208	${RANLIB} lib${LIB}_pic.a
209.endif
210
211llib-l${LIB}.ln: ${SRCS}
212	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
213
214.if !target(clean)
215clean:	_LIBSUBDIR
216	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
217	rm -f lib${LIB}.a llib-l${LIB}.ln
218	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
219	rm -f ${SOBJS} shared/*.o
220	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
221.endif
222
223.if !target(cleandir)
224cleandir:	_LIBSUBDIR
225	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
226	rm -f lib${LIB}.a llib-l${LIB}.ln
227	rm -f ${.CURDIR}/tags .depend
228	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
229	rm -f ${SOBJS} shared/*.o
230	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
231	cd ${.CURDIR}; rm -rf obj;
232.endif
233
234.if defined(SRCS)
235afterdepend:
236	@(TMP=/tmp/_depend$$$$; \
237	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
238	mv $$TMP .depend)
239.endif
240
241.if !target(install)
242.if !target(beforeinstall)
243beforeinstall:
244.endif
245
246.if defined(PRECIOUSLIB)
247SHLINSTALLFLAGS+= -fschg
248.endif
249
250realinstall: beforeinstall
251.if !defined(INTERNALLIB)
252	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
253	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
254	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}.a
255.if !defined(NOPROFILE)
256	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
257	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
258	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
259.endif
260.endif
261.if !defined(NOPIC)
262.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
263	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
264	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
265	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
266	    ${DESTDIR}${SHLIBDIR}
267.endif
268.if defined(INSTALL_PIC_ARCHIVE)
269	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
270	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
271	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
272.endif
273.endif
274.if defined(LINKS) && !empty(LINKS)
275	@set ${LINKS}; \
276	while test $$# -ge 2; do \
277		l=${DESTDIR}$$1; \
278		shift; \
279		t=${DESTDIR}$$1; \
280		shift; \
281		${ECHO} $$t -\> $$l; \
282		rm -f $$t; \
283		ln $$l $$t; \
284	done; true
285.endif
286
287install: afterinstall _LIBSUBDIR
288.if !defined(NOMAN)
289afterinstall: realinstall maninstall
290.else
291afterinstall: realinstall
292.endif
293.endif
294
295DISTRIBUTION?=	bin
296.if !target(distribute)
297distribute:	_LIBSUBDIR
298	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${RELEASEDIR}/${DISTRIBUTION} SHARED=copies
299.endif
300
301.if !target(lint)
302lint:
303.endif
304
305.if !target(tags)
306tags: ${SRCS}
307	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \
308	    sed "s;\${.CURDIR}/;;" > tags
309.endif
310
311.if !defined(NOMAN)
312.include <bsd.man.mk>
313.elif !target(maninstall)
314maninstall:
315.endif
316
317.if !target(obj)
318.if defined(NOOBJ)
319obj:	_LIBSUBDIR
320.else
321obj:	_LIBSUBDIR
322	@cd ${.CURDIR}; rm -rf obj; \
323	here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
324	${ECHO} "$$here -> $$dest"; ln -s $$dest obj; \
325	if test -d /usr/obj -a ! -d $$dest; then \
326		mkdir -p $$dest; \
327	else \
328		true; \
329	fi;
330.endif
331.endif
332
333.include <bsd.dep.mk>
334