bsd.lib.mk revision 49328
1150861Scognet#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2150861Scognet#	$Id: bsd.lib.mk,v 1.87 1999/06/24 22:50:19 jmg Exp $
3150861Scognet#
4150861Scognet
5150861Scognet.if !target(__initialized__)
6150861Scognet__initialized__:
7150861Scognet.if exists(${.CURDIR}/../Makefile.inc)
8150861Scognet.include "${.CURDIR}/../Makefile.inc"
9150861Scognet.endif
10150861Scognet.endif
11150861Scognet
12150861Scognet.if exists(${.CURDIR}/shlib_version)
13150861ScognetSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
14150861Scognet.if ${OBJFORMAT} == aout
15150861ScognetSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
16150861Scognet.endif
17150861Scognet.endif
18150861Scognet
19150861Scognet# Set up the variables controlling shared libraries.  After this section,
20150861Scognet# SHLIB_NAME will be defined only if we are to create a shared library.
21150861Scognet# SHLIB_LINK will be defined only if we are to create a link to it.
22150861Scognet# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
23150861Scognet.if defined(NOPIC)
24150861Scognet.undef SHLIB_NAME
25150861Scognet.undef INSTALL_PIC_ARCHIVE
26150861Scognet.else
27150861Scognet.if ${OBJFORMAT} == elf
28163871Scognet.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
29150861ScognetSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
30153112ScognetSHLIB_LINK?=	lib${LIB}.so
31150861Scognet.endif
32154561ScognetSONAME?=	${SHLIB_NAME}
33159084Scognet.else
34159557Scognet.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
35154561ScognetSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
36150861Scognet.endif
37150861Scognet.endif
38161334Simp.endif
39161334Simp
40161334Simp.if defined(DESTDIR)
41161334SimpCFLAGS+= -I${DESTDIR}/usr/include
42150861ScognetCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
43153112Scognet.endif
44150861Scognet
45150861Scognet.if defined(DEBUG_FLAGS)
46150861ScognetCFLAGS+= ${DEBUG_FLAGS}
47150861Scognet.endif
48159557Scognet
49159557Scognet.if !defined(DEBUG_FLAGS)
50152743ScognetSTRIP?=	-s
51152743Scognet.endif
52153112Scognet
53152743Scognet.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
54159084Scognet.include <bsd.libnames.mk>
55159084Scognet.endif
56159084Scognet
57159084Scognet.MAIN: all
58159084Scognet
59159557Scognet# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
60159084Scognet# .So used for PIC object files
61159084Scognet.SUFFIXES:
62159084Scognet.SUFFIXES: .out .o .po .So .s .S .c .cc .cpp .cxx .m .C .f .y .l
63159084Scognet
64159084Scognet.c.o:
65159084Scognet	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
66161592Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
67161592Scognet	@mv ${.TARGET}.tmp ${.TARGET}
68159084Scognet
69159084Scognet.c.po:
70159557Scognet	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
71159758Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
72159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
73159557Scognet
74159557Scognet.c.So:
75159557Scognet	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
76159557Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
77159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
78159557Scognet
79159557Scognet.cc.o .C.o .cpp.o .cxx.o:
80159557Scognet	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
81159557Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
82159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
83159557Scognet
84159557Scognet.cc.po .C.po .cpp.po .cxx.po:
85159557Scognet	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
86159557Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
87159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
88159557Scognet
89159557Scognet.cc.So .C.So .cpp.So .cxx.So:
90159557Scognet	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
91159557Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
92159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
93159084Scognet
94159557Scognet.f.o:
95159557Scognet	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
96159557Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
97159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
98159084Scognet
99150861Scognet.f.po:
100150861Scognet	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
101150861Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
102150861Scognet	@mv ${.TARGET}.tmp ${.TARGET}
103150861Scognet
104153549Scognet.f.So:
105153112Scognet	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
106159758Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
107153549Scognet	@mv ${.TARGET}.tmp ${.TARGET}
108153112Scognet
109153112Scognet.m.o:
110153112Scognet	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
111153112Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
112153112Scognet	@mv ${.TARGET}.tmp ${.TARGET}
113153112Scognet
114153112Scognet.m.po:
115153112Scognet	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
116150861Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
117150861Scognet	@mv ${.TARGET}.tmp ${.TARGET}
118150861Scognet
119150861Scognet.m.So:
120150861Scognet	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
121153112Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
122150861Scognet	@mv ${.TARGET}.tmp ${.TARGET}
123153112Scognet
124153112Scognet.s.o:
125150861Scognet	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
126153112Scognet	    ${.IMPSRC} -o ${.TARGET}
127153112Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
128153112Scognet	@mv ${.TARGET}.tmp ${.TARGET}
129153112Scognet
130153112Scognet.s.po:
131153112Scognet	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
132153112Scognet	    ${.IMPSRC} -o ${.TARGET}
133153112Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
134153112Scognet	@mv ${.TARGET}.tmp ${.TARGET}
135150861Scognet
136150861Scognet.s.So:
137150861Scognet	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
138159900Scognet	    ${.IMPSRC} -o ${.TARGET}
139159900Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
140153112Scognet	@mv ${.TARGET}.tmp ${.TARGET}
141153112Scognet
142153112Scognet.S.o:
143153549Scognet	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
144153549Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
145159758Scognet	@mv ${.TARGET}.tmp ${.TARGET}
146159557Scognet
147159557Scognet.S.po:
148159557Scognet	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
149159557Scognet	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
150159557Scognet	@mv ${.TARGET}.tmp ${.TARGET}
151159557Scognet
152153549Scognet.S.So:
153153549Scognet	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
154153549Scognet	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
155153549Scognet	@mv ${.TARGET}.tmp ${.TARGET}
156153549Scognet
157153549Scognet.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
158153549Scognet.if !defined(NOPROFILE) && !defined(INTERNALLIB)
159153549Scognet_LIBS=lib${LIB}.a lib${LIB}_p.a
160153549Scognet.else
161153549Scognet_LIBS=lib${LIB}.a
162153549Scognet.endif
163153549Scognet.endif
164153549Scognet
165153549Scognet.if defined(SHLIB_NAME)
166153549Scognet_LIBS+=${SHLIB_NAME}
167153549Scognet.endif
168153549Scognet.if defined(INSTALL_PIC_ARCHIVE)
169153549Scognet_LIBS+=lib${LIB}_pic.a
170159557Scognet.endif
171159557Scognet
172159758Scognet.if !defined(PICFLAG)
173159758ScognetPICFLAG=-fpic
174159758Scognet.endif
175159758Scognet
176159758Scognetall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
177159758Scognet
178159758ScognetOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
179159758Scognet
180153112Scognetlib${LIB}.a:: ${OBJS} ${STATICOBJS}
181153112Scognet	@${ECHO} building standard ${LIB} library
182153112Scognet	@rm -f lib${LIB}.a
183159557Scognet	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
184159557Scognet	${RANLIB} lib${LIB}.a
185159557Scognet
186159557ScognetPOBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
187159557Scognet.if !defined(NOPROFILE)
188159557Scognetlib${LIB}_p.a:: ${POBJS}
189159557Scognet	@${ECHO} building profiled ${LIB} library
190159557Scognet	@rm -f lib${LIB}_p.a
191159557Scognet	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
192159557Scognet	${RANLIB} lib${LIB}_p.a
193159557Scognet.endif
194159557Scognet
195159557Scognet.if defined(DESTDIR)
196159557ScognetLDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR}
197159557Scognet.endif
198159557Scognet
199159557ScognetSOBJS+= ${OBJS:.o=.So}
200159557Scognet
201159557Scognet.if defined(SHLIB_NAME)
202159557Scognet${SHLIB_NAME}: ${SOBJS}
203159557Scognet	@${ECHO} building shared library ${SHLIB_NAME}
204159557Scognet	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
205159557Scognet.if defined(SHLIB_LINK)
206159557Scognet	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
207159557Scognet.endif
208159557Scognet.if ${OBJFORMAT} == aout
209159557Scognet	@${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \
210159557Scognet	    -o ${SHLIB_NAME} \
211159557Scognet	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
212159557Scognet.else
213159557Scognet	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
214159557Scognet	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
215159557Scognet	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
216159557Scognet.endif
217159557Scognet.endif
218159557Scognet
219159557Scognet.if defined(INSTALL_PIC_ARCHIVE)
220159557Scognetlib${LIB}_pic.a:: ${SOBJS}
221159557Scognet	@${ECHO} building special pic ${LIB} library
222159557Scognet	@rm -f lib${LIB}_pic.a
223159557Scognet	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
224159557Scognet	${RANLIB} lib${LIB}_pic.a
225159557Scognet.endif
226159557Scognet
227159557Scognetllib-l${LIB}.ln: ${SRCS}
228159557Scognet	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
229159557Scognet
230159557Scognet.if !target(clean)
231159557Scognetclean:	_SUBDIR
232159557Scognet	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
233159557Scognet	rm -f lib${LIB}.a # llib-l${LIB}.ln
234159557Scognet	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
235159557Scognet	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
236159557Scognet	    ${SHLIB_NAME} ${SHLIB_LINK} \
237159557Scognet	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
238159557Scognet.if defined(CLEANDIRS) && !empty(CLEANDIRS)
239159557Scognet	rm -rf ${CLEANDIRS}
240159557Scognet.endif
241159557Scognet.endif
242159557Scognet
243159557Scognet_EXTRADEPEND:
244159557Scognet	@TMP=_depend$$$$; \
245159557Scognet	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
246159557Scognet	    > $$TMP; \
247159557Scognet	mv $$TMP ${DEPENDFILE}
248159557Scognet.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
249159557Scognet.if ${OBJFORMAT} == aout
250159557Scognet	echo ${SHLIB_NAME}: \
251159557Scognet	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
252159557Scognet	    >> ${DEPENDFILE}
253159557Scognet.else
254159557Scognet.if defined(DPADD) && !empty(DPADD)
255159557Scognet	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
256159557Scognet.endif
257159557Scognet.endif
258159557Scognet.endif
259159557Scognet
260159557Scognet.if !target(install)
261159557Scognet.if !target(beforeinstall)
262159557Scognetbeforeinstall:
263159868Scognet.endif
264153112Scognet
265153112Scognet.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
266153112ScognetSHLINSTALLFLAGS+= -fschg
267153112Scognet.endif
268153112Scognet
269153112Scognet_INSTALLFLAGS:=	${INSTALLFLAGS}
270153112Scognet.for ie in ${INSTALLFLAGS_EDIT}
271153112Scognet_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
272153112Scognet.endfor
273153112Scognet_SHLINSTALLFLAGS:=	${INSTALLFLAGS}
274153112Scognet.for ie in ${INSTALLFLAGS_EDIT}
275153112Scognet_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
276153112Scognet.endfor
277153112Scognet
278153112Scognetrealinstall: beforeinstall
279153112Scognet.if !defined(INTERNALLIB)
280153112Scognet	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
281153112Scognet	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
282153112Scognet.if !defined(NOPROFILE)
283153112Scognet	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
284153112Scognet	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
285153112Scognet.endif
286153112Scognet.endif
287153112Scognet.if defined(SHLIB_NAME)
288153112Scognet	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
289153112Scognet	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
290153112Scognet	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
291153112Scognet.if defined(SHLIB_LINK)
292153112Scognet	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
293153112Scognet.endif
294153112Scognet.endif
295153112Scognet.if defined(INSTALL_PIC_ARCHIVE)
296153112Scognet	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
297153112Scognet	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
298153112Scognet.endif
299153112Scognet.if defined(LINKS) && !empty(LINKS)
300153112Scognet	@set ${LINKS}; \
301153112Scognet	while test $$# -ge 2; do \
302153112Scognet		l=${DESTDIR}$$1; \
303153112Scognet		shift; \
304153112Scognet		t=${DESTDIR}$$1; \
305153112Scognet		shift; \
306153112Scognet		${ECHO} $$t -\> $$l; \
307153112Scognet		ln -f $$l $$t; \
308153112Scognet	done; true
309153112Scognet.endif
310153112Scognet.if defined(SYMLINKS) && !empty(SYMLINKS)
311159084Scognet	@set ${SYMLINKS}; \
312153112Scognet	while test $$# -ge 2; do \
313153112Scognet		l=$$1; \
314153112Scognet		shift; \
315153112Scognet		t=${DESTDIR}$$1; \
316153112Scognet		shift; \
317153112Scognet		${ECHO} $$t -\> $$l; \
318153112Scognet		ln -fs $$l $$t; \
319153112Scognet	done; true
320153112Scognet.endif
321159758Scognet
322153112Scognetinstall: afterinstall _SUBDIR
323153112Scognet.if !defined(NOMAN)
324153112Scognetafterinstall: realinstall maninstall
325153112Scognet.else
326153112Scognetafterinstall: realinstall
327153112Scognet.endif
328153112Scognet.endif
329153112Scognet
330153112Scognet.if !target(regress)
331153112Scognetregress:
332153112Scognet.endif
333153112Scognet
334153549ScognetDISTRIBUTION?=	bin
335153112Scognet.if !target(distribute)
336153112Scognetdistribute:	_SUBDIR
337153112Scognet.for dist in ${DISTRIBUTION}
338153112Scognet	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
339153112Scognet.endfor
340153112Scognet.endif
341153112Scognet
342153112Scognet.if !target(lint)
343153112Scognetlint:
344153112Scognet.endif
345153112Scognet
346153112Scognet.if !defined(NOMAN)
347153112Scognet.include <bsd.man.mk>
348153112Scognet.elif !target(maninstall)
349153112Scognetmaninstall:
350153112Scognetall-man:
351153112Scognet.endif
352150861Scognet
353153112Scognet.include <bsd.dep.mk>
354153112Scognet
355150861Scognet.if !exists(${DEPENDFILE})
356150861Scognet${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
357159901Scognet.endif
358159901Scognet
359150861Scognet.include <bsd.obj.mk>
360150861Scognet