bsd.lib.mk revision 5585
1#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2#	$Id: bsd.lib.mk,v 1.17 1995/01/04 22:32:40 ache 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
155all: ${_LIBS} # llib-l${LIB}.ln
156
157OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
158
159lib${LIB}.a:: ${OBJS}
160	@${ECHO} building standard ${LIB} library
161	@rm -f lib${LIB}.a
162	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD}
163	${RANLIB} lib${LIB}.a
164
165.if !defined(NOPROFILE)
166POBJS+=	${OBJS:.o=.po}
167lib${LIB}_p.a:: ${POBJS}
168	@${ECHO} building profiled ${LIB} library
169	@rm -f lib${LIB}_p.a
170	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD}
171	${RANLIB} lib${LIB}_p.a
172.endif
173
174.if defined(DESTDIR)
175LDDESTDIR?=	-L${DESTDIR}/usr/lib
176.endif
177
178.if !defined(NOPIC)
179.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir)
180SOBJS+= ${DESTDIR}/usr/lib/c++rt0.o
181.endif
182
183SOBJS+= ${OBJS:.o=.so}
184lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
185	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
186	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
187	@${LD} -Bshareable \
188	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
189	    ${SOBJS} ${LDDESTDIR} ${LDADD}
190
191lib${LIB}_pic.a:: ${SOBJS}
192	@${ECHO} building special pic ${LIB} library
193	@rm -f lib${LIB}_pic.a
194	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
195	${RANLIB} lib${LIB}_pic.a
196.endif
197
198llib-l${LIB}.ln: ${SRCS}
199	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
200
201.if !target(clean)
202clean:
203	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
204	rm -f lib${LIB}.a llib-l${LIB}.ln
205	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
206	rm -f ${SOBJS} shared/*.o
207	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
208.endif
209
210.if !target(cleandir)
211cleandir:
212	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
213	rm -f lib${LIB}.a llib-l${LIB}.ln
214	rm -f ${.CURDIR}/tags .depend
215	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
216	rm -f ${SOBJS} shared/*.o
217	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
218	cd ${.CURDIR}; rm -rf obj;
219.endif
220
221.if defined(SRCS)
222afterdepend:
223	@(TMP=/tmp/_depend$$$$; \
224	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
225	mv $$TMP .depend)
226.endif
227
228.if !target(install)
229.if !target(beforeinstall)
230beforeinstall:
231.endif
232
233.if defined(PRECIOUSLIB)
234SHLINSTALLFLAGS+= -fschg
235.endif
236
237realinstall: beforeinstall
238.if !defined(INTERNALLIB)
239	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
240	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
241	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}.a
242.if !defined(NOPROFILE)
243	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
244	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
245	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
246.endif
247.endif
248.if !defined(NOPIC)
249.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
250	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
251	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
252	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
253	    ${DESTDIR}${SHLIBDIR}
254.endif
255.if defined(INSTALL_PIC_ARCHIVE)
256	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
257	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
258	${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
259.endif
260.endif
261.if defined(LINKS) && !empty(LINKS)
262	@set ${LINKS}; \
263	while test $$# -ge 2; do \
264		l=${DESTDIR}$$1; \
265		shift; \
266		t=${DESTDIR}$$1; \
267		shift; \
268		${ECHO} $$t -\> $$l; \
269		rm -f $$t; \
270		ln $$l $$t; \
271	done; true
272.endif
273
274install: afterinstall
275.if !defined(NOMAN)
276afterinstall: realinstall maninstall
277.else
278afterinstall: realinstall
279.endif
280.endif
281
282DISTRIBUTION?=	bin
283.if !target(distribute)
284distribute:
285	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${RELEASEDIR}/${DISTRIBUTION} SHARED=copies
286.endif
287
288.if !target(lint)
289lint:
290.endif
291
292.if !target(tags)
293tags: ${SRCS}
294	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \
295	    sed "s;\${.CURDIR}/;;" > tags
296.endif
297
298.if !defined(NOMAN)
299.include <bsd.man.mk>
300.elif !target(maninstall)
301maninstall:
302.endif
303
304.if !target(obj)
305.if defined(NOOBJ)
306obj:
307.else
308obj:
309	@cd ${.CURDIR}; rm -rf obj; \
310	here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
311	${ECHO} "$$here -> $$dest"; ln -s $$dest obj; \
312	if test -d /usr/obj -a ! -d $$dest; then \
313		mkdir -p $$dest; \
314	else \
315		true; \
316	fi;
317.endif
318.endif
319
320.include <bsd.dep.mk>
321