bsd.lib.mk revision 129024
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
250476Speter# $FreeBSD: head/share/mk/bsd.lib.mk 129024 2004-05-07 09:58:36Z des $
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
15129024Sdes.if !defined(SHLIB) && defined(LIB)
16129024SdesSHLIB=		${LIB}
1729141Speter.endif
18129024Sdes.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
19129024SdesSHLIB_NAME=	lib${SHLIB}.so.${SHLIB_MAJOR}
20129024Sdes.endif
21125119Sru.if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
22100332SruSHLIB_LINK?=	${SHLIB_NAME:R}
23100332Sru.endif
2442915SjdpSONAME?=	${SHLIB_NAME}
2542915Sjdp.endif
2629141Speter
27119607Sru.if defined(CRUNCH_CFLAGS)
28117034SgordonCFLAGS+=	${CRUNCH_CFLAGS}
29119607Sru.endif
30117034Sgordon
312827Sjkh.if defined(DEBUG_FLAGS)
322827SjkhCFLAGS+= ${DEBUG_FLAGS}
332827Sjkh.endif
342827Sjkh
352827Sjkh.if !defined(DEBUG_FLAGS)
361638SrgrimesSTRIP?=	-s
372827Sjkh.endif
381638Srgrimes
3918529Sbde.include <bsd.libnames.mk>
4018529Sbde
411638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
4242450Sjdp# .So used for PIC object files
431638Srgrimes.SUFFIXES:
44117173Sru.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln
451638Srgrimes
4696512Sru.if !defined(PICFLAG)
4796512Sru.if ${MACHINE_ARCH} == "sparc64"
4896512SruPICFLAG=-fPIC
4996512Sru.else
5096512SruPICFLAG=-fpic
5196512Sru.endif
5296512Sru.endif
5396512Sru
54126890Strhodes.if ${CC} == "icc"
55126890StrhodesPO_FLAG=-p
56126890Strhodes.else
57126890StrhodesPO_FLAG=-pg
58126890Strhodes.endif
59126890Strhodes
601638Srgrimes.c.po:
61126890Strhodes	${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
621638Srgrimes
6342450Sjdp.c.So:
641844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
651844Swollman
6636673Sdt.cc.po .C.po .cpp.po .cxx.po:
67126890Strhodes	${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
681844Swollman
6942450Sjdp.cc.So .C.So .cpp.So .cxx.So:
701844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
711844Swollman
721844Swollman.f.po:
73127027Strhodes	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
741844Swollman
7542450Sjdp.f.So:
761844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
771844Swollman
7836054Sbde.m.po:
7936054Sbde	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
8036054Sbde
8142450Sjdp.m.So:
8236054Sbde	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
8336054Sbde
84117173Sru.s.po .s.So:
85117159Sru	${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
861638Srgrimes
87117173Sru.asm.po:
88117173Sru	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
89117173Sru
90117173Sru.asm.So:
91117173Sru	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
92117173Sru	    -c ${.IMPSRC} -o ${.TARGET}
93117173Sru
941844Swollman.S.po:
95117122Sru	${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
961844Swollman
9742450Sjdp.S.So:
98117122Sru	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
991844Swollman
10096512Sruall: objwarn
1011638Srgrimes
10299362Sru.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
10399362SruOBJS+=		${SRCS:N*.h:R:S/$/.o/}
10499362Sru.endif
10599362Sru
10696512Sru.if defined(LIB) && !empty(LIB)
10796512Sru_LIBS=		lib${LIB}.a
1081638Srgrimes
10996512Srulib${LIB}.a: ${OBJS} ${STATICOBJS}
11096512Sru	@${ECHO} building static ${LIB} library
11196512Sru	@rm -f ${.TARGET}
11296512Sru	@${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
11396512Sru	${RANLIB} ${.TARGET}
11499362Sru.endif
1151638Srgrimes
11696512Sru.if !defined(INTERNALLIB)
11795114Sobrien
11899362Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
11996512Sru_LIBS+=		lib${LIB}_p.a
12096512SruPOBJS+=		${OBJS:.o=.po} ${STATICOBJS:.o=.po}
12195306Sru
12296512Srulib${LIB}_p.a: ${POBJS}
12396512Sru	@${ECHO} building profiled ${LIB} library
12496512Sru	@rm -f ${.TARGET}
12596512Sru	@${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD}
12696512Sru	${RANLIB} ${.TARGET}
12774805Sru.endif
1281844Swollman
12999362Sru.if defined(SHLIB_NAME) || \
13099362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
13196512SruSOBJS+=		${OBJS:.o=.So}
13299362Sru.endif
1331844Swollman
13496512Sru.if defined(SHLIB_NAME)
13596512Sru_LIBS+=		${SHLIB_NAME}
1361638Srgrimes
13742915Sjdp${SHLIB_NAME}: ${SOBJS}
13842915Sjdp	@${ECHO} building shared library ${SHLIB_NAME}
13996512Sru	@rm -f ${.TARGET} ${SHLIB_LINK}
14042915Sjdp.if defined(SHLIB_LINK)
14196512Sru	@ln -fs ${.TARGET} ${SHLIB_LINK}
14242915Sjdp.endif
14396343Sobrien	@${CC} ${LDFLAGS} -shared -Wl,-x \
14496512Sru	    -o ${.TARGET} -Wl,-soname,${SONAME} \
14591011Sru	    `lorder ${SOBJS} | tsort -q` ${LDADD}
14628945Speter.endif
1471844Swollman
14899362Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
14996512Sru_LIBS+=		lib${LIB}_pic.a
15096512Sru
15196512Srulib${LIB}_pic.a: ${SOBJS}
1522353Sbde	@${ECHO} building special pic ${LIB} library
15396512Sru	@rm -f ${.TARGET}
15496512Sru	@${AR} cq ${.TARGET} ${SOBJS} ${ARADD}
15596512Sru	${RANLIB} ${.TARGET}
1563859Sbde.endif
1571844Swollman
158103713Smarkm.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
15996512SruLINTLIB=	llib-l${LIB}.ln
16096512Sru_LIBS+=		${LINTLIB}
16196512SruLINTOBJS+=	${SRCS:M*.c:.c=.ln}
16296512Sru
16392491Smarkm${LINTLIB}: ${LINTOBJS}
16496512Sru	@${ECHO} building lint library ${.TARGET}
16596512Sru	@rm -f ${.TARGET}
16692491Smarkm	${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
16792491Smarkm.endif
1681638Srgrimes
169126938Strhodes.endif !defined(INTERNALLIB)
17096512Sru
17196512Sruall: ${_LIBS}
17296512Sru
17396512Sru.if !defined(NOMAN)
17496512Sruall: _manpages
1751638Srgrimes.endif
1761638Srgrimes
17734179Sbde_EXTRADEPEND:
17824750Sbde	@TMP=_depend$$$$; \
17942450Sjdp	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
18024750Sbde	    > $$TMP; \
18124750Sbde	mv $$TMP ${DEPENDFILE}
18242915Sjdp.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
18331809Sbde.if defined(DPADD) && !empty(DPADD)
18442915Sjdp	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
18527910Sasami.endif
18628945Speter.endif
1871638Srgrimes
1881638Srgrimes.if !target(install)
1891638Srgrimes
19048204Sjmg.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
1912298SwollmanSHLINSTALLFLAGS+= -fschg
1922298Swollman.endif
1932298Swollman
19449328Shoek_INSTALLFLAGS:=	${INSTALLFLAGS}
19549328Shoek.for ie in ${INSTALLFLAGS_EDIT}
19649328Shoek_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
19749328Shoek.endfor
19856971Sru_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
19949328Shoek.for ie in ${INSTALLFLAGS_EDIT}
20049328Shoek_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
20149328Shoek.endfor
20249328Shoek
20399362Sru.if !defined(INTERNALLIB)
20495306Srurealinstall: _libinstall
20599343Sru.ORDER: beforeinstall _libinstall
20695306Sru_libinstall:
20799362Sru.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB)
20892980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
20949328Shoek	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
21096512Sru.endif
21199362Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
21292980Sdes	${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
21349328Shoek	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2141638Srgrimes.endif
215116144Sobrien.if defined(SHLIB_NAME)
216100872Sru	${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
21749328Shoek	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
21842915Sjdp	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
21942915Sjdp.if defined(SHLIB_LINK)
220119846Sru.if ${SHLIBDIR} == ${LIBDIR}
221119846Sru	ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
222119846Sru.else
223119846Sru	ln -fs ${_SHLIBDIRPREFIX}${SHLIBDIR}/${SHLIB_NAME} \
224119730Speter	    ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
225119846Sru.if exists(${DESTDIR}${LIBDIR}/${SHLIB_NAME})
226119846Sru	-chflags noschg ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
227119846Sru	rm -f ${DESTDIR}${LIBDIR}/${SHLIB_NAME}
2281844Swollman.endif
22928945Speter.endif
230119730Speter.endif
231119846Sru.endif
23299362Sru.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
233100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
23449328Shoek	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2351844Swollman.endif
236103713Smarkm.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB)
237100872Sru	${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
23896462Sru	    ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
23996462Sru.endif
24099362Sru.endif !defined(INTERNALLIB)
24196462Sru
24297769Sru.include <bsd.files.mk>
24396668Sru.include <bsd.incs.mk>
24499256Sru.include <bsd.links.mk>
24596462Sru
24696162Sru.if !defined(NOMAN)
24796164Srurealinstall: _maninstall
24899343Sru.ORDER: beforeinstall _maninstall
24996162Sru.endif
25096162Sru
2511638Srgrimes.endif
2521638Srgrimes
2531638Srgrimes.if !target(lint)
25495306Srulint: ${SRCS:M*.c}
255103713Smarkm	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
2561638Srgrimes.endif
2571638Srgrimes
2581844Swollman.if !defined(NOMAN)
2591638Srgrimes.include <bsd.man.mk>
26074842Sru.endif
2611844Swollman
2621844Swollman.include <bsd.dep.mk>
26334092Sbde
26499362Sru.if !exists(${.OBJDIR}/${DEPENDFILE})
26596512Sru.if defined(LIB) && !empty(LIB)
26699362Sru${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h}
267124637Sru.for _S in ${SRCS:N*.[hly]}
268124637Sru${_S:R}.po: ${_S}
269124637Sru.endfor
27034092Sbde.endif
27199362Sru.if defined(SHLIB_NAME) || \
27299362Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
27399362Sru${SOBJS}: ${SRCS:M*.h}
274124637Sru.for _S in ${SRCS:N*.[hly]}
275124637Sru${_S:R}.So: ${_S}
276124637Sru.endfor
27796512Sru.endif
27899362Sru.endif
27934092Sbde
280100457Sru.if !target(clean)
281100457Sruclean:
282100457Sru.if defined(CLEANFILES) && !empty(CLEANFILES)
283100457Sru	rm -f ${CLEANFILES}
284100457Sru.endif
285100457Sru.if defined(LIB) && !empty(LIB)
286100457Sru	rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS}
287100457Sru.endif
288100457Sru.if !defined(INTERNALLIB)
289100457Sru.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB)
290100457Sru	rm -f ${POBJS} ${POBJS:S/$/.tmp/}
291100457Sru.endif
292100457Sru.if defined(SHLIB_NAME) || \
293100457Sru    defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB)
294100457Sru	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/}
295100457Sru.endif
296100457Sru.if defined(SHLIB_NAME)
297100457Sru.if defined(SHLIB_LINK)
298100457Sru	rm -f ${SHLIB_LINK}
299100457Sru.endif
300100457Sru.if defined(LIB) && !empty(LIB)
301100457Sru	rm -f lib${LIB}.so.* lib${LIB}.so
302100457Sru.endif
303100457Sru.endif
304100457Sru.if defined(WANT_LINT) && defined(LIB) && !empty(LIB)
305100457Sru	rm -f ${LINTOBJS}
306100457Sru.endif
307100457Sru.endif !defined(INTERNALLIB)
308100457Sru.if defined(_LIBS) && !empty(_LIBS)
309100457Sru	rm -f ${_LIBS}
310100457Sru.endif
311100457Sru.if defined(CLEANDIRS) && !empty(CLEANDIRS)
312100457Sru	rm -rf ${CLEANDIRS}
313100457Sru.endif
314100457Sru.endif
315100457Sru
31616663Sjkh.include <bsd.obj.mk>
31776861Skris
31876861Skris.include <bsd.sys.mk>
319