bsd.lib.mk revision 99362
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 99362 2002-07-03 16:22:43Z ru $
31844Swollman#
41638Srgrimes
594940Sru.include <bsd.init.mk>
61638Srgrimes
742915Sjdp# Set up the variables controlling shared libraries.  After this section,
842915Sjdp# SHLIB_NAME will be defined only if we are to create a shared library.
942915Sjdp# SHLIB_LINK will be defined only if we are to create a link to it.
1042915Sjdp# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
1142915Sjdp.if defined(NOPIC)
1242915Sjdp.undef SHLIB_NAME
1342915Sjdp.undef INSTALL_PIC_ARCHIVE
1442915Sjdp.else
1542915Sjdp.if ${OBJFORMAT} == elf
1699362Sru.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR)
1742915SjdpSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
1842915SjdpSHLIB_LINK?=	lib${LIB}.so
1929141Speter.endif
2042915SjdpSONAME?=	${SHLIB_NAME}
2142915Sjdp.else
2242915Sjdp.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
2342915SjdpSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
2442915Sjdp.endif
2542915Sjdp.endif
2642915Sjdp.endif
2729141Speter
282827Sjkh.if defined(DEBUG_FLAGS)
292827SjkhCFLAGS+= ${DEBUG_FLAGS}
302827Sjkh.endif
312827Sjkh
322827Sjkh.if !defined(DEBUG_FLAGS)
331638SrgrimesSTRIP?=	-s
342827Sjkh.endif
351638Srgrimes
3643055Sjdp.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
3718529Sbde.include <bsd.libnames.mk>
3831809Sbde.endif
3918529Sbde
401638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
4142450Sjdp# .So used for PIC object files
421638Srgrimes.SUFFIXES:
4395064Sobrien.SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln
441638Srgrimes
4596512Sru.if !defined(PICFLAG)
4696512Sru.if ${MACHINE_ARCH} == "sparc64"
4796512SruPICFLAG=-fPIC
4896512Sru.else
4996512SruPICFLAG=-fpic
5096512Sru.endif
5196512Sru.endif
5296512Sru
5392491Smarkm.c.ln:
5492491Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
5592553Sru	    touch ${.TARGET}
5692491Smarkm
5792491Smarkm.cc.ln .C.ln .cpp.ln .cxx.ln:
5892553Sru	${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
5992553Sru	    touch ${.TARGET}
6092491Smarkm
611638Srgrimes.c.o:
621844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6338186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
6438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
651638Srgrimes
661638Srgrimes.c.po:
6724761Sjdp	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6838186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
6938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
701638Srgrimes
7142450Sjdp.c.So:
721844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7396258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
7438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
751844Swollman
7636673Sdt.cc.o .C.o .cpp.o .cxx.o:
771844Swollman	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7838186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
801844Swollman
8136673Sdt.cc.po .C.po .cpp.po .cxx.po:
8224761Sjdp	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8338186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
8438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
851844Swollman
8642450Sjdp.cc.So .C.So .cpp.So .cxx.So:
871844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8896258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
8938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
901844Swollman
911844Swollman.f.o:
921844Swollman	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9338186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
9438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
951844Swollman
961844Swollman.f.po:
9724761Sjdp	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9838186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
9938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1001844Swollman
10142450Sjdp.f.So:
1021844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
10396258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
10438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1051844Swollman
10636054Sbde.m.o:
10736054Sbde	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
10838186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11036054Sbde
11136054Sbde.m.po:
11236054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
11338186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
11438186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11536054Sbde
11642450Sjdp.m.So:
11736054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
11896258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
11938186Speter	@mv ${.TARGET}.tmp ${.TARGET}
12036054Sbde
12195251Sru.s.o .asm.o:
12297101Sru	${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \
12317510Speter	    ${.IMPSRC} -o ${.TARGET}
12496258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
12538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1261638Srgrimes
12795251Sru.s.po .asm.po:
12897101Sru	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \
12917510Speter	    ${.IMPSRC} -o ${.TARGET}
13096258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
13138186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1321638Srgrimes
13395251Sru.s.So .asm.So:
13497101Sru	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
13595216Smarkm	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
13638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1381638Srgrimes
1391844Swollman.S.o:
14097101Sru	${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14196258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
14238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1431844Swollman
1441844Swollman.S.po:
14597101Sru	${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14696258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
14738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1481844Swollman
14942450Sjdp.S.So:
15097101Sru	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \
15195216Smarkm	    -o ${.TARGET}
15238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1541844Swollman
15596512Sruall: objwarn
1561638Srgrimes
15799362Sru.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
15899362SruOBJS+=		${SRCS:N*.h:R:S/$/.o/}
15999362Sru.endif
16099362Sru
16196512Sru.if defined(LIB) && !empty(LIB)
16296512Sru_LIBS=		lib${LIB}.a
1631638Srgrimes
16496512Srulib${LIB}.a: ${OBJS} ${STATICOBJS}
16596512Sru	@${ECHO} building static ${LIB} library
16696512Sru	@rm -f ${.TARGET}
16796512Sru	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
16896512Sru	${RANLIB} ${.TARGET}
16999362Sru.endif
1701638Srgrimes
17196512Sru.if !defined(INTERNALLIB)
17295114Sobrien
17399362Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
17496512Sru_LIBS+=		lib${LIB}_p.a
17596512SruPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
17695306Sru
17796512Srulib${LIB}_p.a: ${POBJS}
17896512Sru	@${ECHO} building profiled ${LIB} library
17996512Sru	@rm -f ${.TARGET}
18096512Sru	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
18196512Sru	${RANLIB} ${.TARGET}
18274805Sru.endif
1831844Swollman
18499362Sru.if defined(SHLIB_NAME) || \
18599362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
18696512SruSOBJS+=		${OBJS:.o=.So}
18799362Sru.endif
1881844Swollman
18996512Sru.if defined(SHLIB_NAME)
19096512Sru_LIBS+=		${SHLIB_NAME}
1911638Srgrimes
19242915Sjdp${SHLIB_NAME}: ${SOBJS}
19342915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
19496512Sru	@rm -f ${.TARGET} ${SHLIB_LINK}
19542915Sjdp.if defined(SHLIB_LINK)
19696512Sru	@ln -fs ${.TARGET} ${SHLIB_LINK}
19742915Sjdp.endif
19838655Sjb.if ${OBJFORMAT} == aout
19991011Sru	@${CC} -shared -Wl,-x,-assert,pure-text \
20096512Sru	    -o ${.TARGET} \
20191011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
20228945Speter.else
20396343Sobrien	@${CC} ${LDFLAGS} -shared -Wl,-x \
20496512Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
20591011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
20628945Speter.endif
20742915Sjdp.endif
2081844Swollman
20999362Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
21096512Sru_LIBS+=		lib${LIB}_pic.a
21196512Sru
21296512Srulib${LIB}_pic.a: ${SOBJS}
2132353Sbde	@${ECHO} building special pic ${LIB} library
21496512Sru	@rm -f ${.TARGET}
21596512Sru	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
21696512Sru	${RANLIB} ${.TARGET}
2173859Sbde.endif
2181844Swollman
21999362Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
22096512SruLINTLIB=	llib-l${LIB}.ln
22196512Sru_LIBS+=		${LINTLIB}
22296512SruLINTOBJS+=	${SRCS:M*.c:.c=.ln}
22396512Sru
22492491Smarkm${LINTLIB}: ${LINTOBJS}
22596512Sru	@${ECHO} building lint library ${.TARGET}
22696512Sru	@rm -f ${.TARGET}
22792491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
22892491Smarkm.endif
2291638Srgrimes
23096512Sru.endif !defined(INTERNALLIB)
23196512Sru
23296512Sruall: ${_LIBS}
23396512Sru
23496512Sru.if !defined(NOMAN)
23596512Sruall: _manpages
2361638Srgrimes.endif
2371638Srgrimes
23896529Sru.if !target(clean)
23996529Sruclean:
24098870Sjmallett.if defined(CLEANFILES) && !empty(CLEANFILES)
24196529Sru	rm -f ${CLEANFILES}
24298870Sjmallett.endif
24396529Sru.if defined(LIB) && !empty(LIB)
24496529Sru	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
24599362Sru.endif
24696529Sru.if !defined(INTERNALLIB)
24799362Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
24896529Sru	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
24996529Sru.endif
25099362Sru.if defined(SHLIB_NAME) || \
25199362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
25296529Sru	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
25399362Sru.endif
25496529Sru.if defined(SHLIB_NAME)
25599362Sru.if defined(SHLIB_LINK)
25699362Sru	rm -f ${SHLIB_LINK}
25796529Sru.endif
25899362Sru.if defined(LIB) && !empty(LIB)
25999362Sru	rm -f lib${LIB}.so.* lib${LIB}.so
26099362Sru.endif
26199362Sru.endif
26299362Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
26396529Sru	rm -f ${LINTOBJS}
26496529Sru.endif
26596529Sru.endif !defined(INTERNALLIB)
26699362Sru.if defined(_LIBS) && !empty(_LIBS)
26796529Sru	rm -f ${_LIBS}
26899362Sru.endif
26996529Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS)
27096529Sru	rm -rf ${CLEANDIRS}
27196529Sru.endif
27296529Sru.endif
27396529Sru
27434179Sbde_EXTRADEPEND:
27524750Sbde	@TMP=_depend$$$$; \
27642450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
27724750Sbde	    > $$TMP; \
27824750Sbde	mv $$TMP ${DEPENDFILE}
27942915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
28038655Sjb.if ${OBJFORMAT} == aout
28142915Sjdp	echo ${SHLIB_NAME}: \
28291011Sru	    `${CC} -shared -Wl,-f ${LDADD}` \
28325468Sjdp	    >> ${DEPENDFILE}
28428945Speter.else
28531809Sbde.if defined(DPADD) && !empty(DPADD)
28642915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
28727910Sasami.endif
28828945Speter.endif
28928945Speter.endif
2901638Srgrimes
2911638Srgrimes.if !target(install)
2921638Srgrimes
29348204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
2942298SwollmanSHLINSTALLFLAGS+= -fschg
2952298Swollman.endif
2962298Swollman
29749328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
29849328Shoek.for ie in ${INSTALLFLAGS_EDIT}
29949328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
30049328Shoek.endfor
30156971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
30249328Shoek.for ie in ${INSTALLFLAGS_EDIT}
30349328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
30449328Shoek.endfor
30549328Shoek
30699362Sru.if !defined(INTERNALLIB)
30795306Srurealinstall: _libinstall
30899343Sru.ORDER: beforeinstall _libinstall
30995306Sru_libinstall:
31099362Sru.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB)
31192980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31249328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
31396512Sru.endif
31499362Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
31592980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31649328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
3171638Srgrimes.endif
31842915Sjdp.if defined(SHLIB_NAME)
31948204Sjmg	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
32049328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
32142915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
32242915Sjdp.if defined(SHLIB_LINK)
32396512Sru	ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
3241844Swollman.endif
32528945Speter.endif
32699362Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
3271844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
32849328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
3291844Swollman.endif
33099362Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
33196462Sru	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
33296462Sru	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
33396462Sru.endif
33499362Sru.endif !defined(INTERNALLIB)
33596462Sru
33697769Sru.include <bsd.files.mk>
33796668Sru.include <bsd.incs.mk>
33899256Sru.include <bsd.links.mk>
33996462Sru
34096162Sru.if !defined(NOMAN)
34196164Srurealinstall: _maninstall
34299343Sru.ORDER: beforeinstall _maninstall
34396162Sru.endif
34496162Sru
3451638Srgrimes.endif
3461638Srgrimes
3471638Srgrimes.if !target(lint)
34895306Srulint: ${SRCS:M*.c}
34992553Sru	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
3501638Srgrimes.endif
3511638Srgrimes
3521844Swollman.if !defined(NOMAN)
3531638Srgrimes.include <bsd.man.mk>
35474842Sru.endif
3551844Swollman
3561844Swollman.include <bsd.dep.mk>
35734092Sbde
35899362Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
35996512Sru.if defined(LIB) && !empty(LIB)
36099362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
36134092Sbde.endif
36299362Sru.if defined(SHLIB_NAME) || \
36399362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
36499362Sru${SOBJS}: ${SRCS:M*.h}
36596512Sru.endif
36699362Sru.endif
36734092Sbde
36816663Sjkh.include <bsd.obj.mk>
36976861Skris
37076861Skris.include <bsd.sys.mk>
371