bsd.lib.mk revision 34528
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $Id: bsd.lib.mk,v 1.69 1998/03/07 13:13:41 bde Exp $ 3# 4 5.if exists(${.CURDIR}/../Makefile.inc) 6.include "${.CURDIR}/../Makefile.inc" 7.endif 8 9# Default executable format 10.if ${MACHINE} == "alpha" 11BINFORMAT?= elf 12.else 13BINFORMAT?= aout 14.endif 15 16.if exists(${.CURDIR}/shlib_version) 17SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major 18.if ${BINFORMAT} == aout 19SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor 20.endif 21.endif 22 23.if !defined(NOPIC) && ${BINFORMAT} == elf 24SONAME?= lib${LIB}.so.${SHLIB_MAJOR} 25.endif 26 27.if defined(DESTDIR) 28CFLAGS+= -I${DESTDIR}/usr/include 29CXXINCLUDES+= -I${DESTDIR}/usr/include/g++ 30.endif 31 32.if defined(DEBUG_FLAGS) 33CFLAGS+= ${DEBUG_FLAGS} 34.endif 35 36.if !defined(DEBUG_FLAGS) 37STRIP?= -s 38.endif 39 40.if ${BINFORMAT} != aout || make(checkdpadd) 41.include <bsd.libnames.mk> 42.endif 43 44.MAIN: all 45 46# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 47# .so used for PIC object files 48.SUFFIXES: 49.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l 50 51.c.o: 52 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 53 @${LD} -O ${.TARGET} -x -r ${.TARGET} 54 55.c.po: 56 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 57 @${LD} -O ${.TARGET} -X -r ${.TARGET} 58 59.c.so: 60 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 61 @${LD} -O ${.TARGET} -x -r ${.TARGET} 62 63.cc.o .C.o .cxx.o: 64 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 65 @${LD} -O ${.TARGET} -x -r ${.TARGET} 66 67.cc.po .C.po .cxx.po: 68 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 69 @${LD} -O ${.TARGET} -X -r ${.TARGET} 70 71.cc.so .C.so .cxx.so: 72 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 73 @${LD} -O ${.TARGET} -x -r ${.TARGET} 74 75.f.o: 76 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 77 @${LD} -O ${.TARGET} -x -r ${.TARGET} 78 79.f.po: 80 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 81 @${LD} -O ${.TARGET} -X -r ${.TARGET} 82 83.f.so: 84 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 85 @${LD} -O ${.TARGET} -x -r ${.TARGET} 86 87.s.o: 88 ${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \ 89 ${.IMPSRC} -o ${.TARGET} 90 @${LD} -O ${.TARGET} -x -r ${.TARGET} 91 92.s.po: 93 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \ 94 ${.IMPSRC} -o ${.TARGET} 95 @${LD} -O ${.TARGET} -X -r ${.TARGET} 96 97.s.so: 98 ${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \ 99 ${.IMPSRC} -o ${.TARGET} 100 @${LD} -O ${.TARGET} -x -r ${.TARGET} 101 102.S.o: 103 ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 104 @${LD} -O ${.TARGET} -x -r ${.TARGET} 105 106.S.po: 107 ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 108 @${LD} -O ${.TARGET} -X -r ${.TARGET} 109 110.S.so: 111 ${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 112 @${LD} -O ${.TARGET} -x -r ${.TARGET} 113 114.m.o: 115 ${CC} ${CFLAGS} -fgnu-runtime -c ${.IMPSRC} -o ${.TARGET} 116 @${LD} -O ${.TARGET} -x -r ${.TARGET} 117 118.m.po: 119 ${CC} ${CFLAGS} -fgnu-runtime -pg -c ${.IMPSRC} -o ${.TARGET} 120 @${LD} -O ${.TARGET} -X -r ${.TARGET} 121 122.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB) 123.if !defined(NOPROFILE) && !defined(INTERNALLIB) 124_LIBS=lib${LIB}.a lib${LIB}_p.a 125.else 126_LIBS=lib${LIB}.a 127.endif 128.endif 129 130.if !defined(NOPIC) 131.if ${BINFORMAT} == aout 132.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 133_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 134.endif 135.else 136.if defined(SHLIB_MAJOR) 137_LIBS+=lib${LIB}.so.${SHLIB_MAJOR} 138.endif 139.endif 140.if defined(INSTALL_PIC_ARCHIVE) 141_LIBS+=lib${LIB}_pic.a 142.endif 143.endif 144 145.if !defined(PICFLAG) 146PICFLAG=-fpic 147.endif 148 149all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln 150 151OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 152 153lib${LIB}.a:: ${OBJS} 154 @${ECHO} building standard ${LIB} library 155 @rm -f lib${LIB}.a 156 @${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q` ${ARADD} 157 ${RANLIB} lib${LIB}.a 158 159.if !defined(NOPROFILE) 160POBJS+= ${OBJS:.o=.po} 161lib${LIB}_p.a:: ${POBJS} 162 @${ECHO} building profiled ${LIB} library 163 @rm -f lib${LIB}_p.a 164 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD} 165 ${RANLIB} lib${LIB}_p.a 166.endif 167 168.if defined(DESTDIR) 169LDDESTDIRENV?= LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib 170.endif 171 172.if !defined(NOPIC) 173SOBJS+= ${OBJS:.o=.so} 174 175.if ${BINFORMAT} == aout 176lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS} 177 @${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) 178 @rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 179 @${LDDESTDIRENV} ${CC} -shared -Wl,-x -Wl,-assert -Wl,pure-text \ 180 -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 181 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 182.else 183lib${LIB}.so.${SHLIB_MAJOR}: ${SOBJS} 184 @${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}\) 185 @rm -f lib${LIB}.so.${SHLIB_MAJOR} 186 @${LDDESTDIRENV} ${CC} -shared -Wl,-x \ 187 -o lib${LIB}.so.${SHLIB_MAJOR} -Wl,-soname,${SONAME} \ 188 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 189.endif 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: _SUBDIR 203 rm -f a.out ${OBJS} ${CLEANFILES} 204 rm -f lib${LIB}.a # llib-l${LIB}.ln 205 rm -f ${POBJS} lib${LIB}_p.a 206.if defined(SOBJS) && !empty(SOBJS) 207 rm -f ${SOBJS} 208.endif 209 rm -f lib${LIB}.so.*.* lib${LIB}_pic.a 210.if defined(CLEANDIRS) && !empty(CLEANDIRS) 211 rm -rf ${CLEANDIRS} 212.endif 213.endif 214 215_EXTRADEPEND: 216 @TMP=_depend$$$$; \ 217 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < ${DEPENDFILE} \ 218 > $$TMP; \ 219 mv $$TMP ${DEPENDFILE} 220.if !defined(NOEXTRADEPEND) && !defined(NOPIC) 221.if ${BINFORMAT} == aout 222 echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \ 223 `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \ 224 >> ${DEPENDFILE} 225.else 226.if defined(DPADD) && !empty(DPADD) 227 echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \ 228 ${DPADD} >> ${DEPENDFILE} 229.endif 230.endif 231.endif 232 233.if !target(install) 234.if !target(beforeinstall) 235beforeinstall: 236.endif 237 238.if defined(PRECIOUSLIB) 239SHLINSTALLFLAGS+= -fschg 240.endif 241 242realinstall: beforeinstall 243.if !defined(INTERNALLIB) 244 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 245 ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 246.if !defined(NOPROFILE) 247 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 248 ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 249.endif 250.endif 251.if !defined(NOPIC) 252.if ${BINFORMAT} == aout 253.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 254 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 255 ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \ 256 lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 257 ${DESTDIR}${SHLIBDIR} 258.endif 259.else 260.if defined(SHLIB_MAJOR) 261 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 262 ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \ 263 lib${LIB}.so.${SHLIB_MAJOR} \ 264 ${DESTDIR}${SHLIBDIR} 265 ln ${LN_FLAGS} -sf lib${LIB}.so.${SHLIB_MAJOR} \ 266 ${DESTDIR}${SHLIBDIR}/lib${LIB}.so 267.endif 268.endif 269.if defined(INSTALL_PIC_ARCHIVE) 270 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 271 ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 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 _SUBDIR 288.if !defined(NOMAN) 289afterinstall: realinstall maninstall 290.else 291afterinstall: realinstall 292.endif 293.endif 294 295.if !target(regress) 296regress: 297.endif 298 299DISTRIBUTION?= bin 300.if !target(distribute) 301distribute: _SUBDIR 302.for dist in ${DISTRIBUTION} 303 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 304.endfor 305.endif 306 307.if !target(lint) 308lint: 309.endif 310 311.if !defined(NOMAN) 312.include <bsd.man.mk> 313.elif !target(maninstall) 314maninstall: 315all-man: 316.endif 317 318.include <bsd.dep.mk> 319 320.if !exists(${DEPENDFILE}) 321${OBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 322.endif 323 324.include <bsd.obj.mk> 325