1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $Id: bsd.lib.mk,v 1.21 1995/01/30 07:22:02 jkh 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 155_LIBSUBDIR: .USE 156.if defined(SUBDIR) && !empty(SUBDIR) 157 @for entry in ${SUBDIR}; do \ 158 (${ECHODIR} "===> ${DIRPRFX}$$entry"; \ 159 if test -d ${.CURDIR}/$${entry}.${MACHINE}; then \ 160 cd ${.CURDIR}/$${entry}.${MACHINE}; \ 161 else \ 162 cd ${.CURDIR}/$${entry}; \ 163 fi; \ 164 ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} DIRPRFX=${DIRPRFX}$$entry/); \ 165 done 166.endif 167 168all: ${_LIBS} _LIBSUBDIR # llib-l${LIB}.ln 169 170OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 171 172lib${LIB}.a:: ${OBJS} 173 @${ECHO} building standard ${LIB} library 174 @rm -f lib${LIB}.a 175 @${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort` ${ARADD} 176 ${RANLIB} lib${LIB}.a 177 178.if !defined(NOPROFILE) 179POBJS+= ${OBJS:.o=.po} 180lib${LIB}_p.a:: ${POBJS} 181 @${ECHO} building profiled ${LIB} library 182 @rm -f lib${LIB}_p.a 183 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort` ${ARADD} 184 ${RANLIB} lib${LIB}_p.a 185.endif 186 187.if defined(DESTDIR) 188LDDESTDIR?= -L${DESTDIR}/usr/lib 189.endif 190 191.if !defined(NOPIC) 192.if defined(CPLUSPLUSLIB) && !make(clean) && !make(cleandir) 193SOBJS+= ${DESTDIR}/usr/lib/c++rt0.o 194.endif 195 196SOBJS+= ${OBJS:.o=.so} 197lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS} 198 @${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) 199 @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 200 @${LD} -Bshareable \ 201 -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 202 ${SOBJS} ${LDDESTDIR} ${LDADD} 203 204lib${LIB}_pic.a:: ${SOBJS} 205 @${ECHO} building special pic ${LIB} library 206 @rm -f lib${LIB}_pic.a 207 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD} 208 ${RANLIB} lib${LIB}_pic.a 209.endif 210 211llib-l${LIB}.ln: ${SRCS} 212 ${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c} 213 214.if !target(clean) 215clean: _LIBSUBDIR 216 rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS} 217 rm -f lib${LIB}.a llib-l${LIB}.ln 218 rm -f ${POBJS} profiled/*.o lib${LIB}_p.a 219 rm -f ${SOBJS} shared/*.o 220 rm -f lib${LIB}.so.*.* lib${LIB}_pic.a 221.endif 222 223.if !target(cleandir) 224cleandir: _LIBSUBDIR 225 rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS} 226 rm -f lib${LIB}.a llib-l${LIB}.ln 227 rm -f ${.CURDIR}/tags .depend 228 rm -f ${POBJS} profiled/*.o lib${LIB}_p.a 229 rm -f ${SOBJS} shared/*.o 230 rm -f lib${LIB}.so.*.* lib${LIB}_pic.a 231 cd ${.CURDIR}; rm -rf obj; 232.endif 233 234.if defined(SRCS) 235afterdepend: 236 @(TMP=/tmp/_depend$$$$; \ 237 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < .depend > $$TMP; \ 238 mv $$TMP .depend) 239.endif 240 241.if !target(install) 242.if !target(beforeinstall) 243beforeinstall: 244.endif 245 246.if defined(PRECIOUSLIB) 247SHLINSTALLFLAGS+= -fschg 248.endif 249 250realinstall: beforeinstall 251.if !defined(INTERNALLIB) 252 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 253 ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 254 ${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}.a 255.if !defined(NOPROFILE) 256 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 257 ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 258 ${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a 259.endif 260.endif 261.if !defined(NOPIC) 262.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 263 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 264 ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \ 265 lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 266 ${DESTDIR}${SHLIBDIR} 267.endif 268.if defined(INSTALL_PIC_ARCHIVE) 269 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 270 ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 271 ${RANTOUCH} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a 272.endif 273.endif 274.if defined(LINKS) && !empty(LINKS) 275 @set ${LINKS}; \ 276 while test $$# -ge 2; do \ 277 l=${DESTDIR}$$1; \ 278 shift; \ 279 t=${DESTDIR}$$1; \ 280 shift; \ 281 ${ECHO} $$t -\> $$l; \ 282 rm -f $$t; \ 283 ln ${LN_FLAGS} $$l $$t; \ 284 done; true 285.endif 286 287install: afterinstall _LIBSUBDIR 288.if !defined(NOMAN) 289afterinstall: realinstall maninstall 290.else 291afterinstall: realinstall 292.endif 293.endif 294 295DISTRIBUTION?= bin 296.if !target(distribute) 297distribute: _LIBSUBDIR 298 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${RELEASEDIR}/${DISTRIBUTION} SHARED=copies 299.endif 300 301.if !target(lint) 302lint: 303.endif 304 305.if !target(tags) 306tags: ${SRCS} 307 -cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:M*.c} | \ 308 sed "s;\${.CURDIR}/;;" > tags 309.endif 310 311.if !defined(NOMAN) 312.include <bsd.man.mk> 313.elif !target(maninstall) 314maninstall: 315.endif 316 317.if !target(obj) 318.if defined(NOOBJ) 319obj: _LIBSUBDIR 320.else 321obj: _LIBSUBDIR 322 @cd ${.CURDIR}; rm -rf obj; \ 323 here=`pwd`; dest=/usr/obj`echo $$here | sed 's,^/usr/src,,'`; \ 324 ${ECHO} "$$here -> $$dest"; ln -s $$dest obj; \ 325 if test -d /usr/obj -a ! -d $$dest; then \ 326 mkdir -p $$dest; \ 327 else \ 328 true; \ 329 fi; 330.endif 331.endif 332 333_DEPSUBDIR= _LIBSUBDIR 334.include <bsd.dep.mk> 335