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