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# 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 24.if defined(DEBUG_FLAGS) 25CFLAGS+= ${DEBUG_FLAGS} 26.else 27STRIP?= -s 28.endif 29 30.include <bsd.libnames.mk> 31 32.if !defined(PRIVATELIB) 33TARGET_LIBDIR?= ${LIBDIR} 34TARGET_DEBUGLIBDIR?= ${DEBUGLIBDIR} 35TARGET_PROFLIBDIR?= ${PROFLIBDIR} 36TARGET_SHLIBDIR?= ${SHLIBDIR} 37.else 38TARGET_LIBDIR?= ${LIBDIR}/priv 39TARGET_DEBUGLIBDIR?= ${DEBUGLIBDIR:S!/debug$!/priv/debug!} 40TARGET_PROFLIBDIR?= ${PROFLIBDIR:S!/profile$!/priv/profile!} 41TARGET_SHLIBDIR?= ${SHLIBDIR}/priv 42.endif 43 44PRIVATELIB_LDFLAGS?= -rpath /lib/priv -L ${_SHLIBDIRPREFIX}/usr/lib/priv 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 .cpp .cxx .m .C .f .y .l 50 51.if !defined(PICFLAG) 52PICFLAG=-fpic 53.endif 54 55PO_FLAG=-pg 56PO_CFLAGS=${CFLAGS:N-ffunction-sections} 57PO_CXXFLAGS=${CXXFLAGS:N-ffunction-sections} 58 59.c.o: 60 ${CC} ${_${.IMPSRC:T}_FLAGS} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 61 62.c.po: 63 ${CC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 64 65.c.So: 66 ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 67 68.cc.o .C.o .cpp.o .cxx.o: 69 ${CXX} ${_${.IMPSRC:T}_FLAGS} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 70 71.cc.po .C.po .cpp.po .cxx.po: 72 ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 73 74.cc.So .C.So .cpp.So .cxx.So: 75 ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 76 77.f.o: 78 ${FC} ${_${.IMPSRC:T}_FLAGS} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 79 80.f.po: 81 ${FC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 82 83.f.So: 84 ${FC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 85 86.m.o: 87 ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 88 89.m.po: 90 ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} ${PO_FLAG} -c ${.IMPSRC} -o ${.TARGET} 91 92.m.So: 93 ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 94 95.s.o: 96 ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${CFLAGS} -c \ 97 ${.IMPSRC} -o ${.TARGET} 98 99.s.po: 100 ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp -DPROF ${CFLAGS} -c \ 101 ${.IMPSRC} -o ${.TARGET} 102 103.s.So: 104 ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 105 -c ${.IMPSRC} -o ${.TARGET} 106 107.S.o: 108 ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 109 110.S.po: 111 ${CC} ${_${.IMPSRC:T}_FLAGS} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 112 113.S.So: 114 ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} \ 115 -o ${.TARGET} 116 117all: objwarn 118 119.include <bsd.symver.mk> 120 121# Allow libraries to specify their own version map or have it 122# automatically generated (see bsd.symver.mk above). 123.if !defined(NO_SYMVER) && !empty(VERSION_MAP) 124${SHLIB_NAME}: ${VERSION_MAP} 125LDFLAGS+= -Wl,--version-script=${VERSION_MAP} 126.endif 127 128.include <bsd.patch.mk> 129 130.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 131. if !empty(SRCS) 132OBJS+= ${SRCS:N*.h:N*.patch:R:S/$/.o/g} 133. endif 134.endif 135 136.if defined(LIB) && !empty(LIB) 137_LIBS= lib${LIB}.a 138 139. if ! target(lib${LIB}.a) 140lib${LIB}.a: ${OBJS} ${STATICOBJS} 141 @${ECHO} building static ${LIB} library 142 rm -f ${.TARGET} 143 ${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 144 ${RANLIB} ${.TARGET} 145. endif 146.endif 147 148.if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 149. if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 150_LIBS+= lib${LIB}_p.a 151POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 152 153. if ! target(lib${LIB}_p.a) 154lib${LIB}_p.a: ${POBJS} 155 @${ECHO} building profiled ${LIB} library 156 rm -f ${.TARGET} 157 ${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 158 ${RANLIB} ${.TARGET} 159. endif 160. endif 161.endif 162 163.if !defined(INTERNALLIB) && defined(SHLIB_NAME) || \ 164 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 165SOBJS+= ${OBJS:.o=.So} 166.endif 167 168.if !defined(INTERNALLIB) && defined(SHLIB_NAME) 169_LIBS+= ${SHLIB_NAME} 170 171${SHLIB_NAME}: ${SOBJS} 172 @${ECHO} building shared library ${SHLIB_NAME} 173 rm -f ${.TARGET} ${SHLIB_LINK} 174.if defined(SHLIB_LINK) 175 ${LN} -fs ${.TARGET} ${SHLIB_LINK} 176.endif 177 ${CC_LINK} ${LDFLAGS} -shared -Wl,-x \ 178 -o ${.TARGET} -Wl,-soname,${SONAME} \ 179 `lorder ${SOBJS} | tsort -q` ${LDADD} 180.endif 181 182.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 183_LIBS+= lib${LIB}_pic.a 184 185lib${LIB}_pic.a: ${SOBJS} 186 @${ECHO} building special pic ${LIB} library 187 rm -f ${.TARGET} 188 ${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 189 ${RANLIB} ${.TARGET} 190.endif 191 192all: ${_LIBS} 193 194.if !defined(NOMAN) 195all: _manpages 196.endif 197 198_EXTRADEPEND: 199.if !defined(NOIMPLICITDEPEND) 200 @TMP=_depend$$$$; \ 201 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 202 > $$TMP; \ 203 mv $$TMP ${DEPENDFILE} 204.endif 205.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 206.if defined(DPADD) && !empty(DPADD) 207 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 208.endif 209.endif 210 211.if !target(install) 212 213.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 214SHLINSTALLFLAGS+= -fschg 215.endif 216 217_INSTALLFLAGS:= ${INSTALLFLAGS} 218.for ie in ${INSTALLFLAGS_EDIT} 219_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 220.endfor 221_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 222.for ie in ${INSTALLFLAGS_EDIT} 223_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 224.endfor 225 226.if !defined(INTERNALLIB) 227realinstall: _libinstall 228.ORDER: beforeinstall _libinstall 229_libinstall: 230.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 231 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 232 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${TARGET_LIBDIR} 233.endif 234.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 235 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 236 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${TARGET_PROFLIBDIR}/lib${LIB}.a 237.endif 238.if defined(SHLIB_NAME) 239 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 240 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 241 ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR} 242.if defined(SHLIB_LINK) 243.if ${SHLIBDIR} == ${LIBDIR} 244 ${LN} -fs ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR}/${SHLIB_LINK} 245.else 246 ${LN} -fs ${_SHLIBDIRPREFIX}${TARGET_SHLIBDIR}/${SHLIB_NAME} \ 247 ${DESTDIR}${TARGET_LIBDIR}/${SHLIB_LINK} 248.endif 249.endif 250.endif 251.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 252 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 253 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${TARGET_LIBDIR} 254.endif 255.endif # !defined(INTERNALLIB) 256 257.include <bsd.nls.mk> 258.include <bsd.files.mk> 259.include <bsd.incs.mk> 260.include <bsd.links.mk> 261 262.if !defined(NOMAN) 263realinstall: _maninstall 264.ORDER: beforeinstall _maninstall 265.endif 266 267.endif 268 269.if !defined(NOMAN) 270.include <bsd.man.mk> 271.endif 272 273.include <bsd.dep.mk> 274 275.if !exists(${.OBJDIR}/${DEPENDFILE}) 276.if defined(LIB) && !empty(LIB) 277${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 278.endif 279.if defined(SHLIB_NAME) || \ 280 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 281${SOBJS}: ${SRCS:M*.h} 282.endif 283.endif 284 285.if !target(clean) 286clean: 287.if defined(CLEANFILES) && !empty(CLEANFILES) 288 rm -f ${CLEANFILES} 289.endif 290.if defined(LIB) && !empty(LIB) 291 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 292.endif 293.if defined(SHLIB_NAME) || \ 294 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 295 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 296.endif 297.if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 298.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 299 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 300.endif 301.endif # !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 302.if !defined(INTERNALLIB) 303.if defined(SHLIB_NAME) 304.if defined(SHLIB_LINK) 305 rm -f ${SHLIB_LINK} 306.endif 307.if defined(LIB) && !empty(LIB) 308 rm -f lib${LIB}.so.* lib${LIB}.so 309.endif 310.endif 311.endif # !defined(INTERNALLIB) 312.if defined(_LIBS) && !empty(_LIBS) 313 rm -f ${_LIBS} 314.endif 315.if defined(CLEANDIRS) && !empty(CLEANDIRS) 316 rm -rf ${CLEANDIRS} 317.endif 318.endif 319 320.include <bsd.obj.mk> 321 322.include <bsd.sys.mk> 323 324