bsd.lib.mk revision 36673
10Sduke#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
29703Schegar#	$Id: bsd.lib.mk,v 1.73 1998/06/04 15:15:38 peter Exp $
30Sduke#
40Sduke
50Sduke.if exists(${.CURDIR}/../Makefile.inc)
60Sduke.include "${.CURDIR}/../Makefile.inc"
70Sduke.endif
80Sduke
90Sduke# Default executable format
100Sduke.if ${MACHINE} == "alpha"
110SdukeBINFORMAT?=	elf
120Sduke.else
130SdukeBINFORMAT?=	aout
140Sduke.endif
150Sduke
160Sduke.if exists(${.CURDIR}/shlib_version)
170SdukeSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
180Sduke.if ${BINFORMAT} == aout
191472StrimsSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
201472Strims.endif
211472Strims.endif
220Sduke
230Sduke.if !defined(NOPIC) && ${BINFORMAT} == elf
240SdukeSONAME?=	lib${LIB}.so.${SHLIB_MAJOR}
251879Sstefank.endif
261879Sstefank
271879Sstefank.if defined(DESTDIR)
281879SstefankCFLAGS+= -I${DESTDIR}/usr/include
291879SstefankCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
301879Sstefank.endif
311879Sstefank
321879Sstefank.if defined(DEBUG_FLAGS)
331879SstefankCFLAGS+= ${DEBUG_FLAGS}
341879Sstefank.endif
351879Sstefank
360Sduke.if !defined(DEBUG_FLAGS)
379703SchegarSTRIP?=	-s
380Sduke.endif
390Sduke
400Sduke.if ${BINFORMAT} != aout || make(checkdpadd)
410Sduke.include <bsd.libnames.mk>
420Sduke.endif
430Sduke
440Sduke.MAIN: all
450Sduke
460Sduke# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
470Sduke# .so used for PIC object files
480Sduke.SUFFIXES:
490Sduke.SUFFIXES: .out .o .po .so .s .S .c .cc .cpp .cxx .m .C .f .y .l
500Sduke
510Sduke.c.o:
520Sduke	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
530Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
540Sduke
550Sduke.c.po:
560Sduke	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
570Sduke	@${LD} -O ${.TARGET} -X -r ${.TARGET}
580Sduke
590Sduke.c.so:
600Sduke	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
610Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
620Sduke
630Sduke.cc.o .C.o .cpp.o .cxx.o:
640Sduke	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
650Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
660Sduke
670Sduke.cc.po .C.po .cpp.po .cxx.po:
680Sduke	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
690Sduke	@${LD} -O ${.TARGET} -X -r ${.TARGET}
700Sduke
710Sduke.cc.so .C.so .cpp.so .cxx.so:
720Sduke	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
730Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
740Sduke
750Sduke.f.o:
760Sduke	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
770Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
780Sduke
790Sduke.f.po:
800Sduke	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
810Sduke	@${LD} -O ${.TARGET} -X -r ${.TARGET}
820Sduke
830Sduke.f.so:
840Sduke	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
850Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
860Sduke
870Sduke.m.o:
880Sduke	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
890Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
900Sduke
910Sduke.m.po:
920Sduke	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
930Sduke	@${LD} -O ${.TARGET} -X -r ${.TARGET}
940Sduke
950Sduke.m.so:
960Sduke	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
970Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
980Sduke
990Sduke.s.o:
1000Sduke	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
1010Sduke	    ${.IMPSRC} -o ${.TARGET}
1020Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
1037708Sdsamersoff
1047708Sdsamersoff.s.po:
1057708Sdsamersoff	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
1067708Sdsamersoff	    ${.IMPSRC} -o ${.TARGET}
1077708Sdsamersoff	@${LD} -O ${.TARGET} -X -r ${.TARGET}
1080Sduke
1090Sduke.s.so:
1100Sduke	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
1110Sduke	    ${.IMPSRC} -o ${.TARGET}
1120Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
1130Sduke
1140Sduke.S.o:
1150Sduke	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
1160Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
1170Sduke
1180Sduke.S.po:
1190Sduke	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
1200Sduke	@${LD} -O ${.TARGET} -X -r ${.TARGET}
1210Sduke
1220Sduke.S.so:
1230Sduke	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
1240Sduke	@${LD} -O ${.TARGET} -x -r ${.TARGET}
1250Sduke
1260Sduke.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
1270Sduke.if !defined(NOPROFILE) && !defined(INTERNALLIB)
1280Sduke_LIBS=lib${LIB}.a lib${LIB}_p.a
1290Sduke.else
1300Sduke_LIBS=lib${LIB}.a
1310Sduke.endif
1320Sduke.endif
1330Sduke
1340Sduke.if !defined(NOPIC)
1350Sduke.if ${BINFORMAT} == aout
1360Sduke.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
1370Sduke_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1380Sduke.endif
1390Sduke.else
1400Sduke.if defined(SHLIB_MAJOR)
1410Sduke_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}
1420Sduke.endif
1430Sduke.endif
1440Sduke.if defined(INSTALL_PIC_ARCHIVE)
1450Sduke_LIBS+=lib${LIB}_pic.a
1460Sduke.endif
1470Sduke.endif
1480Sduke
1490Sduke.if !defined(PICFLAG)
1504614SccheungPICFLAG=-fpic
1510Sduke.endif
1520Sduke
1530Sdukeall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
1540Sduke
1550SdukeOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
1564614Sccheung
1574614Sccheunglib${LIB}.a:: ${OBJS}
1580Sduke	@${ECHO} building standard ${LIB} library
1590Sduke	@rm -f lib${LIB}.a
1600Sduke	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q` ${ARADD}
1610Sduke	${RANLIB} lib${LIB}.a
1624614Sccheung
1634614Sccheung.if !defined(NOPROFILE)
1640SdukePOBJS+=	${OBJS:.o=.po}
1650Sdukelib${LIB}_p.a:: ${POBJS}
1660Sduke	@${ECHO} building profiled ${LIB} library
1670Sduke	@rm -f lib${LIB}_p.a
1680Sduke	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
1690Sduke	${RANLIB} lib${LIB}_p.a
1700Sduke.endif
1710Sduke
1720Sduke.if defined(DESTDIR)
1730SdukeLDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR}
1740Sduke.endif
1750Sduke
1760Sduke.if !defined(NOPIC)
1770SdukeSOBJS+= ${OBJS:.o=.so}
1780Sduke
1790Sduke.if ${BINFORMAT} == aout
1800Sdukelib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
1810Sduke	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
1820Sduke	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
1830Sduke	@${LDDESTDIRENV} ${CC} -shared -Wl,-x -Wl,-assert -Wl,pure-text \
1840Sduke	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
1850Sduke	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
1860Sduke.else
1870Sdukelib${LIB}.so.${SHLIB_MAJOR}: ${SOBJS}
1880Sduke	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}\)
1890Sduke	@rm -f lib${LIB}.so.${SHLIB_MAJOR}
1900Sduke	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
1910Sduke	    -o lib${LIB}.so.${SHLIB_MAJOR} -Wl,-soname,${SONAME} \
1920Sduke	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
1930Sduke.endif
1940Sduke
1950Sdukelib${LIB}_pic.a:: ${SOBJS}
1960Sduke	@${ECHO} building special pic ${LIB} library
1970Sduke	@rm -f lib${LIB}_pic.a
1980Sduke	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
1990Sduke	${RANLIB} lib${LIB}_pic.a
2000Sduke.endif
2010Sduke
2020Sdukellib-l${LIB}.ln: ${SRCS}
2030Sduke	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
2040Sduke
2050Sduke.if !target(clean)
2060Sdukeclean:	_SUBDIR
2070Sduke	rm -f a.out ${OBJS} ${CLEANFILES}
2080Sduke	rm -f lib${LIB}.a # llib-l${LIB}.ln
2090Sduke	rm -f ${POBJS} lib${LIB}_p.a
2100Sduke.if defined(SOBJS) && !empty(SOBJS)
2110Sduke	rm -f ${SOBJS}
2120Sduke.endif
2130Sduke	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
2140Sduke.if defined(CLEANDIRS) && !empty(CLEANDIRS)
2150Sduke	rm -rf ${CLEANDIRS}
2160Sduke.endif
2170Sduke.endif
2180Sduke
2190Sduke_EXTRADEPEND:
2200Sduke	@TMP=_depend$$$$; \
2210Sduke	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < ${DEPENDFILE} \
2220Sduke	    > $$TMP; \
2230Sduke	mv $$TMP ${DEPENDFILE}
2240Sduke.if !defined(NOEXTRADEPEND) && !defined(NOPIC)
2250Sduke.if ${BINFORMAT} == aout
2260Sduke	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
2270Sduke	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
2280Sduke	    >> ${DEPENDFILE}
2290Sduke.else
2300Sduke.if defined(DPADD) && !empty(DPADD)
2310Sduke	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
2320Sduke	    ${DPADD} >> ${DEPENDFILE}
2330Sduke.endif
2340Sduke.endif
2350Sduke.endif
2360Sduke
2370Sduke.if !target(install)
2380Sduke.if !target(beforeinstall)
2390Sdukebeforeinstall:
2400Sduke.endif
2410Sduke
2420Sduke.if defined(PRECIOUSLIB)
2430SdukeSHLINSTALLFLAGS+= -fschg
2440Sduke.endif
2450Sduke
2460Sdukerealinstall: beforeinstall
2470Sduke.if !defined(INTERNALLIB)
2480Sduke	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2490Sduke	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
2500Sduke.if !defined(NOPROFILE)
2510Sduke	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2520Sduke	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
2530Sduke.endif
2540Sduke.endif
2550Sduke.if !defined(NOPIC)
2560Sduke.if ${BINFORMAT} == aout
2570Sduke.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
2580Sduke	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2590Sduke	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
2600Sduke	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
2610Sduke	    ${DESTDIR}${SHLIBDIR}
2620Sduke.endif
2630Sduke.else
2640Sduke.if defined(SHLIB_MAJOR)
2650Sduke	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2660Sduke	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
2670Sduke	    lib${LIB}.so.${SHLIB_MAJOR} \
2680Sduke	    ${DESTDIR}${SHLIBDIR}
2690Sduke	ln ${LN_FLAGS} -sf lib${LIB}.so.${SHLIB_MAJOR} \
2700Sduke	    ${DESTDIR}${SHLIBDIR}/lib${LIB}.so
2710Sduke.endif
2720Sduke.endif
2730Sduke.if defined(INSTALL_PIC_ARCHIVE)
2740Sduke	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
2750Sduke	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
2760Sduke.endif
2770Sduke.endif
2780Sduke.if defined(LINKS) && !empty(LINKS)
2790Sduke	@set ${LINKS}; \
2800Sduke	while test $$# -ge 2; do \
2810Sduke		l=${DESTDIR}$$1; \
2820Sduke		shift; \
2830Sduke		t=${DESTDIR}$$1; \
2840Sduke		shift; \
2850Sduke		${ECHO} $$t -\> $$l; \
2860Sduke		rm -f $$t; \
2870Sduke		ln ${LN_FLAGS} $$l $$t; \
2880Sduke	done; true
2890Sduke.endif
2900Sduke
2910Sdukeinstall: afterinstall _SUBDIR
2920Sduke.if !defined(NOMAN)
2930Sdukeafterinstall: realinstall maninstall
2940Sduke.else
2950Sdukeafterinstall: realinstall
2960Sduke.endif
2970Sduke.endif
2988638Sbpittore
2998638Sbpittore.if !target(regress)
3000Sdukeregress:
3010Sduke.endif
3020Sduke
3038638SbpittoreDISTRIBUTION?=	bin
3048638Sbpittore.if !target(distribute)
3058638Sbpittoredistribute:	_SUBDIR
3068638Sbpittore.for dist in ${DISTRIBUTION}
3078638Sbpittore	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
3088638Sbpittore.endfor
3090Sduke.endif
3100Sduke
3110Sduke.if !target(lint)
3120Sdukelint:
3130Sduke.endif
3140Sduke
3150Sduke.if !defined(NOMAN)
3160Sduke.include <bsd.man.mk>
3170Sduke.elif !target(maninstall)
3180Sdukemaninstall:
3190Sdukeall-man:
3200Sduke.endif
3210Sduke
3220Sduke.include <bsd.dep.mk>
3230Sduke
3240Sduke.if !exists(${DEPENDFILE})
3250Sduke${OBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
3260Sduke.endif
327
328.include <bsd.obj.mk>
329