1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $Id: bsd.lib.mk,v 1.3 1994/08/08 15:45:55 wollman Exp $ 3# 4 5.if exists(${.CURDIR}/../Makefile.inc) 6.include "${.CURDIR}/../Makefile.inc" 7.endif 8 9.if exists(${.CURDIR}/shlib_version) 10SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major 11SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor 12.endif 13 14.if defined(DESTDIR) 15CFLAGS+= -I${DESTDIR}/usr/include 16CXXINCLUDES+= -I${DESTDIR}/usr/include/${CXX} 17.endif 18INSTALL?= install 19LIBDIR?= /usr/lib 20LINTLIBDIR?= /usr/libdata/lint 21LIBGRP?= bin 22LIBOWN?= bin 23LIBMODE?= 444 24 25STRIP?= -s 26 27BINGRP?= bin 28BINOWN?= bin 29BINMODE?= 555 30 31.MAIN: all 32 33# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 34# .so used for PIC object files 35.SUFFIXES: 36.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l 37 38.c.o: 39 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 40 @${LD} -x -r ${.TARGET} 41 @mv a.out ${.TARGET} 42 43.c.po: 44 ${CC} -p ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 45 @${LD} -X -r ${.TARGET} 46 @mv a.out ${.TARGET} 47 48.c.so: 49 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 50 51.cc.o .cxx.o .C.o: 52 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 53 @${LD} -x -r ${.TARGET} 54 @mv a.out ${.TARGET} 55 56.cc.po .C.po .cxx.o: 57 ${CXX} -p ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 58 @${LD} -X -r ${.TARGET} 59 @mv a.out ${.TARGET} 60 61.cc.so .C.so: 62 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 63 64.f.o: 65 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 66 @${LD} -x -r ${.TARGET} 67 @mv a.out ${.TARGET} 68 69.f.po: 70 ${FC} -p ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 71 @${LD} -X -r ${.TARGET} 72 @mv a.out ${.TARGET} 73 74.f.so: 75 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 76 77.s.o: 78 ${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 79 ${AS} -o ${.TARGET} 80 @${LD} -x -r ${.TARGET} 81 @mv a.out ${.TARGET} 82 83.s.po: 84 ${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 85 ${AS} -o ${.TARGET} 86 @${LD} -X -r ${.TARGET} 87 @mv a.out ${.TARGET} 88 89.s.so: 90 ${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 91 ${AS} -k -o ${.TARGET} 92 93.S.o: 94 ${CPP} -E ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 95 ${AS} -o ${.TARGET} 96 97.S.po: 98 ${CPP} -E -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 99 ${AS} -o ${.TARGET} 100 101.S.so: 102 ${CPP} -E -DPIC ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} | \ 103 ${AS} -k -o ${.TARGET} 104 105.m.po: 106 ${CC} ${CFLAGS} -p -c ${.IMPSRC} -o ${.TARGET} 107 @${LD} -X -r ${.TARGET} 108 @mv a.out ${.TARGET} 109 110.m.o: 111 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 112 @${LD} -X -r ${.TARGET} 113 @mv a.out ${.TARGET} 114 115.if !defined(NOPROFILE) 116_LIBS=lib${LIB}.a lib${LIB}_p.a 117.else 118_LIBS=lib${LIB}.a 119.endif 120 121.if !defined(NOPIC) 122.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 123_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 124.endif 125.if defined(INSTALL_PIC_ARCHIVE) 126_LIBS+=lib${LIB}_pic.a 127.endif 128.endif 129 130.if !defined(PICFLAG) 131PICFLAG=-fpic 132.endif 133 134all: ${_LIBS} # llib-l${LIB}.ln 135 136OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 137 138lib${LIB}.a:: ${OBJS} 139 @echo building standard ${LIB} library 140 @rm -f lib${LIB}.a 141 @${AR} cTq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD} 142 ${RANLIB} lib${LIB}.a 143 144POBJS+= ${OBJS:.o=.po} 145lib${LIB}_p.a:: ${POBJS} 146 @echo building profiled ${LIB} library 147 @rm -f lib${LIB}_p.a 148 @${AR} cTq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD} 149 ${RANLIB} lib${LIB}_p.a 150 151.if defined(DESTDIR) 152LDDESTDIR?= -L${DESTDIR}/usr/lib 153.endif 154 155.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir) 156SOBJS+= ${DESTDIR}/usr/lib/c++rt0.o 157.endif 158 159SOBJS+= ${OBJS:.o=.so} 160lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS} 161 @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) 162 @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 163 @$(LD) -Bshareable \ 164 -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 165 ${SOBJS} ${LDDESTDIR} ${LDADD} 166 167lib${LIB}_pic.a:: ${SOBJS} 168 @echo building special pic ${LIB} library 169 @rm -f lib${LIB}_pic.a 170 @${AR} cTq lib${LIB}_pic.a ${SOBJS} ${ARADD} 171 ${RANLIB} lib${LIB}_pic.a 172 173llib-l${LIB}.ln: ${SRCS} 174 ${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c} 175 176.if !target(clean) 177clean: 178 rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS} 179 rm -f lib${LIB}.a llib-l${LIB}.ln 180 rm -f ${POBJS} profiled/*.o lib${LIB}_p.a 181 rm -f ${SOBJS} shared/*.o 182 rm -f lib${LIB}.so.*.* lib${LIB}_pic.a 183.endif 184 185.if !target(cleandir) 186cleandir: 187 rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS} 188 rm -f lib${LIB}.a llib-l${LIB}.ln 189 rm -f ${.CURDIR}/tags .depend 190 rm -f ${POBJS} profiled/*.o lib${LIB}_p.a 191 rm -f ${SOBJS} shared/*.o 192 rm -f lib${LIB}.so.*.* lib${LIB}_pic.a 193 cd ${.CURDIR}; rm -rf obj; 194.endif 195 196.if defined(SRCS) 197afterdepend: 198 @(TMP=/tmp/_depend$$$$; \ 199 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \ 200 mv $$TMP .depend) 201.endif 202 203.if !target(install) 204.if !target(beforeinstall) 205beforeinstall: 206.endif 207 208realinstall: beforeinstall 209 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 210 ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 211 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}.a 212.if !defined(NOPROFILE) 213 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 214 ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 215 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 216.endif 217.if !defined(NOPIC) 218.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 219 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 220 ${INSTALLFLAGS} lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 221 ${DESTDIR}${LIBDIR} 222.endif 223.if defined(INSTALL_PIC_ARCHIVE) 224 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 225 ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 226 ${RANLIB} -t ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 227.endif 228.endif 229.if defined(LINKS) && !empty(LINKS) 230 @set ${LINKS}; \ 231 while test $$# -ge 2; do \ 232 l=${DESTDIR}$$1; \ 233 shift; \ 234 t=${DESTDIR}$$1; \ 235 shift; \ 236 echo $$t -\> $$l; \ 237 rm -f $$t; \ 238 ln $$l $$t; \ 239 done; true 240.endif 241 242install: afterinstall 243.if !defined(NOMAN) 244afterinstall: realinstall maninstall 245.else 246afterinstall: realinstall 247.endif 248.endif 249 250.if !target(lint) 251lint: 252.endif 253 254.if !target(tags) 255tags: ${SRCS} 256 -cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \ 257 sed "s;\${.CURDIR}/;;" > tags 258.endif 259 260.if !defined(NOMAN) 261.include <bsd.man.mk> 262.elif !target(maninstall) 263maninstall: 264.endif 265 266.if !target(obj) 267.if defined(NOOBJ) 268obj: 269.else 270obj: 271 @cd ${.CURDIR}; rm -rf obj; \ 272 here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \ 273 echo "$$here -> $$dest"; ln -s $$dest obj; \ 274 if test -d /usr/obj -a ! -d $$dest; then \ 275 mkdir -p $$dest; \ 276 else \ 277 true; \ 278 fi; 279.endif 280.endif 281 282.include <bsd.dep.mk> 283