bsd.lib.mk revision 96512
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 96512 2002-05-13 10:53:24Z 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
1642915Sjdp.if !defined(SHLIB_NAME) && 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:
12226715Sasami	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${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:
12826715Sasami	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${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:
13495216Smarkm	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} \
13595216Smarkm	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
13638186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1381638Srgrimes
1391844Swollman.S.o:
14026715Sasami	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14196258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
14238186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1431844Swollman
1441844Swollman.S.po:
14526715Sasami	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14696258Sobrien	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
14738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1481844Swollman
14942450Sjdp.S.So:
15095216Smarkm	${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} \
15195216Smarkm	    -o ${.TARGET}
15238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1541844Swollman
15596512Sruall: objwarn
1561638Srgrimes
15796512Sru.if defined(LIB) && !empty(LIB)
15896512Sru_LIBS=		lib${LIB}.a
15996512SruOBJS+=		${SRCS:N*.h:R:S/$/.o/}
1601638Srgrimes
16196512Srulib${LIB}.a: ${OBJS} ${STATICOBJS}
16296512Sru	@${ECHO} building static ${LIB} library
16396512Sru	@rm -f ${.TARGET}
16496512Sru	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
16596512Sru	${RANLIB} ${.TARGET}
1661638Srgrimes
16796512SruCLEANFILES+=	a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
16895114Sobrien
16996512Sru.if !defined(INTERNALLIB)
17095114Sobrien
17196512Sru.if !defined(NOPROFILE)
17296512Sru_LIBS+=		lib${LIB}_p.a
17396512SruPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
17495306Sru
17596512Srulib${LIB}_p.a: ${POBJS}
17696512Sru	@${ECHO} building profiled ${LIB} library
17796512Sru	@rm -f ${.TARGET}
17896512Sru	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
17996512Sru	${RANLIB} ${.TARGET}
18096512Sru
18196512SruCLEANFILES+=	${POBJS} ${POBJS:S/$/.tmp/}
18274805Sru.endif
1831844Swollman
18496512SruSOBJS+=		${OBJS:.o=.So}
1851844Swollman
18696512SruCLEANFILES+=	${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
1871638Srgrimes
18896512Sru.if defined(SHLIB_NAME)
18996512Sru_LIBS+=		${SHLIB_NAME}
1901638Srgrimes
19142915Sjdp${SHLIB_NAME}: ${SOBJS}
19242915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
19396512Sru	@rm -f ${.TARGET} ${SHLIB_LINK}
19442915Sjdp.if defined(SHLIB_LINK)
19596512Sru	@ln -fs ${.TARGET} ${SHLIB_LINK}
19642915Sjdp.endif
19738655Sjb.if ${OBJFORMAT} == aout
19891011Sru	@${CC} -shared -Wl,-x,-assert,pure-text \
19996512Sru	    -o ${.TARGET} \
20091011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
20128945Speter.else
20296343Sobrien	@${CC} ${LDFLAGS} -shared -Wl,-x \
20396512Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
20491011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
20528945Speter.endif
20696512Sru
20796512SruCLEANFILES+=	${SHLIB_LINK} lib${LIB}.so.* lib${LIB}.so
20842915Sjdp.endif
2091844Swollman
21042915Sjdp.if defined(INSTALL_PIC_ARCHIVE)
21196512Sru_LIBS+=		lib${LIB}_pic.a
21296512Sru
21396512Srulib${LIB}_pic.a: ${SOBJS}
2142353Sbde	@${ECHO} building special pic ${LIB} library
21596512Sru	@rm -f ${.TARGET}
21696512Sru	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
21796512Sru	${RANLIB} ${.TARGET}
2183859Sbde.endif
2191844Swollman
22096512Sru.if defined(WANT_LINT)
22196512SruLINTLIB=	llib-l${LIB}.ln
22296512Sru_LIBS+=		${LINTLIB}
22396512SruLINTOBJS+=	${SRCS:M*.c:.c=.ln}
22496512Sru
22592491Smarkm${LINTLIB}: ${LINTOBJS}
22696512Sru	@${ECHO} building lint library ${.TARGET}
22796512Sru	@rm -f ${.TARGET}
22892491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
22996512Sru
23096512SruCLEANFILES+=	${LINTOBJS}
23192491Smarkm.endif
2321638Srgrimes
23396512Sru.endif !defined(INTERNALLIB)
23496512Sru
23596512Sruall: ${_LIBS}
23696512Sru
23796512SruCLEANFILES+=	${_LIBS}
23896512Sru.endif defined(LIB) && !empty(LIB)
23996512Sru
24096512Sru.if !defined(NOMAN)
24196512Sruall: _manpages
2421638Srgrimes.endif
2431638Srgrimes
24434179Sbde_EXTRADEPEND:
24524750Sbde	@TMP=_depend$$$$; \
24642450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
24724750Sbde	    > $$TMP; \
24824750Sbde	mv $$TMP ${DEPENDFILE}
24942915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
25038655Sjb.if ${OBJFORMAT} == aout
25142915Sjdp	echo ${SHLIB_NAME}: \
25291011Sru	    `${CC} -shared -Wl,-f ${LDADD}` \
25325468Sjdp	    >> ${DEPENDFILE}
25428945Speter.else
25531809Sbde.if defined(DPADD) && !empty(DPADD)
25642915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
25727910Sasami.endif
25828945Speter.endif
25928945Speter.endif
2601638Srgrimes
2611638Srgrimes.if !target(install)
2621638Srgrimes
26348204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
2642298SwollmanSHLINSTALLFLAGS+= -fschg
2652298Swollman.endif
2662298Swollman
26749328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
26849328Shoek.for ie in ${INSTALLFLAGS_EDIT}
26949328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
27049328Shoek.endfor
27156971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
27249328Shoek.for ie in ${INSTALLFLAGS_EDIT}
27349328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
27449328Shoek.endfor
27549328Shoek
27696512Sru.if defined(LIB) && !empty(LIB) && !defined(INTERNALLIB)
27795306Srurealinstall: _libinstall
27895306Sru_libinstall:
27996512Sru.if !defined(NOINSTALLLIB)
28092980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28149328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
28296512Sru.endif
2831638Srgrimes.if !defined(NOPROFILE)
28492980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28549328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2861638Srgrimes.endif
28742915Sjdp.if defined(SHLIB_NAME)
28848204Sjmg	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
28949328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
29042915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
29142915Sjdp.if defined(SHLIB_LINK)
29296512Sru	ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
2931844Swollman.endif
29428945Speter.endif
2951844Swollman.if defined(INSTALL_PIC_ARCHIVE)
2961844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29749328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2981844Swollman.endif
29996512Sru.if defined(WANT_LINT)
30096462Sru	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30196462Sru	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
30296462Sru.endif
30396512Sru.endif defined(LIB) && !empty(LIB) && !defined(INTERNALLIB)
30496462Sru
30596462Srurealinstall:
3061638Srgrimes.if defined(LINKS) && !empty(LINKS)
3071638Srgrimes	@set ${LINKS}; \
3081638Srgrimes	while test $$# -ge 2; do \
3091638Srgrimes		l=${DESTDIR}$$1; \
3101638Srgrimes		shift; \
3111638Srgrimes		t=${DESTDIR}$$1; \
3121638Srgrimes		shift; \
3132353Sbde		${ECHO} $$t -\> $$l; \
31444946Sbde		ln -f $$l $$t; \
3151638Srgrimes	done; true
3161638Srgrimes.endif
31744946Sbde.if defined(SYMLINKS) && !empty(SYMLINKS)
31844946Sbde	@set ${SYMLINKS}; \
31944946Sbde	while test $$# -ge 2; do \
32044946Sbde		l=$$1; \
32144946Sbde		shift; \
32244946Sbde		t=${DESTDIR}$$1; \
32344946Sbde		shift; \
32444946Sbde		${ECHO} $$t -\> $$l; \
32544946Sbde		ln -fs $$l $$t; \
32644946Sbde	done; true
32744946Sbde.endif
3281638Srgrimes
32996462Srurealinstall: _incsinstall
33096462Sru
33196162Sru.if !defined(NOMAN)
33296164Srurealinstall: _maninstall
33396162Sru.endif
33496162Sru
3351638Srgrimes.endif
3361638Srgrimes
3371638Srgrimes.if !target(lint)
33895306Srulint: ${SRCS:M*.c}
33992553Sru	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
3401638Srgrimes.endif
3411638Srgrimes
34296462Sru.include <bsd.incs.mk>
34396462Sru
3441844Swollman.if !defined(NOMAN)
3451638Srgrimes.include <bsd.man.mk>
34674842Sru.endif
3471844Swollman
3481844Swollman.include <bsd.dep.mk>
34934092Sbde
35096512Sru.if defined(LIB) && !empty(LIB)
35194113Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
35242915Sjdp${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
35334092Sbde.endif
35496512Sru.endif
35534092Sbde
35616663Sjkh.include <bsd.obj.mk>
35776861Skris
35876861Skris.include <bsd.sys.mk>
359