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