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