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