bsd.lib.mk revision 2868
1117397Skan#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2117397Skan#	$Id: bsd.lib.mk,v 1.7 1994/09/16 14:30:20 jkh Exp $
3117397Skan#
4117397Skan
5117397Skan.if exists(${.CURDIR}/../Makefile.inc)
6117397Skan.include "${.CURDIR}/../Makefile.inc"
7117397Skan.endif
8117397Skan
9117397Skan.if exists(${.CURDIR}/shlib_version)
10117397SkanSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
11117397SkanSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
12117397Skan.endif
13117397Skan
14117397Skan.if defined(DESTDIR)
15117397SkanCFLAGS+= -I${DESTDIR}/usr/include
16117397SkanCXXINCLUDES+= -I${DESTDIR}/usr/include/${CXX}
17117397Skan.endif
18169691Skan
19117397Skan.if defined(DEBUG_FLAGS)
20117397SkanCFLAGS+= ${DEBUG_FLAGS}
21117397Skan.endif
22117397Skan
23117397SkanINSTALL?=	install
24117397SkanLIBDIR?=	/usr/lib
25117397SkanLINTLIBDIR?=	/usr/libdata/lint
26117397SkanLIBGRP?=	bin
27117397SkanLIBOWN?=	bin
28117397SkanLIBMODE?=	444
29169691Skan
30169691Skan.if !defined(DEBUG_FLAGS)
31169691SkanSTRIP?=	-s
32169691Skan.endif
33169691Skan
34117397SkanBINGRP?=	bin
35117397SkanBINOWN?=	bin
36117397SkanBINMODE?=	555
37117397Skan
38169691Skan.MAIN: all
39117397Skan
40117397Skan# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
41117397Skan# .so used for PIC object files
42169691Skan.SUFFIXES:
43169691Skan.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
44117397Skan
45117397Skan.c.o:
46117397Skan	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
47117397Skan	@${LD} -x -r ${.TARGET}
48117397Skan	@mv a.out ${.TARGET}
49117397Skan
50117397Skan.c.po:
51117397Skan	${CC} -p ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
52117397Skan	@${LD} -X -r ${.TARGET}
53117397Skan	@mv a.out ${.TARGET}
54117397Skan
55117397Skan.c.so:
56117397Skan	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
57117397Skan
58117397Skan.cc.o .cxx.o .C.o:
59117397Skan	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
60117397Skan	@${LD} -x -r ${.TARGET}
61117397Skan	@mv a.out ${.TARGET}
62117397Skan
63117397Skan.cc.po .C.po .cxx.o:
64117397Skan	${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
65117397Skan	@${LD} -X -r ${.TARGET}
66117397Skan	@mv a.out ${.TARGET}
67117397Skan
68117397Skan.cc.so .C.so:
69117397Skan	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
70117397Skan
71117397Skan.f.o:
72117397Skan	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
73117397Skan	@${LD} -x -r ${.TARGET}
74117397Skan	@mv a.out ${.TARGET}
75117397Skan
76117397Skan.f.po:
77169691Skan	${FC} -p ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
78169691Skan	@${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(NOPROFILE) && !defined(INTERNALLIB)
123_LIBS=lib${LIB}.a lib${LIB}_p.a
124.else
125_LIBS=lib${LIB}.a
126.endif
127
128.if !defined(NOPIC)
129.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
130_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
131.endif
132.if defined(INSTALL_PIC_ARCHIVE)
133_LIBS+=lib${LIB}_pic.a
134.endif
135.endif
136
137.if !defined(PICFLAG)
138PICFLAG=-fpic
139.endif
140
141all: ${_LIBS} # llib-l${LIB}.ln
142
143OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
144
145lib${LIB}.a:: ${OBJS}
146	@${ECHO} building standard ${LIB} library
147	@rm -f lib${LIB}.a
148	@${AR} cTq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD}
149	${RANLIB} lib${LIB}.a
150
151POBJS+=	${OBJS:.o=.po}
152lib${LIB}_p.a:: ${POBJS}
153	@${ECHO} building profiled ${LIB} library
154	@rm -f lib${LIB}_p.a
155	@${AR} cTq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD}
156	${RANLIB} lib${LIB}_p.a
157
158.if defined(DESTDIR)
159LDDESTDIR?=	-L${DESTDIR}/usr/lib
160.endif
161
162.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir)
163SOBJS+= ${DESTDIR}/usr/lib/c++rt0.o
164.endif
165
166SOBJS+= ${OBJS:.o=.so}
167lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
168	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
169	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
170	@${LD} -Bshareable \
171	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
172	    ${SOBJS} ${LDDESTDIR} ${LDADD}
173
174lib${LIB}_pic.a:: ${SOBJS}
175	@${ECHO} building special pic ${LIB} library
176	@rm -f lib${LIB}_pic.a
177	@${AR} cTq lib${LIB}_pic.a ${SOBJS} ${ARADD}
178	${RANLIB} lib${LIB}_pic.a
179
180llib-l${LIB}.ln: ${SRCS}
181	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
182
183.if !target(clean)
184clean:
185	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
186	rm -f lib${LIB}.a llib-l${LIB}.ln
187	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
188	rm -f ${SOBJS} shared/*.o
189	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
190.endif
191
192.if !target(cleandir)
193cleandir:
194	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
195	rm -f lib${LIB}.a llib-l${LIB}.ln
196	rm -f ${.CURDIR}/tags .depend
197	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
198	rm -f ${SOBJS} shared/*.o
199	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
200	cd ${.CURDIR}; rm -rf obj;
201.endif
202
203.if defined(SRCS)
204afterdepend:
205	@(TMP=/tmp/_depend$$$$; \
206	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
207	mv $$TMP .depend)
208.endif
209
210.if !target(install)
211.if !target(beforeinstall)
212beforeinstall:
213.endif
214
215.if defined(PRECIOUSLIB)
216SHLINSTALLFLAGS+= -fschg
217.endif
218
219realinstall: beforeinstall
220.if !defined(INTERNALLIB)
221	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
222	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
223	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a
224.if !defined(NOPROFILE)
225	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
226	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
227	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
228.endif
229.endif
230.if !defined(NOPIC)
231.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
232	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
233	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
234	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
235	    ${DESTDIR}${LIBDIR}
236.endif
237.if defined(INSTALL_PIC_ARCHIVE)
238	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
239	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
240	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
241.endif
242.endif
243.if defined(LINKS) && !empty(LINKS)
244	@set ${LINKS}; \
245	while test $$# -ge 2; do \
246		l=${DESTDIR}$$1; \
247		shift; \
248		t=${DESTDIR}$$1; \
249		shift; \
250		${ECHO} $$t -\> $$l; \
251		rm -f $$t; \
252		ln $$l $$t; \
253	done; true
254.endif
255
256install: afterinstall
257.if !defined(NOMAN)
258afterinstall: realinstall maninstall
259.else
260afterinstall: realinstall
261.endif
262.endif
263
264.if !target(lint)
265lint:
266.endif
267
268.if !target(tags)
269tags: ${SRCS}
270	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \
271	    sed "s;\${.CURDIR}/;;" > tags
272.endif
273
274.if !defined(NOMAN)
275.include <bsd.man.mk>
276.elif !target(maninstall)
277maninstall:
278.endif
279
280.if !target(obj)
281.if defined(NOOBJ)
282obj:
283.else
284obj:
285	@cd ${.CURDIR}; rm -rf obj; \
286	here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
287	${ECHO} "$$here -> $$dest"; ln -s $$dest obj; \
288	if test -d /usr/obj -a ! -d $$dest; then \
289		mkdir -p $$dest; \
290	else \
291		true; \
292	fi;
293.endif
294.endif
295
296.include <bsd.dep.mk>
297