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