bsd.lib.mk revision 49328
190792Sgshapiro#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2261363Sgshapiro#	$Id: bsd.lib.mk,v 1.87 1999/06/24 22:50:19 jmg Exp $
390792Sgshapiro#
490792Sgshapiro
590792Sgshapiro.if !target(__initialized__)
690792Sgshapiro__initialized__:
790792Sgshapiro.if exists(${.CURDIR}/../Makefile.inc)
890792Sgshapiro.include "${.CURDIR}/../Makefile.inc"
990792Sgshapiro.endif
1090792Sgshapiro.endif
11266692Sgshapiro
1290792Sgshapiro.if exists(${.CURDIR}/shlib_version)
1390792SgshapiroSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
1490792Sgshapiro.if ${OBJFORMAT} == aout
1590792SgshapiroSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
1690792Sgshapiro.endif
1794334Sgshapiro.endif
1890792Sgshapiro
19157001Sgshapiro# Set up the variables controlling shared libraries.  After this section,
2090792Sgshapiro# SHLIB_NAME will be defined only if we are to create a shared library.
2190792Sgshapiro# SHLIB_LINK will be defined only if we are to create a link to it.
2290792Sgshapiro# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
2390792Sgshapiro.if defined(NOPIC)
2490792Sgshapiro.undef SHLIB_NAME
25141858Sgshapiro.undef INSTALL_PIC_ARCHIVE
26141858Sgshapiro.else
2790792Sgshapiro.if ${OBJFORMAT} == elf
28141858Sgshapiro.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
29141858SgshapiroSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
30141858SgshapiroSHLIB_LINK?=	lib${LIB}.so
3190792Sgshapiro.endif
3290792SgshapiroSONAME?=	${SHLIB_NAME}
3390792Sgshapiro.else
3490792Sgshapiro.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
3590792SgshapiroSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
3690792Sgshapiro.endif
3790792Sgshapiro.endif
3890792Sgshapiro.endif
39141858Sgshapiro
4090792Sgshapiro.if defined(DESTDIR)
4190792SgshapiroCFLAGS+= -I${DESTDIR}/usr/include
4290792SgshapiroCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
4390792Sgshapiro.endif
4490792Sgshapiro
4590792Sgshapiro.if defined(DEBUG_FLAGS)
4690792SgshapiroCFLAGS+= ${DEBUG_FLAGS}
4790792Sgshapiro.endif
4890792Sgshapiro
4990792Sgshapiro.if !defined(DEBUG_FLAGS)
5090792SgshapiroSTRIP?=	-s
5190792Sgshapiro.endif
5290792Sgshapiro
5390792Sgshapiro.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
5490792Sgshapiro.include <bsd.libnames.mk>
5590792Sgshapiro.endif
5690792Sgshapiro
5794334Sgshapiro.MAIN: all
5890792Sgshapiro
5990792Sgshapiro# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
6090792Sgshapiro# .So used for PIC object files
6190792Sgshapiro.SUFFIXES:
6290792Sgshapiro.SUFFIXES: .out .o .po .So .s .S .c .cc .cpp .cxx .m .C .f .y .l
6390792Sgshapiro
6490792Sgshapiro.c.o:
6590792Sgshapiro	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6690792Sgshapiro	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
6790792Sgshapiro	@mv ${.TARGET}.tmp ${.TARGET}
6890792Sgshapiro
6990792Sgshapiro.c.po:
7090792Sgshapiro	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7190792Sgshapiro	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
7290792Sgshapiro	@mv ${.TARGET}.tmp ${.TARGET}
7390792Sgshapiro
7490792Sgshapiro.c.So:
7590792Sgshapiro	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7690792Sgshapiro	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7790792Sgshapiro	@mv ${.TARGET}.tmp ${.TARGET}
7890792Sgshapiro
7990792Sgshapiro.cc.o .C.o .cpp.o .cxx.o:
8090792Sgshapiro	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8190792Sgshapiro	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8290792Sgshapiro	@mv ${.TARGET}.tmp ${.TARGET}
8390792Sgshapiro
8490792Sgshapiro.cc.po .C.po .cpp.po .cxx.po:
8590792Sgshapiro	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8690792Sgshapiro	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
8790792Sgshapiro	@mv ${.TARGET}.tmp ${.TARGET}
8890792Sgshapiro
89.cc.So .C.So .cpp.So .cxx.So:
90	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
91	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
92	@mv ${.TARGET}.tmp ${.TARGET}
93
94.f.o:
95	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
96	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
97	@mv ${.TARGET}.tmp ${.TARGET}
98
99.f.po:
100	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
101	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
102	@mv ${.TARGET}.tmp ${.TARGET}
103
104.f.So:
105	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
106	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
107	@mv ${.TARGET}.tmp ${.TARGET}
108
109.m.o:
110	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
111	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
112	@mv ${.TARGET}.tmp ${.TARGET}
113
114.m.po:
115	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
116	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
117	@mv ${.TARGET}.tmp ${.TARGET}
118
119.m.So:
120	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
121	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
122	@mv ${.TARGET}.tmp ${.TARGET}
123
124.s.o:
125	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
126	    ${.IMPSRC} -o ${.TARGET}
127	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
128	@mv ${.TARGET}.tmp ${.TARGET}
129
130.s.po:
131	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
132	    ${.IMPSRC} -o ${.TARGET}
133	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
134	@mv ${.TARGET}.tmp ${.TARGET}
135
136.s.So:
137	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
138	    ${.IMPSRC} -o ${.TARGET}
139	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
140	@mv ${.TARGET}.tmp ${.TARGET}
141
142.S.o:
143	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
144	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
145	@mv ${.TARGET}.tmp ${.TARGET}
146
147.S.po:
148	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
149	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
150	@mv ${.TARGET}.tmp ${.TARGET}
151
152.S.So:
153	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
154	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
155	@mv ${.TARGET}.tmp ${.TARGET}
156
157.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
158.if !defined(NOPROFILE) && !defined(INTERNALLIB)
159_LIBS=lib${LIB}.a lib${LIB}_p.a
160.else
161_LIBS=lib${LIB}.a
162.endif
163.endif
164
165.if defined(SHLIB_NAME)
166_LIBS+=${SHLIB_NAME}
167.endif
168.if defined(INSTALL_PIC_ARCHIVE)
169_LIBS+=lib${LIB}_pic.a
170.endif
171
172.if !defined(PICFLAG)
173PICFLAG=-fpic
174.endif
175
176all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
177
178OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
179
180lib${LIB}.a:: ${OBJS} ${STATICOBJS}
181	@${ECHO} building standard ${LIB} library
182	@rm -f lib${LIB}.a
183	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
184	${RANLIB} lib${LIB}.a
185
186POBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
187.if !defined(NOPROFILE)
188lib${LIB}_p.a:: ${POBJS}
189	@${ECHO} building profiled ${LIB} library
190	@rm -f lib${LIB}_p.a
191	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
192	${RANLIB} lib${LIB}_p.a
193.endif
194
195.if defined(DESTDIR)
196LDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR}
197.endif
198
199SOBJS+= ${OBJS:.o=.So}
200
201.if defined(SHLIB_NAME)
202${SHLIB_NAME}: ${SOBJS}
203	@${ECHO} building shared library ${SHLIB_NAME}
204	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
205.if defined(SHLIB_LINK)
206	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
207.endif
208.if ${OBJFORMAT} == aout
209	@${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \
210	    -o ${SHLIB_NAME} \
211	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
212.else
213	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
214	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
215	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
216.endif
217.endif
218
219.if defined(INSTALL_PIC_ARCHIVE)
220lib${LIB}_pic.a:: ${SOBJS}
221	@${ECHO} building special pic ${LIB} library
222	@rm -f lib${LIB}_pic.a
223	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
224	${RANLIB} lib${LIB}_pic.a
225.endif
226
227llib-l${LIB}.ln: ${SRCS}
228	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
229
230.if !target(clean)
231clean:	_SUBDIR
232	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
233	rm -f lib${LIB}.a # llib-l${LIB}.ln
234	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
235	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
236	    ${SHLIB_NAME} ${SHLIB_LINK} \
237	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
238.if defined(CLEANDIRS) && !empty(CLEANDIRS)
239	rm -rf ${CLEANDIRS}
240.endif
241.endif
242
243_EXTRADEPEND:
244	@TMP=_depend$$$$; \
245	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
246	    > $$TMP; \
247	mv $$TMP ${DEPENDFILE}
248.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
249.if ${OBJFORMAT} == aout
250	echo ${SHLIB_NAME}: \
251	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
252	    >> ${DEPENDFILE}
253.else
254.if defined(DPADD) && !empty(DPADD)
255	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
256.endif
257.endif
258.endif
259
260.if !target(install)
261.if !target(beforeinstall)
262beforeinstall:
263.endif
264
265.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
266SHLINSTALLFLAGS+= -fschg
267.endif
268
269_INSTALLFLAGS:=	${INSTALLFLAGS}
270.for ie in ${INSTALLFLAGS_EDIT}
271_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
272.endfor
273_SHLINSTALLFLAGS:=	${INSTALLFLAGS}
274.for ie in ${INSTALLFLAGS_EDIT}
275_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
276.endfor
277
278realinstall: beforeinstall
279.if !defined(INTERNALLIB)
280	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
281	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
282.if !defined(NOPROFILE)
283	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
284	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
285.endif
286.endif
287.if defined(SHLIB_NAME)
288	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
289	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
290	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
291.if defined(SHLIB_LINK)
292	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
293.endif
294.endif
295.if defined(INSTALL_PIC_ARCHIVE)
296	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
297	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
298.endif
299.if defined(LINKS) && !empty(LINKS)
300	@set ${LINKS}; \
301	while test $$# -ge 2; do \
302		l=${DESTDIR}$$1; \
303		shift; \
304		t=${DESTDIR}$$1; \
305		shift; \
306		${ECHO} $$t -\> $$l; \
307		ln -f $$l $$t; \
308	done; true
309.endif
310.if defined(SYMLINKS) && !empty(SYMLINKS)
311	@set ${SYMLINKS}; \
312	while test $$# -ge 2; do \
313		l=$$1; \
314		shift; \
315		t=${DESTDIR}$$1; \
316		shift; \
317		${ECHO} $$t -\> $$l; \
318		ln -fs $$l $$t; \
319	done; true
320.endif
321
322install: afterinstall _SUBDIR
323.if !defined(NOMAN)
324afterinstall: realinstall maninstall
325.else
326afterinstall: realinstall
327.endif
328.endif
329
330.if !target(regress)
331regress:
332.endif
333
334DISTRIBUTION?=	bin
335.if !target(distribute)
336distribute:	_SUBDIR
337.for dist in ${DISTRIBUTION}
338	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
339.endfor
340.endif
341
342.if !target(lint)
343lint:
344.endif
345
346.if !defined(NOMAN)
347.include <bsd.man.mk>
348.elif !target(maninstall)
349maninstall:
350all-man:
351.endif
352
353.include <bsd.dep.mk>
354
355.if !exists(${DEPENDFILE})
356${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
357.endif
358
359.include <bsd.obj.mk>
360