bsd.lib.mk revision 32495
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $Id: bsd.lib.mk,v 1.65 1997/12/17 15:18:53 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.if defined(SRCS) 216_EXTRADEPEND:: 217 @TMP=_depend$$$$; \ 218 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < ${DEPENDFILE} \ 219 > $$TMP; \ 220 mv $$TMP ${DEPENDFILE} 221.endif 222.if !defined(NOEXTRADEPEND) 223_EXTRADEPEND:: 224.if ${BINFORMAT} == aout 225 echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \ 226 `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \ 227 >> ${DEPENDFILE} 228.else 229.if defined(DPADD) && !empty(DPADD) 230 echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \ 231 ${DPADD} >> ${DEPENDFILE} 232.endif 233.endif 234.endif 235 236.if !target(install) 237.if !target(beforeinstall) 238beforeinstall: 239.endif 240 241.if defined(PRECIOUSLIB) 242SHLINSTALLFLAGS+= -fschg 243.endif 244 245realinstall: beforeinstall 246.if !defined(INTERNALLIB) 247 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 248 ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 249.if !defined(NOPROFILE) 250 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 251 ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 252.endif 253.endif 254.if !defined(NOPIC) 255.if ${BINFORMAT} == aout 256.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 257 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 258 ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \ 259 lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ 260 ${DESTDIR}${SHLIBDIR} 261.endif 262.else 263.if defined(SHLIB_MAJOR) 264 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 265 ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \ 266 lib${LIB}.so.${SHLIB_MAJOR} \ 267 ${DESTDIR}${SHLIBDIR} 268 ln ${LN_FLAGS} -sf lib${LIB}.so.${SHLIB_MAJOR} \ 269 ${DESTDIR}${SHLIBDIR}/lib${LIB}.so 270.endif 271.endif 272.if defined(INSTALL_PIC_ARCHIVE) 273 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 274 ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 275.endif 276.endif 277.if defined(LINKS) && !empty(LINKS) 278 @set ${LINKS}; \ 279 while test $$# -ge 2; do \ 280 l=${DESTDIR}$$1; \ 281 shift; \ 282 t=${DESTDIR}$$1; \ 283 shift; \ 284 ${ECHO} $$t -\> $$l; \ 285 rm -f $$t; \ 286 ln ${LN_FLAGS} $$l $$t; \ 287 done; true 288.endif 289 290install: afterinstall _SUBDIR 291.if !defined(NOMAN) 292afterinstall: realinstall maninstall 293.else 294afterinstall: realinstall 295.endif 296.endif 297 298DISTRIBUTION?= bin 299.if !target(distribute) 300distribute: _SUBDIR 301.for dist in ${DISTRIBUTION} 302 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 303.endfor 304.endif 305 306.if !target(lint) 307lint: 308.endif 309 310.if defined(NOTAGS) 311tags: 312.endif 313 314.if !target(tags) 315tags: ${SRCS} _SUBDIR 316 @cd ${.CURDIR} && gtags ${GTAGSFLAGS} 317.if defined(HTML) 318 @cd ${.CURDIR} && htags ${HTAGSFLAGS} 319.endif 320.endif 321 322.if !defined(NOMAN) 323.include <bsd.man.mk> 324.elif !target(maninstall) 325maninstall: 326all-man: 327.endif 328 329.include <bsd.dep.mk> 330.include <bsd.obj.mk> 331