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