bsd.lib.mk revision 103713
1139743Simp#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
243412Snewton# $FreeBSD: head/share/mk/bsd.lib.mk 103713 2002-09-20 19:32:51Z markm $
343412Snewton#
443412Snewton
543412Snewton.include <bsd.init.mk>
643412Snewton
743412Snewton# Set up the variables controlling shared libraries.  After this section,
843412Snewton# SHLIB_NAME will be defined only if we are to create a shared library.
943412Snewton# SHLIB_LINK will be defined only if we are to create a link to it.
1043412Snewton# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
1143412Snewton.if defined(NOPIC)
1243412Snewton.undef SHLIB_NAME
1343412Snewton.undef INSTALL_PIC_ARCHIVE
1443412Snewton.else
1543412Snewton.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR)
1643412SnewtonSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
1743412Snewton.endif
1843412Snewton.if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*}
1943412SnewtonSHLIB_LINK?=	${SHLIB_NAME:R}
2043412Snewton.endif
2143412SnewtonSONAME?=	${SHLIB_NAME}
2243412Snewton.endif
2343412Snewton
2443412Snewton.if defined(DEBUG_FLAGS)
2543412SnewtonCFLAGS+= ${DEBUG_FLAGS}
2643412Snewton.endif
2743412Snewton
2843412Snewton.if !defined(DEBUG_FLAGS)
2943412SnewtonSTRIP?=	-s
3043412Snewton.endif
31101709Srwatson
32116174Sobrien.include <bsd.libnames.mk>
33116174Sobrien
34116174Sobrien# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
3543412Snewton# .So used for PIC object files
36224778Srwatson.SUFFIXES:
3743412Snewton.SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln
3843412Snewton
3943412Snewton.if !defined(PICFLAG)
4043412Snewton.if ${MACHINE_ARCH} == "sparc64"
4176166SmarkmPICFLAG=-fPIC
42141486Sjhb.else
4343412SnewtonPICFLAG=-fpic
4476166Smarkm.endif
4576166Smarkm.endif
46164033Srwatson
4776166Smarkm.c.ln:
4876166Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
49134266Sjhb	    touch ${.TARGET}
5076166Smarkm
5143412Snewton.cc.ln .C.ln .cpp.ln .cxx.ln:
5243412Snewton	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
5343412Snewton	    touch ${.TARGET}
5443412Snewton
5565302Sobrien.c.o:
5665302Sobrien	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
5765302Sobrien	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
5865302Sobrien	@mv ${.TARGET}.tmp ${.TARGET}
5965302Sobrien
6065302Sobrien.c.po:
6143412Snewton	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
62163606Srwatson	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
63163606Srwatson	@mv ${.TARGET}.tmp ${.TARGET}
6492761Salfred
6592761Salfred.c.So:
6692761Salfred	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6792761Salfred	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
6892761Salfred	@mv ${.TARGET}.tmp ${.TARGET}
6992761Salfred
7092761Salfred.cc.o .C.o .cpp.o .cxx.o:
7192761Salfred	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7292761Salfred	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7343412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
7443412Snewton
7543412Snewton.cc.po .C.po .cpp.po .cxx.po:
7643412Snewton	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7743412Snewton	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
7843412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
7943412Snewton
8043412Snewton.cc.So .C.So .cpp.So .cxx.So:
81177314Santoine	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
82177314Santoine	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
8343412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
8443412Snewton
8543412Snewton.f.o:
8643412Snewton	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
8743412Snewton	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8843412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
8943412Snewton
9043412Snewton.f.po:
9143412Snewton	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9243412Snewton	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
9343412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
9443412Snewton
9543412Snewton.f.So:
9643412Snewton	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
9743412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
9843412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
9943412Snewton
10043412Snewton.m.o:
10143412Snewton	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
10243412Snewton	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10343412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
10443412Snewton
10543412Snewton.m.po:
10643412Snewton	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
10743412Snewton	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
10843412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
10943412Snewton
11043412Snewton.m.So:
11143412Snewton	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
11243412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
11343412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
11443412Snewton
11543412Snewton.s.o .asm.o:
11643412Snewton	${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \
11743412Snewton	    ${.IMPSRC} -o ${.TARGET}
11843412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
11943412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
12043412Snewton
12143412Snewton.s.po .asm.po:
12243412Snewton	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \
12343412Snewton	    ${.IMPSRC} -o ${.TARGET}
12443412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
12543412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
12643412Snewton
12743412Snewton.s.So .asm.So:
12843412Snewton	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
12943412Snewton	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
13043412Snewton	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13143412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
13243412Snewton
13343412Snewton.S.o:
13443412Snewton	${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
13543412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
13643412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
13743412Snewton
13843412Snewton.S.po:
13943412Snewton	${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14043412Snewton	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
14143412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
14243412Snewton
14343412Snewton.S.So:
14443412Snewton	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \
14543412Snewton	    -o ${.TARGET}
14643412Snewton	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14743412Snewton	@mv ${.TARGET}.tmp ${.TARGET}
14843412Snewton
14943412Snewtonall: objwarn
15043412Snewton
15143412Snewton.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
15243412SnewtonOBJS+=		${SRCS:N*.h:R:S/$/.o/}
15343412Snewton.endif
15443412Snewton
15543412Snewton.if defined(LIB) && !empty(LIB)
15643412Snewton_LIBS=		lib${LIB}.a
15743412Snewton
15843412Snewtonlib${LIB}.a: ${OBJS} ${STATICOBJS}
15943412Snewton	@${ECHO} building static ${LIB} library
16043412Snewton	@rm -f ${.TARGET}
16143412Snewton	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
16243412Snewton	${RANLIB} ${.TARGET}
16343412Snewton.endif
16443412Snewton
16543412Snewton.if !defined(INTERNALLIB)
16643412Snewton
16743412Snewton.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
16843412Snewton_LIBS+=		lib${LIB}_p.a
16943412SnewtonPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
17043412Snewton
17143412Snewtonlib${LIB}_p.a: ${POBJS}
17243412Snewton	@${ECHO} building profiled ${LIB} library
17343412Snewton	@rm -f ${.TARGET}
17443412Snewton	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
17543412Snewton	${RANLIB} ${.TARGET}
17643412Snewton.endif
17743412Snewton
17843412Snewton.if defined(SHLIB_NAME) || \
17943412Snewton    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
18043412SnewtonSOBJS+=		${OBJS:.o=.So}
18143412Snewton.endif
18243412Snewton
18343412Snewton.if defined(SHLIB_NAME)
18443412Snewton_LIBS+=		${SHLIB_NAME}
18543412Snewton
18643412Snewton${SHLIB_NAME}: ${SOBJS}
18743412Snewton	@${ECHO} building shared library ${SHLIB_NAME}
18843412Snewton	@rm -f ${.TARGET} ${SHLIB_LINK}
18943412Snewton.if defined(SHLIB_LINK)
19043412Snewton	@ln -fs ${.TARGET} ${SHLIB_LINK}
19143412Snewton.endif
19243412Snewton	@${CC} ${LDFLAGS} -shared -Wl,-x \
19343412Snewton	    -o ${.TARGET} -Wl,-soname,${SONAME} \
19443412Snewton	    `lorder ${SOBJS} | tsort -q` ${LDADD}
195177633Sdfr.endif
19643412Snewton
19743412Snewton.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
19843412Snewton_LIBS+=		lib${LIB}_pic.a
19943412Snewton
20043412Snewtonlib${LIB}_pic.a: ${SOBJS}
20143412Snewton	@${ECHO} building special pic ${LIB} library
20243412Snewton	@rm -f ${.TARGET}
20343412Snewton	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
20443412Snewton	${RANLIB} ${.TARGET}
20543412Snewton.endif
20643412Snewton
20743412Snewton.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
20843412SnewtonLINTLIB=	llib-l${LIB}.ln
20943412Snewton_LIBS+=		${LINTLIB}
21043412SnewtonLINTOBJS+=	${SRCS:M*.c:.c=.ln}
21143412Snewton
21243412Snewton${LINTLIB}: ${LINTOBJS}
21343412Snewton	@${ECHO} building lint library ${.TARGET}
21443412Snewton	@rm -f ${.TARGET}
21543412Snewton	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
21643412Snewton.endif
21743412Snewton
21843412Snewton.endif !defined(INTERNALLIB)
21943412Snewton
22043412Snewtonall: ${_LIBS}
221177633Sdfr
22243412Snewton.if !defined(NOMAN)
22343412Snewtonall: _manpages
22443412Snewton.endif
22543412Snewton
22643412Snewton_EXTRADEPEND:
22743412Snewton	@TMP=_depend$$$$; \
22843412Snewton	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
22943412Snewton	    > $$TMP; \
23043412Snewton	mv $$TMP ${DEPENDFILE}
23143412Snewton.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
23243412Snewton.if defined(DPADD) && !empty(DPADD)
23343412Snewton	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
23443412Snewton.endif
23543412Snewton.endif
23643412Snewton
23743412Snewton.if !target(install)
23843412Snewton
23943412Snewton.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
24043412SnewtonSHLINSTALLFLAGS+= -fschg
24143412Snewton.endif
24243412Snewton
24343412Snewton_INSTALLFLAGS:=	${INSTALLFLAGS}
24443412Snewton.for ie in ${INSTALLFLAGS_EDIT}
24543412Snewton_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
24643412Snewton.endfor
24743412Snewton_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
24843412Snewton.for ie in ${INSTALLFLAGS_EDIT}
24943412Snewton_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
25043412Snewton.endfor
25143412Snewton
25243412Snewton.if !defined(INTERNALLIB)
25343412Snewtonrealinstall: _libinstall
25443412Snewton.ORDER: beforeinstall _libinstall
25583366Sjulian_libinstall:
25683366Sjulian.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB)
25743412Snewton	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
25843412Snewton	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
25943412Snewton.endif
26062976Smckusick.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
26143412Snewton	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
262255219Spjd	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
26343412Snewton.endif
26443412Snewton.if defined(SHLIB_NAME)
26583366Sjulian	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
266224778Srwatson	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
267224778Srwatson	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
268224778Srwatson.if defined(SHLIB_LINK)
269247602Spjd	ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
270224778Srwatson.endif
271255219Spjd.endif
272224778Srwatson.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
273224778Srwatson	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
274224778Srwatson	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
275224778Srwatson.endif
276255219Spjd.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
277255219Spjd	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
27889319Salfred	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
27943412Snewton.endif
28043412Snewton.endif !defined(INTERNALLIB)
28143412Snewton
28243412Snewton.include <bsd.files.mk>
28343412Snewton.include <bsd.incs.mk>
28443412Snewton.include <bsd.links.mk>
285101709Srwatson
286175202Sattilio.if !defined(NOMAN)
287172930Srwatsonrealinstall: _maninstall
288175294Sattilio.ORDER: beforeinstall _maninstall
289101709Srwatson.endif
290101709Srwatson
291101709Srwatson.endif
292101709Srwatson
293182371Sattilio.if !target(lint)
29443412Snewtonlint: ${SRCS:M*.c}
29543412Snewton	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
29691406Sjhb.endif
297170587Srwatson
29843412Snewton.if !defined(NOMAN)
29943412Snewton.include <bsd.man.mk>
30062976Smckusick.endif
30162976Smckusick
30250405Sphk.include <bsd.dep.mk>
30343412Snewton
30462976Smckusick.if !exists(${.OBJDIR}/${DEPENDFILE})
30543412Snewton.if defined(LIB) && !empty(LIB)
30643412Snewton${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
30743412Snewton.endif
30843412Snewton.if defined(SHLIB_NAME) || \
30943412Snewton    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
31043412Snewton${SOBJS}: ${SRCS:M*.h}
31143412Snewton.endif
31283366Sjulian.endif
31383366Sjulian
31443412Snewton.if !target(clean)
31543412Snewtonclean:
31643412Snewton.if defined(CLEANFILES) && !empty(CLEANFILES)
31743412Snewton	rm -f ${CLEANFILES}
31889534Salfred.endif
31943412Snewton.if defined(LIB) && !empty(LIB)
32043412Snewton	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
32143412Snewton.endif
32243412Snewton.if !defined(INTERNALLIB)
323255219Spjd.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
32443412Snewton	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
32583366Sjulian.endif
32643412Snewton.if defined(SHLIB_NAME) || \
32743412Snewton    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
32843412Snewton	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
32943412Snewton.endif
330255219Spjd.if defined(SHLIB_NAME)
331255219Spjd.if defined(SHLIB_LINK)
33289319Salfred	rm -f ${SHLIB_LINK}
33343412Snewton.endif
334116678Sphk.if defined(LIB) && !empty(LIB)
33589534Salfred	rm -f lib${LIB}.so.* lib${LIB}.so
33689534Salfred.endif
33789534Salfred.endif
33843412Snewton.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
33989306Salfred	rm -f ${LINTOBJS}
34043412Snewton.endif
341182371Sattilio.endif !defined(INTERNALLIB)
34289534Salfred.if defined(_LIBS) && !empty(_LIBS)
34343412Snewton	rm -f ${_LIBS}
34489306Salfred.endif
34543412Snewton.if defined(CLEANDIRS) && !empty(CLEANDIRS)
34643412Snewton	rm -rf ${CLEANDIRS}
34743412Snewton.endif
34843412Snewton.endif
34943412Snewton
35043412Snewton.include <bsd.obj.mk>
35143412Snewton
35243412Snewton.include <bsd.sys.mk>
35343412Snewton