bsd.lib.mk revision 2298
11844Swollman#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
22298Swollman#	$Id: bsd.lib.mk,v 1.4 1994/08/10 02:48:07 wollman Exp $
31844Swollman#
41638Srgrimes
51638Srgrimes.if exists(${.CURDIR}/../Makefile.inc)
61638Srgrimes.include "${.CURDIR}/../Makefile.inc"
71638Srgrimes.endif
81638Srgrimes
91844Swollman.if exists(${.CURDIR}/shlib_version)
101844SwollmanSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
111844SwollmanSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
121844Swollman.endif
131844Swollman
141844Swollman.if defined(DESTDIR)
151844SwollmanCFLAGS+= -I${DESTDIR}/usr/include
161844SwollmanCXXINCLUDES+= -I${DESTDIR}/usr/include/${CXX}
171844Swollman.endif
181844SwollmanINSTALL?=	install
191638SrgrimesLIBDIR?=	/usr/lib
201638SrgrimesLINTLIBDIR?=	/usr/libdata/lint
211638SrgrimesLIBGRP?=	bin
221638SrgrimesLIBOWN?=	bin
231638SrgrimesLIBMODE?=	444
241638Srgrimes
251638SrgrimesSTRIP?=	-s
261638Srgrimes
271638SrgrimesBINGRP?=	bin
281638SrgrimesBINOWN?=	bin
291638SrgrimesBINMODE?=	555
301638Srgrimes
311638Srgrimes.MAIN: all
321638Srgrimes
331638Srgrimes# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
341844Swollman# .so used for PIC object files
351638Srgrimes.SUFFIXES:
361844Swollman.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
371638Srgrimes
381638Srgrimes.c.o:
391844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
401638Srgrimes	@${LD} -x -r ${.TARGET}
411638Srgrimes	@mv a.out ${.TARGET}
421638Srgrimes
431638Srgrimes.c.po:
441638Srgrimes	${CC} -p ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
451638Srgrimes	@${LD} -X -r ${.TARGET}
461638Srgrimes	@mv a.out ${.TARGET}
471638Srgrimes
481844Swollman.c.so:
491844Swollman	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
501844Swollman
511844Swollman.cc.o .cxx.o .C.o:
521844Swollman	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
531844Swollman	@${LD} -x -r ${.TARGET}
541844Swollman	@mv a.out ${.TARGET}
551844Swollman
561844Swollman.cc.po .C.po .cxx.o:
571844Swollman	${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
581844Swollman	@${LD} -X -r ${.TARGET}
591844Swollman	@mv a.out ${.TARGET}
601844Swollman
611844Swollman.cc.so .C.so:
621844Swollman	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
631844Swollman
641844Swollman.f.o:
651844Swollman	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
661844Swollman	@${LD} -x -r ${.TARGET}
671844Swollman	@mv a.out ${.TARGET}
681844Swollman
691844Swollman.f.po:
701844Swollman	${FC} -p ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
711844Swollman	@${LD} -X -r ${.TARGET}
721844Swollman	@mv a.out ${.TARGET}
731844Swollman
741844Swollman.f.so:
751844Swollman	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
761844Swollman
771638Srgrimes.s.o:
781638Srgrimes	${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
791638Srgrimes	    ${AS} -o ${.TARGET}
801638Srgrimes	@${LD} -x -r ${.TARGET}
811638Srgrimes	@mv a.out ${.TARGET}
821638Srgrimes
831638Srgrimes.s.po:
841638Srgrimes	${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
851638Srgrimes	    ${AS} -o ${.TARGET}
861638Srgrimes	@${LD} -X -r ${.TARGET}
871638Srgrimes	@mv a.out ${.TARGET}
881638Srgrimes
891844Swollman.s.so:
901844Swollman	${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
911844Swollman	   ${AS} -k -o ${.TARGET}
921638Srgrimes
931844Swollman.S.o:
941844Swollman	${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
951844Swollman	    ${AS} -o ${.TARGET}
961844Swollman
971844Swollman.S.po:
981844Swollman	${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
991844Swollman	    ${AS} -o ${.TARGET}
1001844Swollman
1011844Swollman.S.so:
1021844Swollman	${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \
1031844Swollman	   ${AS} -k -o ${.TARGET}
1041844Swollman
1051844Swollman.m.po:
1061844Swollman	${CC} ${CFLAGS} -p -c ${.IMPSRC} -o ${.TARGET}
1071844Swollman	@${LD} -X -r ${.TARGET}
1081844Swollman	@mv a.out ${.TARGET}
1091844Swollman
1101844Swollman.m.o:
1111844Swollman	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
1121844Swollman	@${LD} -X -r ${.TARGET}
1131844Swollman	@mv a.out ${.TARGET}
1141844Swollman
1152298Swollman.if !defined(INTERNALLIB)
1161638Srgrimes.if !defined(NOPROFILE)
1171638Srgrimes_LIBS=lib${LIB}.a lib${LIB}_p.a
1181638Srgrimes.else
1191638Srgrimes_LIBS=lib${LIB}.a
1201638Srgrimes.endif
1212298Swollman.endif
1221638Srgrimes
1231844Swollman.if !defined(NOPIC)
1241844Swollman.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
1251844Swollman_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1261638Srgrimes.endif
1271844Swollman.if defined(INSTALL_PIC_ARCHIVE)
1281844Swollman_LIBS+=lib${LIB}_pic.a
1291844Swollman.endif
1301844Swollman.endif
1311638Srgrimes
1321844Swollman.if !defined(PICFLAG)
1331844SwollmanPICFLAG=-fpic
1341844Swollman.endif
1351638Srgrimes
1361844Swollmanall: ${_LIBS} # llib-l${LIB}.ln
1371844Swollman
1381844SwollmanOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
1391844Swollman
1401638Srgrimeslib${LIB}.a:: ${OBJS}
1411638Srgrimes	@echo building standard ${LIB} library
1421638Srgrimes	@rm -f lib${LIB}.a
1431953Swollman	@${AR} cTq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD}
1441844Swollman	${RANLIB} lib${LIB}.a
1451638Srgrimes
1461638SrgrimesPOBJS+=	${OBJS:.o=.po}
1471638Srgrimeslib${LIB}_p.a:: ${POBJS}
1481638Srgrimes	@echo building profiled ${LIB} library
1491638Srgrimes	@rm -f lib${LIB}_p.a
1501953Swollman	@${AR} cTq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD}
1511844Swollman	${RANLIB} lib${LIB}_p.a
1521638Srgrimes
1531844Swollman.if defined(DESTDIR)
1541844SwollmanLDDESTDIR?=	-L${DESTDIR}/usr/lib
1551844Swollman.endif
1561844Swollman
1571844Swollman.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir)
1581844SwollmanSOBJS+= ${DESTDIR}/usr/lib/c++rt0.o
1591844Swollman.endif
1601844Swollman
1611844SwollmanSOBJS+= ${OBJS:.o=.so}
1621844Swollmanlib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
1631844Swollman	@echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
1641844Swollman	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1651844Swollman	@$(LD) -Bshareable \
1661844Swollman	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
1671953Swollman	    ${SOBJS} ${LDDESTDIR} ${LDADD}
1681844Swollman
1691844Swollmanlib${LIB}_pic.a:: ${SOBJS}
1701844Swollman	@echo building special pic ${LIB} library
1711844Swollman	@rm -f lib${LIB}_pic.a
1721953Swollman	@${AR} cTq lib${LIB}_pic.a ${SOBJS} ${ARADD}
1731844Swollman	${RANLIB} lib${LIB}_pic.a
1741844Swollman
1751638Srgrimesllib-l${LIB}.ln: ${SRCS}
1761638Srgrimes	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
1771638Srgrimes
1781638Srgrimes.if !target(clean)
1791638Srgrimesclean:
1801844Swollman	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
1811844Swollman	rm -f lib${LIB}.a llib-l${LIB}.ln
1821844Swollman	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
1831844Swollman	rm -f ${SOBJS} shared/*.o
1841844Swollman	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
1851638Srgrimes.endif
1861638Srgrimes
1871638Srgrimes.if !target(cleandir)
1881638Srgrimescleandir:
1891844Swollman	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
1901844Swollman	rm -f lib${LIB}.a llib-l${LIB}.ln
1911844Swollman	rm -f ${.CURDIR}/tags .depend
1921844Swollman	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
1931844Swollman	rm -f ${SOBJS} shared/*.o
1941844Swollman	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
1951844Swollman	cd ${.CURDIR}; rm -rf obj;
1961638Srgrimes.endif
1971638Srgrimes
1981844Swollman.if defined(SRCS)
1991844Swollmanafterdepend:
2001638Srgrimes	@(TMP=/tmp/_depend$$$$; \
2011844Swollman	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \
2021844Swollman	mv $$TMP .depend)
2031638Srgrimes.endif
2041638Srgrimes
2051638Srgrimes.if !target(install)
2061638Srgrimes.if !target(beforeinstall)
2071638Srgrimesbeforeinstall:
2081638Srgrimes.endif
2091638Srgrimes
2102298Swollman.if defined(PRECIOUSLIB)
2112298SwollmanSHLINSTALLFLAGS+= -fschg
2122298Swollman.endif
2132298Swollman
2141638Srgrimesrealinstall: beforeinstall
2152298Swollman.if !defined(INTERNALLIB)
2161996Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2171996Swollman	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
2181638Srgrimes	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a
2191638Srgrimes.if !defined(NOPROFILE)
2201844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2211996Swollman	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2221638Srgrimes	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
2231638Srgrimes.endif
2242298Swollman.endif
2251844Swollman.if !defined(NOPIC)
2261844Swollman.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
2271844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2282298Swollman	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
2292298Swollman	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
2301996Swollman	    ${DESTDIR}${LIBDIR}
2311844Swollman.endif
2321844Swollman.if defined(INSTALL_PIC_ARCHIVE)
2331844Swollman	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2341996Swollman	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2351844Swollman	${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
2361844Swollman.endif
2371844Swollman.endif
2381638Srgrimes.if defined(LINKS) && !empty(LINKS)
2391638Srgrimes	@set ${LINKS}; \
2401638Srgrimes	while test $$# -ge 2; do \
2411638Srgrimes		l=${DESTDIR}$$1; \
2421638Srgrimes		shift; \
2431638Srgrimes		t=${DESTDIR}$$1; \
2441638Srgrimes		shift; \
2451638Srgrimes		echo $$t -\> $$l; \
2461638Srgrimes		rm -f $$t; \
2471638Srgrimes		ln $$l $$t; \
2481638Srgrimes	done; true
2491638Srgrimes.endif
2501638Srgrimes
2511638Srgrimesinstall: afterinstall
2521844Swollman.if !defined(NOMAN)
2531844Swollmanafterinstall: realinstall maninstall
2541844Swollman.else
2551638Srgrimesafterinstall: realinstall
2561638Srgrimes.endif
2571638Srgrimes.endif
2581638Srgrimes
2591638Srgrimes.if !target(lint)
2601638Srgrimeslint:
2611638Srgrimes.endif
2621638Srgrimes
2631638Srgrimes.if !target(tags)
2641638Srgrimestags: ${SRCS}
2651844Swollman	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \
2661844Swollman	    sed "s;\${.CURDIR}/;;" > tags
2671638Srgrimes.endif
2681638Srgrimes
2691844Swollman.if !defined(NOMAN)
2701638Srgrimes.include <bsd.man.mk>
2711844Swollman.elif !target(maninstall)
2721844Swollmanmaninstall:
2731844Swollman.endif
2741844Swollman
2751638Srgrimes.if !target(obj)
2761638Srgrimes.if defined(NOOBJ)
2771638Srgrimesobj:
2781638Srgrimes.else
2791638Srgrimesobj:
2801638Srgrimes	@cd ${.CURDIR}; rm -rf obj; \
2811844Swollman	here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \
2821638Srgrimes	echo "$$here -> $$dest"; ln -s $$dest obj; \
2831638Srgrimes	if test -d /usr/obj -a ! -d $$dest; then \
2841638Srgrimes		mkdir -p $$dest; \
2851638Srgrimes	else \
2861638Srgrimes		true; \
2871638Srgrimes	fi;
2881638Srgrimes.endif
2891638Srgrimes.endif
2901844Swollman
2911844Swollman.include <bsd.dep.mk>
292