bsd.lib.mk revision 56971
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 56971 2000-02-03 09:36:17Z ru $
31844Swollman#
41638Srgrimes
538183Speter.if !target(__initialized__)
638183Speter__initialized__:
71638Srgrimes.if exists(${.CURDIR}/../Makefile.inc)
81638Srgrimes.include "${.CURDIR}/../Makefile.inc"
91638Srgrimes.endif
1038183Speter.endif
111638Srgrimes
121844Swollman.if exists(${.CURDIR}/shlib_version)
131844SwollmanSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
1438655Sjb.if ${OBJFORMAT} == aout
151844SwollmanSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
161844Swollman.endif
1728945Speter.endif
181844Swollman
1942915Sjdp# Set up the variables controlling shared libraries.  After this section,
2042915Sjdp# SHLIB_NAME will be defined only if we are to create a shared library.
2142915Sjdp# SHLIB_LINK will be defined only if we are to create a link to it.
2242915Sjdp# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
2342915Sjdp.if defined(NOPIC)
2442915Sjdp.undef SHLIB_NAME
2542915Sjdp.undef INSTALL_PIC_ARCHIVE
2642915Sjdp.else
2742915Sjdp.if ${OBJFORMAT} == elf
2842915Sjdp.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
2942915SjdpSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
3042915SjdpSHLIB_LINK?=	lib${LIB}.so
3129141Speter.endif
3242915SjdpSONAME?=	${SHLIB_NAME}
3342915Sjdp.else
3442915Sjdp.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
3542915SjdpSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
3642915Sjdp.endif
3742915Sjdp.endif
3842915Sjdp.endif
3929141Speter
401844Swollman.if defined(DESTDIR)
411844SwollmanCFLAGS+= -I${DESTDIR}/usr/include
4226051SasamiCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
431844Swollman.endif
442353Sbde
452827Sjkh.if defined(DEBUG_FLAGS)
462827SjkhCFLAGS+= ${DEBUG_FLAGS}
472827Sjkh.endif
482827Sjkh
492827Sjkh.if !defined(DEBUG_FLAGS)
501638SrgrimesSTRIP?=	-s
512827Sjkh.endif
521638Srgrimes
5343055Sjdp.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
5418529Sbde.include <bsd.libnames.mk>
5531809Sbde.endif
5618529Sbde
571638Srgrimes.MAIN: all
581638Srgrimes
591638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
6042450Sjdp# .So used for PIC object files
611638Srgrimes.SUFFIXES:
6242450Sjdp.SUFFIXES: .out .o .po .So .s .S .c .cc .cpp .cxx .m .C .f .y .l
631638Srgrimes
641638Srgrimes.c.o:
651844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
6738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
681638Srgrimes
691638Srgrimes.c.po:
7024761Sjdp	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7138186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
7238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
731638Srgrimes
7442450Sjdp.c.So:
751844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
781844Swollman
7936673Sdt.cc.o .C.o .cpp.o .cxx.o:
801844Swollman	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8138186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
831844Swollman
8436673Sdt.cc.po .C.po .cpp.po .cxx.po:
8524761Sjdp	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8638186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
8738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
881844Swollman
8942450Sjdp.cc.So .C.So .cpp.So .cxx.So:
901844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
9138186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
9238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
931844Swollman
941844Swollman.f.o:
951844Swollman	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
9738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
981844Swollman
991844Swollman.f.po:
10024761Sjdp	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
10138186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
10238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1031844Swollman
10442450Sjdp.f.So:
1051844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
10638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1081844Swollman
10936054Sbde.m.o:
11036054Sbde	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
11138186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
11238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11336054Sbde
11436054Sbde.m.po:
11536054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
11638186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
11738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11836054Sbde
11942450Sjdp.m.So:
12036054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
12138186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
12238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
12336054Sbde
1241638Srgrimes.s.o:
12526715Sasami	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
12617510Speter	    ${.IMPSRC} -o ${.TARGET}
12738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
12838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1291638Srgrimes
1301638Srgrimes.s.po:
13126715Sasami	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
13217510Speter	    ${.IMPSRC} -o ${.TARGET}
13338186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
13438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1351638Srgrimes
13642450Sjdp.s.So:
13726715Sasami	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
13817510Speter	    ${.IMPSRC} -o ${.TARGET}
13938186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1411638Srgrimes
1421844Swollman.S.o:
14326715Sasami	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1461844Swollman
1471844Swollman.S.po:
14826715Sasami	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14938186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
15038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1511844Swollman
15242450Sjdp.S.So:
15326715Sasami	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
15438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1561844Swollman
1572870Swollman.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
1582868Swollman.if !defined(NOPROFILE) && !defined(INTERNALLIB)
1591638Srgrimes_LIBS=lib${LIB}.a lib${LIB}_p.a
1601638Srgrimes.else
1611638Srgrimes_LIBS=lib${LIB}.a
1621638Srgrimes.endif
1632870Swollman.endif
1641638Srgrimes
16542915Sjdp.if defined(SHLIB_NAME)
16642915Sjdp_LIBS+=${SHLIB_NAME}
1671638Srgrimes.endif
1681844Swollman.if defined(INSTALL_PIC_ARCHIVE)
1691844Swollman_LIBS+=lib${LIB}_pic.a
1701844Swollman.endif
1711638Srgrimes
1721844Swollman.if !defined(PICFLAG)
1731844SwollmanPICFLAG=-fpic
1741844Swollman.endif
1751638Srgrimes
17618340Sswallaceall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
1771844Swollman
1781844SwollmanOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
1791844Swollman
18042915Sjdplib${LIB}.a:: ${OBJS} ${STATICOBJS}
1812353Sbde	@${ECHO} building standard ${LIB} library
1821638Srgrimes	@rm -f lib${LIB}.a
18342915Sjdp	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
1841844Swollman	${RANLIB} lib${LIB}.a
1851638Srgrimes
18642915SjdpPOBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
1873859Sbde.if !defined(NOPROFILE)
1881638Srgrimeslib${LIB}_p.a:: ${POBJS}
1892353Sbde	@${ECHO} building profiled ${LIB} library
1901638Srgrimes	@rm -f lib${LIB}_p.a
19117400Sjkh	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
1921844Swollman	${RANLIB} lib${LIB}_p.a
1933859Sbde.endif
1941638Srgrimes
1951844Swollman.if defined(DESTDIR)
19636640SpeterLDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR}
1971844Swollman.endif
1981844Swollman
19942450SjdpSOBJS+= ${OBJS:.o=.So}
20028945Speter
20142915Sjdp.if defined(SHLIB_NAME)
20242915Sjdp${SHLIB_NAME}: ${SOBJS}
20342915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
20442915Sjdp	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
20542915Sjdp.if defined(SHLIB_LINK)
20642915Sjdp	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
20742915Sjdp.endif
20838655Sjb.if ${OBJFORMAT} == aout
20942915Sjdp	@${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \
21042915Sjdp	    -o ${SHLIB_NAME} \
21117400Sjkh	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
21228945Speter.else
21328945Speter	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
21442915Sjdp	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
21528945Speter	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
21628945Speter.endif
21742915Sjdp.endif
2181844Swollman
21942915Sjdp.if defined(INSTALL_PIC_ARCHIVE)
2201844Swollmanlib${LIB}_pic.a:: ${SOBJS}
2212353Sbde	@${ECHO} building special pic ${LIB} library
2221844Swollman	@rm -f lib${LIB}_pic.a
2235253Sache	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
2241844Swollman	${RANLIB} lib${LIB}_pic.a
2253859Sbde.endif
2261844Swollman
2271638Srgrimesllib-l${LIB}.ln: ${SRCS}
2281638Srgrimes	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
2291638Srgrimes
2301638Srgrimes.if !target(clean)
23116663Sjkhclean:	_SUBDIR
23242915Sjdp	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
23331809Sbde	rm -f lib${LIB}.a # llib-l${LIB}.ln
23438187Speter	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
23542450Sjdp	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
23642915Sjdp	    ${SHLIB_NAME} ${SHLIB_LINK} \
23742450Sjdp	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
23816826Sphk.if defined(CLEANDIRS) && !empty(CLEANDIRS)
23916437Sphk	rm -rf ${CLEANDIRS}
2401638Srgrimes.endif
24116437Sphk.endif
2421638Srgrimes
24334179Sbde_EXTRADEPEND:
24424750Sbde	@TMP=_depend$$$$; \
24542450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
24624750Sbde	    > $$TMP; \
24724750Sbde	mv $$TMP ${DEPENDFILE}
24842915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
24938655Sjb.if ${OBJFORMAT} == aout
25042915Sjdp	echo ${SHLIB_NAME}: \
25125468Sjdp	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
25225468Sjdp	    >> ${DEPENDFILE}
25328945Speter.else
25431809Sbde.if defined(DPADD) && !empty(DPADD)
25542915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
25627910Sasami.endif
25728945Speter.endif
25828945Speter.endif
2591638Srgrimes
2601638Srgrimes.if !target(install)
2611638Srgrimes.if !target(beforeinstall)
26255954Srgrimesbeforeinstall: _includeinstall
2631638Srgrimes.endif
2641638Srgrimes
26555954Srgrimes_includeinstall:
26655954Srgrimes.if defined(INCS)
26755954Srgrimes.for header in ${INCS}
26855954Srgrimes	cd ${.CURDIR} && \
26955954Srgrimes	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
27055954Srgrimes		${header} ${DESTDIR}${INCDIR}
27155954Srgrimes
27255954Srgrimes.endfor
27355954Srgrimes.endif
27455954Srgrimes
27548204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
2762298SwollmanSHLINSTALLFLAGS+= -fschg
2772298Swollman.endif
2782298Swollman
27949328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
28049328Shoek.for ie in ${INSTALLFLAGS_EDIT}
28149328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
28249328Shoek.endfor
28356971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
28449328Shoek.for ie in ${INSTALLFLAGS_EDIT}
28549328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
28649328Shoek.endfor
28749328Shoek
2881638Srgrimesrealinstall: beforeinstall
2892298Swollman.if !defined(INTERNALLIB)
2901996Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29149328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
2921638Srgrimes.if !defined(NOPROFILE)
2931844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29449328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2951638Srgrimes.endif
2962298Swollman.endif
29742915Sjdp.if defined(SHLIB_NAME)
29848204Sjmg	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29949328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
30042915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
30142915Sjdp.if defined(SHLIB_LINK)
30244946Sbde	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
3031844Swollman.endif
30428945Speter.endif
3051844Swollman.if defined(INSTALL_PIC_ARCHIVE)
3061844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30749328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
3081844Swollman.endif
3091638Srgrimes.if defined(LINKS) && !empty(LINKS)
3101638Srgrimes	@set ${LINKS}; \
3111638Srgrimes	while test $$# -ge 2; do \
3121638Srgrimes		l=${DESTDIR}$$1; \
3131638Srgrimes		shift; \
3141638Srgrimes		t=${DESTDIR}$$1; \
3151638Srgrimes		shift; \
3162353Sbde		${ECHO} $$t -\> $$l; \
31744946Sbde		ln -f $$l $$t; \
3181638Srgrimes	done; true
3191638Srgrimes.endif
32044946Sbde.if defined(SYMLINKS) && !empty(SYMLINKS)
32144946Sbde	@set ${SYMLINKS}; \
32244946Sbde	while test $$# -ge 2; do \
32344946Sbde		l=$$1; \
32444946Sbde		shift; \
32544946Sbde		t=${DESTDIR}$$1; \
32644946Sbde		shift; \
32744946Sbde		${ECHO} $$t -\> $$l; \
32844946Sbde		ln -fs $$l $$t; \
32944946Sbde	done; true
33044946Sbde.endif
3311638Srgrimes
33216663Sjkhinstall: afterinstall _SUBDIR
3331844Swollman.if !defined(NOMAN)
3341844Swollmanafterinstall: realinstall maninstall
3351844Swollman.else
3361638Srgrimesafterinstall: realinstall
3371638Srgrimes.endif
3381638Srgrimes.endif
3391638Srgrimes
34034528Seivind.if !target(regress)
34134528Seivindregress:
34234528Seivind.endif
34334528Seivind
3445585SjkhDISTRIBUTION?=	bin
3454442Sphk.if !target(distribute)
34616663Sjkhdistribute:	_SUBDIR
34726760Sjkh.for dist in ${DISTRIBUTION}
34826760Sjkh	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
34926760Sjkh.endfor
3504442Sphk.endif
3514442Sphk
3521638Srgrimes.if !target(lint)
3531638Srgrimeslint:
3541638Srgrimes.endif
3551638Srgrimes
3561844Swollman.if !defined(NOMAN)
3571638Srgrimes.include <bsd.man.mk>
3581844Swollman.elif !target(maninstall)
3591844Swollmanmaninstall:
36011136Swollmanall-man:
3611844Swollman.endif
3621844Swollman
3631844Swollman.include <bsd.dep.mk>
36434092Sbde
36534092Sbde.if !exists(${DEPENDFILE})
36642915Sjdp${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
36734092Sbde.endif
36834092Sbde
36916663Sjkh.include <bsd.obj.mk>
370