bsd.lib.mk revision 92491
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 92491 2002-03-17 10:05:57Z markm $
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
402827Sjkh.if defined(DEBUG_FLAGS)
412827SjkhCFLAGS+= ${DEBUG_FLAGS}
422827Sjkh.endif
432827Sjkh
442827Sjkh.if !defined(DEBUG_FLAGS)
451638SrgrimesSTRIP?=	-s
462827Sjkh.endif
471638Srgrimes
4843055Sjdp.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
4918529Sbde.include <bsd.libnames.mk>
5031809Sbde.endif
5118529Sbde
521638Srgrimes.MAIN: all
531638Srgrimes
541638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
5542450Sjdp# .So used for PIC object files
561638Srgrimes.SUFFIXES:
5792491Smarkm.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l .ln
581638Srgrimes
5992491Smarkm.c.ln:
6092491Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
6192491Smarkm		touch ${.TARGET}
6292491Smarkm
6392491Smarkm.cc.ln .C.ln .cpp.ln .cxx.ln:
6492491Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
6592491Smarkm		touch ${.TARGET}
6692491Smarkm
671638Srgrimes.c.o:
681844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6938186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
7038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
711638Srgrimes
721638Srgrimes.c.po:
7324761Sjdp	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7438186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
7538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
761638Srgrimes
7742450Sjdp.c.So:
781844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7938186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
811844Swollman
8236673Sdt.cc.o .C.o .cpp.o .cxx.o:
831844Swollman	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
8538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
861844Swollman
8736673Sdt.cc.po .C.po .cpp.po .cxx.po:
8824761Sjdp	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8938186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
9038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
911844Swollman
9242450Sjdp.cc.So .C.So .cpp.So .cxx.So:
931844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
9438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
9538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
961844Swollman
971844Swollman.f.o:
981844Swollman	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
9938186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
10038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1011844Swollman
1021844Swollman.f.po:
10324761Sjdp	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
10438186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
10538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1061844Swollman
10742450Sjdp.f.So:
1081844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
10938186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
11038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1111844Swollman
11236054Sbde.m.o:
11336054Sbde	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
11438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
11538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
11636054Sbde
11736054Sbde.m.po:
11836054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
11938186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
12038186Speter	@mv ${.TARGET}.tmp ${.TARGET}
12136054Sbde
12242450Sjdp.m.So:
12336054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
12438186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
12538186Speter	@mv ${.TARGET}.tmp ${.TARGET}
12636054Sbde
1271638Srgrimes.s.o:
12826715Sasami	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
12917510Speter	    ${.IMPSRC} -o ${.TARGET}
13038186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
13138186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1321638Srgrimes
1331638Srgrimes.s.po:
13426715Sasami	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
13517510Speter	    ${.IMPSRC} -o ${.TARGET}
13638186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
13738186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1381638Srgrimes
13942450Sjdp.s.So:
14092129Sobrien	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
14117510Speter	    ${.IMPSRC} -o ${.TARGET}
14238186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1441638Srgrimes
1451844Swollman.S.o:
14626715Sasami	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
14838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1491844Swollman
1501844Swollman.S.po:
15126715Sasami	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
15238186Speter	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
15338186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1541844Swollman
15542450Sjdp.S.So:
15692129Sobrien	${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
15738186Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15838186Speter	@mv ${.TARGET}.tmp ${.TARGET}
1591844Swollman
1602870Swollman.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
1612868Swollman.if !defined(NOPROFILE) && !defined(INTERNALLIB)
1621638Srgrimes_LIBS=lib${LIB}.a lib${LIB}_p.a
1631638Srgrimes.else
1641638Srgrimes_LIBS=lib${LIB}.a
1651638Srgrimes.endif
1662870Swollman.endif
1671638Srgrimes
16892491SmarkmLINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
16992491Smarkm
17092491Smarkm.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "")
17192491SmarkmLINTLIB=llib-l${LIB}.ln
17292491Smarkm.else
17392491SmarkmLINTLIB=
17492491Smarkm.endif
17592491Smarkm
17642915Sjdp.if defined(SHLIB_NAME)
17742915Sjdp_LIBS+=${SHLIB_NAME}
1781638Srgrimes.endif
1791844Swollman.if defined(INSTALL_PIC_ARCHIVE)
1801844Swollman_LIBS+=lib${LIB}_pic.a
1811844Swollman.endif
1821638Srgrimes
1831844Swollman.if !defined(PICFLAG)
18492128Sobrien.if ${MACHINE_ARCH} == "sparc64"
18592128SobrienPICFLAG=-fPIC
18692128Sobrien.else
1871844SwollmanPICFLAG=-fpic
1881844Swollman.endif
18992128Sobrien.endif
1901638Srgrimes
19174805Sru.if !defined(NOMAN)
19292491Smarkmall: objwarn ${_LIBS} all-man _SUBDIR ${LINTLIB}
19374805Sru.else
19492491Smarkmall: objwarn ${_LIBS} _SUBDIR ${LINTLIB}
19574805Sru.endif
1961844Swollman
1971844SwollmanOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
1981844Swollman
19942915Sjdplib${LIB}.a:: ${OBJS} ${STATICOBJS}
20066534Speter	@${ECHO} building static ${LIB} library
2011638Srgrimes	@rm -f lib${LIB}.a
20242915Sjdp	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
2031844Swollman	${RANLIB} lib${LIB}.a
2041638Srgrimes
20542915SjdpPOBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
2063859Sbde.if !defined(NOPROFILE)
2071638Srgrimeslib${LIB}_p.a:: ${POBJS}
2082353Sbde	@${ECHO} building profiled ${LIB} library
2091638Srgrimes	@rm -f lib${LIB}_p.a
21017400Sjkh	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
2111844Swollman	${RANLIB} lib${LIB}_p.a
2123859Sbde.endif
2131638Srgrimes
21442450SjdpSOBJS+= ${OBJS:.o=.So}
21528945Speter
21642915Sjdp.if defined(SHLIB_NAME)
21742915Sjdp${SHLIB_NAME}: ${SOBJS}
21842915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
21942915Sjdp	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
22042915Sjdp.if defined(SHLIB_LINK)
22142915Sjdp	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
22242915Sjdp.endif
22338655Sjb.if ${OBJFORMAT} == aout
22491011Sru	@${CC} -shared -Wl,-x,-assert,pure-text \
22542915Sjdp	    -o ${SHLIB_NAME} \
22691011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
22728945Speter.else
22891011Sru	@${CC} -shared -Wl,-x \
22942915Sjdp	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
23091011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
23128945Speter.endif
23242915Sjdp.endif
2331844Swollman
23442915Sjdp.if defined(INSTALL_PIC_ARCHIVE)
2351844Swollmanlib${LIB}_pic.a:: ${SOBJS}
2362353Sbde	@${ECHO} building special pic ${LIB} library
2371844Swollman	@rm -f lib${LIB}_pic.a
2385253Sache	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
2391844Swollman	${RANLIB} lib${LIB}_pic.a
2403859Sbde.endif
2411844Swollman
24292491Smarkm.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "")
24392491Smarkm${LINTLIB}: ${LINTOBJS}
24492491Smarkm	@${ECHO} building lint library ${SHLIB_NAME}
24592491Smarkm	@rm -f ${LINTLIB}
24692491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
24792491Smarkm.endif
2481638Srgrimes
2491638Srgrimes.if !target(clean)
25016663Sjkhclean:	_SUBDIR
25142915Sjdp	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
25292491Smarkm	rm -f lib${LIB}.a ${LINTLIB}
25338187Speter	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
25442450Sjdp	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
25542915Sjdp	    ${SHLIB_NAME} ${SHLIB_LINK} \
25642450Sjdp	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
25792491Smarkm	rm -f ${LINTOBJS} ${LINTLIB}
25816826Sphk.if defined(CLEANDIRS) && !empty(CLEANDIRS)
25916437Sphk	rm -rf ${CLEANDIRS}
2601638Srgrimes.endif
26116437Sphk.endif
2621638Srgrimes
26334179Sbde_EXTRADEPEND:
26424750Sbde	@TMP=_depend$$$$; \
26542450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
26624750Sbde	    > $$TMP; \
26724750Sbde	mv $$TMP ${DEPENDFILE}
26842915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
26938655Sjb.if ${OBJFORMAT} == aout
27042915Sjdp	echo ${SHLIB_NAME}: \
27191011Sru	    `${CC} -shared -Wl,-f ${LDADD}` \
27225468Sjdp	    >> ${DEPENDFILE}
27328945Speter.else
27431809Sbde.if defined(DPADD) && !empty(DPADD)
27542915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
27627910Sasami.endif
27728945Speter.endif
27828945Speter.endif
2791638Srgrimes
2801638Srgrimes.if !target(install)
2811638Srgrimes.if !target(beforeinstall)
28255954Srgrimesbeforeinstall: _includeinstall
2831638Srgrimes.endif
2841638Srgrimes
28555954Srgrimes_includeinstall:
28655954Srgrimes.if defined(INCS)
28755954Srgrimes.for header in ${INCS}
28855954Srgrimes	cd ${.CURDIR} && \
28955954Srgrimes	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
29055954Srgrimes		${header} ${DESTDIR}${INCDIR}
29155954Srgrimes
29255954Srgrimes.endfor
29355954Srgrimes.endif
29455954Srgrimes
29548204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
2962298SwollmanSHLINSTALLFLAGS+= -fschg
2972298Swollman.endif
2982298Swollman
29949328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
30049328Shoek.for ie in ${INSTALLFLAGS_EDIT}
30149328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
30249328Shoek.endfor
30356971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
30449328Shoek.for ie in ${INSTALLFLAGS_EDIT}
30549328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
30649328Shoek.endfor
30749328Shoek
3081638Srgrimesrealinstall: beforeinstall
3092298Swollman.if !defined(INTERNALLIB)
3101996Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31149328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
3121638Srgrimes.if !defined(NOPROFILE)
3131844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31449328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
3151638Srgrimes.endif
3162298Swollman.endif
31742915Sjdp.if defined(SHLIB_NAME)
31848204Sjmg	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
31949328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
32042915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
32142915Sjdp.if defined(SHLIB_LINK)
32244946Sbde	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
3231844Swollman.endif
32428945Speter.endif
3251844Swollman.if defined(INSTALL_PIC_ARCHIVE)
3261844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
32749328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
3281844Swollman.endif
3291638Srgrimes.if defined(LINKS) && !empty(LINKS)
3301638Srgrimes	@set ${LINKS}; \
3311638Srgrimes	while test $$# -ge 2; do \
3321638Srgrimes		l=${DESTDIR}$$1; \
3331638Srgrimes		shift; \
3341638Srgrimes		t=${DESTDIR}$$1; \
3351638Srgrimes		shift; \
3362353Sbde		${ECHO} $$t -\> $$l; \
33744946Sbde		ln -f $$l $$t; \
3381638Srgrimes	done; true
3391638Srgrimes.endif
34044946Sbde.if defined(SYMLINKS) && !empty(SYMLINKS)
34144946Sbde	@set ${SYMLINKS}; \
34244946Sbde	while test $$# -ge 2; do \
34344946Sbde		l=$$1; \
34444946Sbde		shift; \
34544946Sbde		t=${DESTDIR}$$1; \
34644946Sbde		shift; \
34744946Sbde		${ECHO} $$t -\> $$l; \
34844946Sbde		ln -fs $$l $$t; \
34944946Sbde	done; true
35044946Sbde.endif
35192491Smarkm.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "")
35292491Smarkm	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
35392491Smarkm	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
35492491Smarkm.endif
3551638Srgrimes
35616663Sjkhinstall: afterinstall _SUBDIR
3571844Swollman.if !defined(NOMAN)
3581844Swollmanafterinstall: realinstall maninstall
3591844Swollman.else
3601638Srgrimesafterinstall: realinstall
3611638Srgrimes.endif
3621638Srgrimes.endif
3631638Srgrimes
36434528Seivind.if !target(regress)
36534528Seivindregress:
36634528Seivind.endif
36734528Seivind
3685585SjkhDISTRIBUTION?=	bin
3694442Sphk.if !target(distribute)
37016663Sjkhdistribute:	_SUBDIR
37126760Sjkh.for dist in ${DISTRIBUTION}
37226760Sjkh	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
37326760Sjkh.endfor
3744442Sphk.endif
3754442Sphk
3761638Srgrimes.if !target(lint)
37792491Smarkmlint: ${SRCS:M*.c} _SUBDIR
37892491Smarkm	${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} | more 2>&1
3791638Srgrimes.endif
3801638Srgrimes
38192491Smarkm
3821844Swollman.if !defined(NOMAN)
3831638Srgrimes.include <bsd.man.mk>
38474842Sru.else
38574842Sru.if !target(all-man)
38674842Sruall-man:
38774842Sru.endif
38874842Sru.if !target(maninstall)
3891844Swollmanmaninstall:
3901844Swollman.endif
39174842Sru.endif
3921844Swollman
3931844Swollman.include <bsd.dep.mk>
39434092Sbde
39534092Sbde.if !exists(${DEPENDFILE})
39642915Sjdp${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
39734092Sbde.endif
39834092Sbde
39916663Sjkh.include <bsd.obj.mk>
40076861Skris
40176861Skris.include <bsd.sys.mk>
402