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