bsd.lib.mk revision 34092
118334Speter#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
290075Sobrien#	$Id: bsd.lib.mk,v 1.67 1998/02/20 15:58:59 bde Exp $
3132718Skan#
418334Speter
590075Sobrien.if exists(${.CURDIR}/../Makefile.inc)
618334Speter.include "${.CURDIR}/../Makefile.inc"
790075Sobrien.endif
890075Sobrien
990075Sobrien# Default executable format
1090075Sobrien.if ${MACHINE} == "alpha"
1118334SpeterBINFORMAT?=	elf
1290075Sobrien.else
1390075SobrienBINFORMAT?=	aout
1490075Sobrien.endif
1590075Sobrien
1618334Speter.if exists(${.CURDIR}/shlib_version)
1718334SpeterSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
1890075Sobrien.if ${BINFORMAT} == aout
1990075SobrienSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
2090075Sobrien.endif
2118334Speter.endif
2218334Speter
2350397Sobrien.if !defined(NOPIC) && ${BINFORMAT} == elf
2450397SobrienSONAME?=	lib${LIB}.so.${SHLIB_MAJOR}
25132718Skan.endif
26132718Skan
2718334Speter.if defined(DESTDIR)
2818334SpeterCFLAGS+= -I${DESTDIR}/usr/include
2990075SobrienCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
3018334Speter.endif
3118334Speter
3290075Sobrien.if defined(DEBUG_FLAGS)
3318334SpeterCFLAGS+= ${DEBUG_FLAGS}
3418334Speter.endif
3518334Speter
3618334Speter.if !defined(DEBUG_FLAGS)
3790075SobrienSTRIP?=	-s
3850397Sobrien.endif
3950397Sobrien
4050397Sobrien.if ${BINFORMAT} != aout || make(checkdpadd)
4190075Sobrien.include <bsd.libnames.mk>
42117395Skan.endif
43132718Skan
44132718Skan.MAIN: all
45132718Skan
4618334Speter# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
4718334Speter# .so used for PIC object files
4818334Speter.SUFFIXES:
4918334Speter.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
5018334Speter
5118334Speter.c.o:
5218334Speter	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
5356385Sobrien	@${LD} -O ${.TARGET} -x -r ${.TARGET}
5456385Sobrien
5556385Sobrien.c.po:
5656385Sobrien	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
5718334Speter	@${LD} -O ${.TARGET} -X -r ${.TARGET}
5856385Sobrien
5956385Sobrien.c.so:
6056385Sobrien	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6156385Sobrien	@${LD} -O ${.TARGET} -x -r ${.TARGET}
6218334Speter
6390075Sobrien.cc.o .C.o .cxx.o:
6490075Sobrien	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6518334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
6618334Speter
6718334Speter.cc.po .C.po .cxx.po:
6818334Speter	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
6918334Speter	@${LD} -O ${.TARGET} -X -r ${.TARGET}
7018334Speter
7118334Speter.cc.so .C.so .cxx.so:
7218334Speter	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
7318334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
7418334Speter
7518334Speter.f.o:
7690075Sobrien	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
7718334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
7818334Speter
7918334Speter.f.po:
8018334Speter	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
8118334Speter	@${LD} -O ${.TARGET} -X -r ${.TARGET}
8218334Speter
8318334Speter.f.so:
8418334Speter	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
8518334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
8618334Speter
8718334Speter.s.o:
8818334Speter	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
8990075Sobrien	    ${.IMPSRC} -o ${.TARGET}
9090075Sobrien	@${LD} -O ${.TARGET} -x -r ${.TARGET}
9118334Speter
9218334Speter.s.po:
9390075Sobrien	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
9490075Sobrien	    ${.IMPSRC} -o ${.TARGET}
9518334Speter	@${LD} -O ${.TARGET} -X -r ${.TARGET}
9618334Speter
9718334Speter.s.so:
9818334Speter	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
9918334Speter	    ${.IMPSRC} -o ${.TARGET}
10018334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
10190075Sobrien
10218334Speter.S.o:
10318334Speter	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
10418334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
10518334Speter
10618334Speter.S.po:
10718334Speter	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
10890075Sobrien	@${LD} -O ${.TARGET} -X -r ${.TARGET}
10918334Speter
11018334Speter.S.so:
11118334Speter	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
11290075Sobrien	@${LD} -O ${.TARGET} -x -r ${.TARGET}
11318334Speter
11418334Speter.m.o:
11518334Speter	${CC} ${CFLAGS} -fgnu-runtime -c ${.IMPSRC} -o ${.TARGET}
11618334Speter	@${LD} -O ${.TARGET} -x -r ${.TARGET}
11718334Speter
11818334Speter.m.po:
11918334Speter	${CC} ${CFLAGS} -fgnu-runtime -pg -c ${.IMPSRC} -o ${.TARGET}
12090075Sobrien	@${LD} -O ${.TARGET} -X -r ${.TARGET}
12190075Sobrien
12218334Speter.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
12318334Speter.if !defined(NOPROFILE) && !defined(INTERNALLIB)
12418334Speter_LIBS=lib${LIB}.a lib${LIB}_p.a
12518334Speter.else
12618334Speter_LIBS=lib${LIB}.a
12718334Speter.endif
12818334Speter.endif
12918334Speter
13018334Speter.if !defined(NOPIC)
13118334Speter.if ${BINFORMAT} == aout
13218334Speter.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
13318334Speter_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
13418334Speter.endif
13518334Speter.else
13618334Speter.if defined(SHLIB_MAJOR)
13718334Speter_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}
13818334Speter.endif
13918334Speter.endif
14018334Speter.if defined(INSTALL_PIC_ARCHIVE)
14190075Sobrien_LIBS+=lib${LIB}_pic.a
14218334Speter.endif
14318334Speter.endif
14418334Speter
14518334Speter.if !defined(PICFLAG)
14618334SpeterPICFLAG=-fpic
14718334Speter.endif
14818334Speter
14918334Speterall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
15018334Speter
15118334SpeterOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
15218334Speter
15318334Speterlib${LIB}.a:: ${OBJS}
15418334Speter	@${ECHO} building standard ${LIB} library
15518334Speter	@rm -f lib${LIB}.a
15618334Speter	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q` ${ARADD}
15718334Speter	${RANLIB} lib${LIB}.a
15818334Speter
15918334Speter.if !defined(NOPROFILE)
16018334SpeterPOBJS+=	${OBJS:.o=.po}
16118334Speterlib${LIB}_p.a:: ${POBJS}
16218334Speter	@${ECHO} building profiled ${LIB} library
16318334Speter	@rm -f lib${LIB}_p.a
16418334Speter	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
16518334Speter	${RANLIB} lib${LIB}_p.a
16618334Speter.endif
16718334Speter
16818334Speter.if defined(DESTDIR)
16918334SpeterLDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib
17018334Speter.endif
17118334Speter
17218334Speter.if !defined(NOPIC)
17318334SpeterSOBJS+= ${OBJS:.o=.so}
17418334Speter
17518334Speter.if ${BINFORMAT} == aout
17618334Speterlib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
17718334Speter	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
17818334Speter	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
17918334Speter	@${LDDESTDIRENV} ${CC} -shared -Wl,-x -Wl,-assert -Wl,pure-text \
18018334Speter	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
18118334Speter	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
18218334Speter.else
18318334Speterlib${LIB}.so.${SHLIB_MAJOR}: ${SOBJS}
18418334Speter	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}\)
18518334Speter	@rm -f lib${LIB}.so.${SHLIB_MAJOR}
18618334Speter	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
18718334Speter	    -o lib${LIB}.so.${SHLIB_MAJOR} -Wl,-soname,${SONAME} \
18818334Speter	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
18918334Speter.endif
19018334Speter
19118334Speterlib${LIB}_pic.a:: ${SOBJS}
19218334Speter	@${ECHO} building special pic ${LIB} library
19318334Speter	@rm -f lib${LIB}_pic.a
19418334Speter	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
19518334Speter	${RANLIB} lib${LIB}_pic.a
19618334Speter.endif
19718334Speter
19818334Speterllib-l${LIB}.ln: ${SRCS}
19918334Speter	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
20018334Speter
20118334Speter.if !target(clean)
20218334Speterclean:	_SUBDIR
20390075Sobrien	rm -f a.out ${OBJS} ${CLEANFILES}
20418334Speter	rm -f lib${LIB}.a # llib-l${LIB}.ln
20518334Speter	rm -f ${POBJS} lib${LIB}_p.a
20618334Speter.if defined(SOBJS) && !empty(SOBJS)
20718334Speter	rm -f ${SOBJS}
20850397Sobrien.endif
20950397Sobrien	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
21050397Sobrien.if defined(CLEANDIRS) && !empty(CLEANDIRS)
21150397Sobrien	rm -rf ${CLEANDIRS}
21250397Sobrien.endif
21390075Sobrien.endif
21490075Sobrien
21518334Speter.if defined(SRCS)
21618334Speter_EXTRADEPEND::
21718334Speter	@TMP=_depend$$$$; \
21818334Speter	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < ${DEPENDFILE} \
21918334Speter	    > $$TMP; \
22018334Speter	mv $$TMP ${DEPENDFILE}
22118334Speter.endif
22218334Speter.if !defined(NOEXTRADEPEND)
22390075Sobrien_EXTRADEPEND::
22418334Speter.if ${BINFORMAT} == aout
22590075Sobrien	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
22690075Sobrien	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
22718334Speter	    >> ${DEPENDFILE}
22890075Sobrien.else
22918334Speter.if defined(DPADD) && !empty(DPADD)
23090075Sobrien	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
23190075Sobrien	    ${DPADD} >> ${DEPENDFILE}
23290075Sobrien.endif
23390075Sobrien.endif
23490075Sobrien.endif
23518334Speter
23690075Sobrien.if !target(install)
23790075Sobrien.if !target(beforeinstall)
23890075Sobrienbeforeinstall:
23990075Sobrien.endif
24090075Sobrien
24190075Sobrien.if defined(PRECIOUSLIB)
24290075SobrienSHLINSTALLFLAGS+= -fschg
24390075Sobrien.endif
24490075Sobrien
24590075Sobrienrealinstall: beforeinstall
24690075Sobrien.if !defined(INTERNALLIB)
24718334Speter	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
24890075Sobrien	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
24990075Sobrien.if !defined(NOPROFILE)
25090075Sobrien	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
25190075Sobrien	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
25290075Sobrien.endif
25390075Sobrien.endif
25490075Sobrien.if !defined(NOPIC)
255132718Skan.if ${BINFORMAT} == aout
256132718Skan.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
257132718Skan	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
258132718Skan	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
25990075Sobrien	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
26018334Speter	    ${DESTDIR}${SHLIBDIR}
26190075Sobrien.endif
26290075Sobrien.else
26318334Speter.if defined(SHLIB_MAJOR)
26418334Speter	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
26518334Speter	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
26618334Speter	    lib${LIB}.so.${SHLIB_MAJOR} \
26718334Speter	    ${DESTDIR}${SHLIBDIR}
26818334Speter	ln ${LN_FLAGS} -sf lib${LIB}.so.${SHLIB_MAJOR} \
26918334Speter	    ${DESTDIR}${SHLIBDIR}/lib${LIB}.so
27018334Speter.endif
27118334Speter.endif
27218334Speter.if defined(INSTALL_PIC_ARCHIVE)
27318334Speter	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
27418334Speter	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
27518334Speter.endif
27618334Speter.endif
27718334Speter.if defined(LINKS) && !empty(LINKS)
27818334Speter	@set ${LINKS}; \
27918334Speter	while test $$# -ge 2; do \
280132718Skan		l=${DESTDIR}$$1; \
28118334Speter		shift; \
28218334Speter		t=${DESTDIR}$$1; \
28318334Speter		shift; \
28418334Speter		${ECHO} $$t -\> $$l; \
28518334Speter		rm -f $$t; \
28650397Sobrien		ln ${LN_FLAGS} $$l $$t; \
28750397Sobrien	done; true
28818334Speter.endif
28918334Speter
29018334Speterinstall: afterinstall _SUBDIR
29118334Speter.if !defined(NOMAN)
29290075Sobrienafterinstall: realinstall maninstall
29318334Speter.else
29490075Sobrienafterinstall: realinstall
29590075Sobrien.endif
29690075Sobrien.endif
29790075Sobrien
29890075SobrienDISTRIBUTION?=	bin
29918334Speter.if !target(distribute)
30090075Sobriendistribute:	_SUBDIR
30190075Sobrien.for dist in ${DISTRIBUTION}
30218334Speter	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
30390075Sobrien.endfor
30490075Sobrien.endif
30590075Sobrien
30690075Sobrien.if !target(lint)
30790075Sobrienlint:
30890075Sobrien.endif
30990075Sobrien
31090075Sobrien.if !defined(NOMAN)
31190075Sobrien.include <bsd.man.mk>
31290075Sobrien.elif !target(maninstall)
31390075Sobrienmaninstall:
31490075Sobrienall-man:
31590075Sobrien.endif
31690075Sobrien
31790075Sobrien.include <bsd.dep.mk>
31890075Sobrien
31990075Sobrien.if !exists(${DEPENDFILE})
32090075Sobrien${OBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
32152284Sobrien.endif
32252284Sobrien
32352284Sobrien.include <bsd.obj.mk>
32452284Sobrien