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