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