bsd.lib.mk revision 117173
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD: head/share/mk/bsd.lib.mk 117173 2003-07-02 17:03:28Z ru $ 3# 4 5.include <bsd.init.mk> 6 7# Set up the variables controlling shared libraries. After this section, 8# SHLIB_NAME will be defined only if we are to create a shared library. 9# SHLIB_LINK will be defined only if we are to create a link to it. 10# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 11.if defined(NOPIC) 12.undef SHLIB_NAME 13.undef INSTALL_PIC_ARCHIVE 14.else 15.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) 16SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 17.endif 18.if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*} 19SHLIB_LINK?= ${SHLIB_NAME:R} 20.endif 21SONAME?= ${SHLIB_NAME} 22.endif 23 24CFLAGS+= ${CRUNCH_CFLAGS} 25 26.if defined(DEBUG_FLAGS) 27CFLAGS+= ${DEBUG_FLAGS} 28.endif 29 30.if !defined(DEBUG_FLAGS) 31STRIP?= -s 32.endif 33 34.include <bsd.libnames.mk> 35 36# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 37# .So used for PIC object files 38.SUFFIXES: 39.SUFFIXES: .out .o .po .So .S .asm .s .c .cc .cpp .cxx .m .C .f .y .l .ln 40 41.if !defined(PICFLAG) 42.if ${MACHINE_ARCH} == "sparc64" 43PICFLAG=-fPIC 44.else 45PICFLAG=-fpic 46.endif 47.endif 48 49.c.po: 50 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 51 52.c.So: 53 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 54 55.cc.po .C.po .cpp.po .cxx.po: 56 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 57 58.cc.So .C.So .cpp.So .cxx.So: 59 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 60 61.f.po: 62 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 63 64.f.So: 65 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 66 67.m.po: 68 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 69 70.m.So: 71 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 72 73.s.po .s.So: 74 ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} 75 76.asm.po: 77 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 78 79.asm.So: 80 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 81 -c ${.IMPSRC} -o ${.TARGET} 82 83.S.po: 84 ${CC} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 85 86.S.So: 87 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 88 89all: objwarn 90 91.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 92OBJS+= ${SRCS:N*.h:R:S/$/.o/} 93.endif 94 95.if defined(LIB) && !empty(LIB) 96_LIBS= lib${LIB}.a 97 98lib${LIB}.a: ${OBJS} ${STATICOBJS} 99 @${ECHO} building static ${LIB} library 100 @rm -f ${.TARGET} 101 @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 102 ${RANLIB} ${.TARGET} 103.endif 104 105.if !defined(INTERNALLIB) 106 107.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 108_LIBS+= lib${LIB}_p.a 109POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 110 111lib${LIB}_p.a: ${POBJS} 112 @${ECHO} building profiled ${LIB} library 113 @rm -f ${.TARGET} 114 @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 115 ${RANLIB} ${.TARGET} 116.endif 117 118.if defined(SHLIB_NAME) || \ 119 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 120SOBJS+= ${OBJS:.o=.So} 121.endif 122 123.if defined(SHLIB_NAME) 124_LIBS+= ${SHLIB_NAME} 125 126${SHLIB_NAME}: ${SOBJS} 127 @${ECHO} building shared library ${SHLIB_NAME} 128 @rm -f ${.TARGET} ${SHLIB_LINK} 129.if defined(SHLIB_LINK) 130 @ln -fs ${.TARGET} ${SHLIB_LINK} 131.endif 132 @${CC} ${LDFLAGS} -shared -Wl,-x \ 133 -o ${.TARGET} -Wl,-soname,${SONAME} \ 134 `lorder ${SOBJS} | tsort -q` ${LDADD} 135.endif 136 137.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 138_LIBS+= lib${LIB}_pic.a 139 140lib${LIB}_pic.a: ${SOBJS} 141 @${ECHO} building special pic ${LIB} library 142 @rm -f ${.TARGET} 143 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 144 ${RANLIB} ${.TARGET} 145.endif 146 147.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 148LINTLIB= llib-l${LIB}.ln 149_LIBS+= ${LINTLIB} 150LINTOBJS+= ${SRCS:M*.c:.c=.ln} 151 152${LINTLIB}: ${LINTOBJS} 153 @${ECHO} building lint library ${.TARGET} 154 @rm -f ${.TARGET} 155 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 156.endif 157 158.endif !defined(INTERNALLIB) 159 160all: ${_LIBS} 161 162.if !defined(NOMAN) 163all: _manpages 164.endif 165 166_EXTRADEPEND: 167 @TMP=_depend$$$$; \ 168 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 169 > $$TMP; \ 170 mv $$TMP ${DEPENDFILE} 171.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 172.if defined(DPADD) && !empty(DPADD) 173 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 174.endif 175.endif 176 177.if !target(install) 178 179.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 180SHLINSTALLFLAGS+= -fschg 181.endif 182 183_INSTALLFLAGS:= ${INSTALLFLAGS} 184.for ie in ${INSTALLFLAGS_EDIT} 185_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 186.endfor 187_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 188.for ie in ${INSTALLFLAGS_EDIT} 189_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 190.endfor 191 192.if !defined(INTERNALLIB) 193realinstall: _libinstall 194.ORDER: beforeinstall _libinstall 195_libinstall: 196.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 197 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 198 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 199.endif 200.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 201 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 202 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 203.endif 204.if defined(SHLIB_NAME) 205 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 206 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 207 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 208.if defined(SHLIB_LINK) 209 ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 210.endif 211.endif 212.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 213 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 214 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 215.endif 216.if defined(WANT_LINT) && !defined(NOLINT) && defined(LIB) && !empty(LIB) 217 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 218 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 219.endif 220.endif !defined(INTERNALLIB) 221 222.include <bsd.files.mk> 223.include <bsd.incs.mk> 224.include <bsd.links.mk> 225 226.if !defined(NOMAN) 227realinstall: _maninstall 228.ORDER: beforeinstall _maninstall 229.endif 230 231.endif 232 233.if !target(lint) 234lint: ${SRCS:M*.c} 235 ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 236.endif 237 238.if !defined(NOMAN) 239.include <bsd.man.mk> 240.endif 241 242.include <bsd.dep.mk> 243 244.if !exists(${.OBJDIR}/${DEPENDFILE}) 245.if defined(LIB) && !empty(LIB) 246${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 247.endif 248.if defined(SHLIB_NAME) || \ 249 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 250${SOBJS}: ${SRCS:M*.h} 251.endif 252.endif 253 254.if !target(clean) 255clean: 256.if defined(CLEANFILES) && !empty(CLEANFILES) 257 rm -f ${CLEANFILES} 258.endif 259.if defined(LIB) && !empty(LIB) 260 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 261.endif 262.if !defined(INTERNALLIB) 263.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 264 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 265.endif 266.if defined(SHLIB_NAME) || \ 267 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 268 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 269.endif 270.if defined(SHLIB_NAME) 271.if defined(SHLIB_LINK) 272 rm -f ${SHLIB_LINK} 273.endif 274.if defined(LIB) && !empty(LIB) 275 rm -f lib${LIB}.so.* lib${LIB}.so 276.endif 277.endif 278.if defined(WANT_LINT) && defined(LIB) && !empty(LIB) 279 rm -f ${LINTOBJS} 280.endif 281.endif !defined(INTERNALLIB) 282.if defined(_LIBS) && !empty(_LIBS) 283 rm -f ${_LIBS} 284.endif 285.if defined(CLEANDIRS) && !empty(CLEANDIRS) 286 rm -rf ${CLEANDIRS} 287.endif 288.endif 289 290.include <bsd.obj.mk> 291 292.include <bsd.sys.mk> 293