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