bsd.lib.mk revision 96162
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 96162 2002-05-07 15:27:56Z ru $
31844Swollman#
41638Srgrimes
594940Sru.include <bsd.init.mk>
61638Srgrimes
71844Swollman.if exists(${.CURDIR}/shlib_version)
81844SwollmanSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
938655Sjb.if ${OBJFORMAT} == aout
101844SwollmanSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
111844Swollman.endif
1228945Speter.endif
131844Swollman
1442915Sjdp# Set up the variables controlling shared libraries.  After this section,
1542915Sjdp# SHLIB_NAME will be defined only if we are to create a shared library.
1642915Sjdp# SHLIB_LINK will be defined only if we are to create a link to it.
1742915Sjdp# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
1842915Sjdp.if defined(NOPIC)
1942915Sjdp.undef SHLIB_NAME
2042915Sjdp.undef INSTALL_PIC_ARCHIVE
2142915Sjdp.else
2242915Sjdp.if ${OBJFORMAT} == elf
2342915Sjdp.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
2442915SjdpSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
2542915SjdpSHLIB_LINK?=	lib${LIB}.so
2629141Speter.endif
2742915SjdpSONAME?=	${SHLIB_NAME}
2842915Sjdp.else
2942915Sjdp.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
3042915SjdpSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
3142915Sjdp.endif
3242915Sjdp.endif
3342915Sjdp.endif
3429141Speter
352827Sjkh.if defined(DEBUG_FLAGS)
362827SjkhCFLAGS+= ${DEBUG_FLAGS}
372827Sjkh.endif
382827Sjkh
392827Sjkh.if !defined(DEBUG_FLAGS)
401638SrgrimesSTRIP?=	-s
412827Sjkh.endif
421638Srgrimes
4343055Sjdp.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
4418529Sbde.include <bsd.libnames.mk>
4531809Sbde.endif
4618529Sbde
471638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
4842450Sjdp# .So used for PIC object files
491638Srgrimes.SUFFIXES:
5095064Sobrien.SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln
511638Srgrimes
5292491Smarkm.c.ln:
5392491Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
5492553Sru	    touch ${.TARGET}
5592491Smarkm
5692491Smarkm.cc.ln .C.ln .cpp.ln .cxx.ln:
5792553Sru	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
5892553Sru	    touch ${.TARGET}
5992491Smarkm
601638Srgrimes.c.o:
611844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
6338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
641638Srgrimes
651638Srgrimes.c.po:
6624761Sjdp	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6738186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
6838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
691638Srgrimes
7042450Sjdp.c.So:
711844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
741844Swollman
7536673Sdt.cc.o .C.o .cpp.o .cxx.o:
761844Swollman	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
791844Swollman
8036673Sdt.cc.po .C.po .cpp.po .cxx.po:
8124761Sjdp	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8238186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
8338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
841844Swollman
8542450Sjdp.cc.So .C.So .cpp.So .cxx.So:
861844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
891844Swollman
901844Swollman.f.o:
911844Swollman	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
9338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
941844Swollman
951844Swollman.f.po:
9624761Sjdp	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9738186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
9838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
991844Swollman
10042450Sjdp.f.So:
1011844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
10238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1041844Swollman
10536054Sbde.m.o:
10636054Sbde	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
10738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
10936054Sbde
11036054Sbde.m.po:
11136054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
11238186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
11338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11436054Sbde
11542450Sjdp.m.So:
11636054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
11738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
11838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11936054Sbde
12095251Sru.s.o .asm.o:
12126715Sasami	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
12217510Speter	    ${.IMPSRC} -o ${.TARGET}
12338186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
12438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1251638Srgrimes
12695251Sru.s.po .asm.po:
12726715Sasami	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
12817510Speter	    ${.IMPSRC} -o ${.TARGET}
12938186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
13038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1311638Srgrimes
13295251Sru.s.So .asm.So:
13395216Smarkm	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} \
13495216Smarkm	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
13538186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13638186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1371638Srgrimes
1381844Swollman.S.o:
13926715Sasami	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14038186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14138186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1421844Swollman
1431844Swollman.S.po:
14426715Sasami	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14538186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
14638186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1471844Swollman
14842450Sjdp.S.So:
14995216Smarkm	${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} \
15095216Smarkm	    -o ${.TARGET}
15138186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1531844Swollman
1542870Swollman.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
1552868Swollman.if !defined(NOPROFILE) && !defined(INTERNALLIB)
1561638Srgrimes_LIBS=lib${LIB}.a lib${LIB}_p.a
1571638Srgrimes.else
1581638Srgrimes_LIBS=lib${LIB}.a
1591638Srgrimes.endif
1602870Swollman.endif
1611638Srgrimes
16242915Sjdp.if defined(SHLIB_NAME)
16342915Sjdp_LIBS+=${SHLIB_NAME}
1641638Srgrimes.endif
1651844Swollman.if defined(INSTALL_PIC_ARCHIVE)
1661844Swollman_LIBS+=lib${LIB}_pic.a
1671844Swollman.endif
1681638Srgrimes
1691844Swollman.if !defined(PICFLAG)
17092128Sobrien.if ${MACHINE_ARCH} == "sparc64"
17192128SobrienPICFLAG=-fPIC
17292128Sobrien.else
1731844SwollmanPICFLAG=-fpic
1741844Swollman.endif
17592128Sobrien.endif
1761638Srgrimes
17795114SobrienLINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
17895114Sobrien
17995114Sobrien.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
18095114SobrienLINTLIB=llib-l${LIB}.ln
18195114Sobrien_LIBS+=${LINTLIB}
18295114Sobrien.endif
18395114Sobrien
18495306Sruall: objwarn ${_LIBS}
18595306Sru
18674805Sru.if !defined(NOMAN)
18795306Sruall: all-man
18874805Sru.endif
1891844Swollman
1901844SwollmanOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
1911844Swollman
19242915Sjdplib${LIB}.a:: ${OBJS} ${STATICOBJS}
19366534Speter	@${ECHO} building static ${LIB} library
1941638Srgrimes	@rm -f lib${LIB}.a
19542915Sjdp	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
1961844Swollman	${RANLIB} lib${LIB}.a
1971638Srgrimes
19842915SjdpPOBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
1993859Sbde.if !defined(NOPROFILE)
2001638Srgrimeslib${LIB}_p.a:: ${POBJS}
2012353Sbde	@${ECHO} building profiled ${LIB} library
2021638Srgrimes	@rm -f lib${LIB}_p.a
20317400Sjkh	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
2041844Swollman	${RANLIB} lib${LIB}_p.a
2053859Sbde.endif
2061638Srgrimes
20742450SjdpSOBJS+= ${OBJS:.o=.So}
20828945Speter
20942915Sjdp.if defined(SHLIB_NAME)
21042915Sjdp${SHLIB_NAME}: ${SOBJS}
21142915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
21242915Sjdp	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
21342915Sjdp.if defined(SHLIB_LINK)
21442915Sjdp	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
21542915Sjdp.endif
21638655Sjb.if ${OBJFORMAT} == aout
21791011Sru	@${CC} -shared -Wl,-x,-assert,pure-text \
21842915Sjdp	    -o ${SHLIB_NAME} \
21991011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
22028945Speter.else
22191011Sru	@${CC} -shared -Wl,-x \
22242915Sjdp	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
22391011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
22428945Speter.endif
22542915Sjdp.endif
2261844Swollman
22742915Sjdp.if defined(INSTALL_PIC_ARCHIVE)
2281844Swollmanlib${LIB}_pic.a:: ${SOBJS}
2292353Sbde	@${ECHO} building special pic ${LIB} library
2301844Swollman	@rm -f lib${LIB}_pic.a
2315253Sache	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
2321844Swollman	${RANLIB} lib${LIB}_pic.a
2333859Sbde.endif
2341844Swollman
23592553Sru.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
23692491Smarkm${LINTLIB}: ${LINTOBJS}
23792553Sru	@${ECHO} building lint library ${LINTLIB}
23892491Smarkm	@rm -f ${LINTLIB}
23992491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
24092491Smarkm.endif
2411638Srgrimes
2421638Srgrimes.if !target(clean)
24395306Sruclean:
24442915Sjdp	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
24592553Sru	rm -f lib${LIB}.a
24638187Speter	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
24742450Sjdp	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
24842915Sjdp	    ${SHLIB_NAME} ${SHLIB_LINK} \
24942450Sjdp	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
25092491Smarkm	rm -f ${LINTOBJS} ${LINTLIB}
25116826Sphk.if defined(CLEANDIRS) && !empty(CLEANDIRS)
25216437Sphk	rm -rf ${CLEANDIRS}
2531638Srgrimes.endif
25416437Sphk.endif
2551638Srgrimes
25634179Sbde_EXTRADEPEND:
25724750Sbde	@TMP=_depend$$$$; \
25842450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
25924750Sbde	    > $$TMP; \
26024750Sbde	mv $$TMP ${DEPENDFILE}
26142915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
26238655Sjb.if ${OBJFORMAT} == aout
26342915Sjdp	echo ${SHLIB_NAME}: \
26491011Sru	    `${CC} -shared -Wl,-f ${LDADD}` \
26525468Sjdp	    >> ${DEPENDFILE}
26628945Speter.else
26731809Sbde.if defined(DPADD) && !empty(DPADD)
26842915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
26927910Sasami.endif
27028945Speter.endif
27128945Speter.endif
2721638Srgrimes
2731638Srgrimes.if !target(install)
2741638Srgrimes.if !target(beforeinstall)
27555954Srgrimesbeforeinstall: _includeinstall
2761638Srgrimes.endif
2771638Srgrimes
27855954Srgrimes_includeinstall:
27955954Srgrimes.if defined(INCS)
28055954Srgrimes.for header in ${INCS}
28155954Srgrimes	cd ${.CURDIR} && \
28255954Srgrimes	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
28395216Smarkm	    ${header} ${DESTDIR}${INCDIR}
28455954Srgrimes.endfor
28555954Srgrimes.endif
28655954Srgrimes
28748204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
2882298SwollmanSHLINSTALLFLAGS+= -fschg
2892298Swollman.endif
2902298Swollman
29149328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
29249328Shoek.for ie in ${INSTALLFLAGS_EDIT}
29349328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
29449328Shoek.endfor
29556971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
29649328Shoek.for ie in ${INSTALLFLAGS_EDIT}
29749328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
29849328Shoek.endfor
29949328Shoek
3001638Srgrimesrealinstall: beforeinstall
30195306Srurealinstall: _libinstall
30295306Sru_libinstall:
3032298Swollman.if !defined(INTERNALLIB)
30492980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30549328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
3061638Srgrimes.if !defined(NOPROFILE)
30792980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30849328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
3091638Srgrimes.endif
3102298Swollman.endif
31142915Sjdp.if defined(SHLIB_NAME)
31248204Sjmg	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31349328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
31442915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
31542915Sjdp.if defined(SHLIB_LINK)
31644946Sbde	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
3171844Swollman.endif
31828945Speter.endif
3191844Swollman.if defined(INSTALL_PIC_ARCHIVE)
3201844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
32149328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
3221844Swollman.endif
3231638Srgrimes.if defined(LINKS) && !empty(LINKS)
3241638Srgrimes	@set ${LINKS}; \
3251638Srgrimes	while test $$# -ge 2; do \
3261638Srgrimes		l=${DESTDIR}$$1; \
3271638Srgrimes		shift; \
3281638Srgrimes		t=${DESTDIR}$$1; \
3291638Srgrimes		shift; \
3302353Sbde		${ECHO} $$t -\> $$l; \
33144946Sbde		ln -f $$l $$t; \
3321638Srgrimes	done; true
3331638Srgrimes.endif
33444946Sbde.if defined(SYMLINKS) && !empty(SYMLINKS)
33544946Sbde	@set ${SYMLINKS}; \
33644946Sbde	while test $$# -ge 2; do \
33744946Sbde		l=$$1; \
33844946Sbde		shift; \
33944946Sbde		t=${DESTDIR}$$1; \
34044946Sbde		shift; \
34144946Sbde		${ECHO} $$t -\> $$l; \
34244946Sbde		ln -fs $$l $$t; \
34344946Sbde	done; true
34444946Sbde.endif
34592553Sru.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
34692491Smarkm	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
34792491Smarkm	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
34892491Smarkm.endif
3491638Srgrimes
35096162Sru.if !defined(NOMAN)
35196162Srurealinstall: maninstall
35296162Sru.endif
35396162Sru
35495306Sruinstall: afterinstall
35595306Sruafterinstall: realinstall
3561638Srgrimes.endif
3571638Srgrimes
3581638Srgrimes.if !target(lint)
35995306Srulint: ${SRCS:M*.c}
36092553Sru	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
3611638Srgrimes.endif
3621638Srgrimes
3631844Swollman.if !defined(NOMAN)
3641638Srgrimes.include <bsd.man.mk>
36574842Sru.endif
3661844Swollman
3671844Swollman.include <bsd.dep.mk>
36834092Sbde
36994113Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
37042915Sjdp${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
37134092Sbde.endif
37234092Sbde
37316663Sjkh.include <bsd.obj.mk>
37476861Skris
37576861Skris.include <bsd.sys.mk>
376