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 !empty(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.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 134. if !empty(SRCS) 135OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 136. endif 137.endif 138 139.if defined(LIB) && !empty(LIB) 140_LIBS= lib${LIB}.a 141 142. if ! target(lib${LIB}.a) 143lib${LIB}.a: ${OBJS} ${STATICOBJS} 144 @${ECHO} building static ${LIB} library 145 rm -f ${.TARGET} 146 ${AR} ${ARFLAGS} ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 147 ${RANLIB} ${.TARGET} 148. endif 149.endif 150 151.if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 152. if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 153_LIBS+= lib${LIB}_p.a 154POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 155 156. if ! target(lib${LIB}_p.a) 157lib${LIB}_p.a: ${POBJS} 158 @${ECHO} building profiled ${LIB} library 159 rm -f ${.TARGET} 160 ${AR} ${ARFLAGS} ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 161 ${RANLIB} ${.TARGET} 162. endif 163. endif 164.endif 165 166.if !defined(INTERNALLIB) && defined(SHLIB_NAME) || \ 167 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 168SOBJS+= ${OBJS:.o=.So} 169.endif 170 171.if !defined(INTERNALLIB) && defined(SHLIB_NAME) 172_LIBS+= ${SHLIB_NAME} 173 174${SHLIB_NAME}: ${SOBJS} 175 @${ECHO} building shared library ${SHLIB_NAME} 176 rm -f ${.TARGET} ${SHLIB_LINK} 177.if defined(SHLIB_LINK) 178 ${LN} -fs ${.TARGET} ${SHLIB_LINK} 179.endif 180 ${CC_LINK} ${LDFLAGS} -shared -Wl,-x \ 181 -o ${.TARGET} -Wl,-soname,${SONAME} \ 182 `lorder ${SOBJS} | tsort -q` ${LDADD} 183.endif 184 185.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 186_LIBS+= lib${LIB}_pic.a 187 188lib${LIB}_pic.a: ${SOBJS} 189 @${ECHO} building special pic ${LIB} library 190 rm -f ${.TARGET} 191 ${AR} ${ARFLAGS} ${.TARGET} ${SOBJS} ${ARADD} 192 ${RANLIB} ${.TARGET} 193.endif 194 195all: ${_LIBS} 196 197.if !defined(NOMAN) 198all: _manpages 199.endif 200 201_EXTRADEPEND: 202.if !defined(NOIMPLICITDEPEND) 203 @TMP=_depend$$$$; \ 204 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 205 > $$TMP; \ 206 mv $$TMP ${DEPENDFILE} 207.endif 208.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 209.if defined(DPADD) && !empty(DPADD) 210 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 211.endif 212.endif 213 214.if !target(install) 215 216.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 217SHLINSTALLFLAGS+= -fschg 218.endif 219 220_INSTALLFLAGS:= ${INSTALLFLAGS} 221.for ie in ${INSTALLFLAGS_EDIT} 222_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 223.endfor 224_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 225.for ie in ${INSTALLFLAGS_EDIT} 226_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 227.endfor 228 229.if !defined(INTERNALLIB) 230realinstall: _libinstall 231.ORDER: beforeinstall _libinstall 232_libinstall: 233.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 234 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 235 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${TARGET_LIBDIR} 236.endif 237.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 238 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 239 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${TARGET_PROFLIBDIR}/lib${LIB}.a 240.endif 241.if defined(SHLIB_NAME) 242 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 243 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 244 ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR} 245.if defined(SHLIB_LINK) 246.if ${TARGET_SHLIBDIR} == ${TARGET_LIBDIR} 247 ${LN} -fs ${SHLIB_NAME} ${DESTDIR}${TARGET_LIBDIR}/${SHLIB_LINK} 248.else 249 ${LN} -fs ${_SHLIBDIRPREFIX}${TARGET_SHLIBDIR}/${SHLIB_NAME} \ 250 ${DESTDIR}${TARGET_LIBDIR}/${SHLIB_LINK} 251.endif 252.endif 253.endif 254.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 255 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 256 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${TARGET_LIBDIR} 257.endif 258.endif # !defined(INTERNALLIB) 259 260.include <bsd.nls.mk> 261.include <bsd.files.mk> 262.include <bsd.incs.mk> 263.include <bsd.links.mk> 264 265.if !defined(NOMAN) 266realinstall: _maninstall 267.ORDER: beforeinstall _maninstall 268.endif 269 270.endif 271 272.if !defined(NOMAN) 273.include <bsd.man.mk> 274.endif 275 276.include <bsd.dep.mk> 277 278.if !exists(${.OBJDIR}/${DEPENDFILE}) 279.if defined(LIB) && !empty(LIB) 280${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 281.endif 282.if defined(SHLIB_NAME) || \ 283 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 284${SOBJS}: ${SRCS:M*.h} 285.endif 286.endif 287 288.if !target(clean) 289clean: 290.if defined(CLEANFILES) && !empty(CLEANFILES) 291 rm -f ${CLEANFILES} 292.endif 293.if defined(LIB) && !empty(LIB) 294 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 295.endif 296.if defined(SHLIB_NAME) || \ 297 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 298 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 299.endif 300.if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 301.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 302 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 303.endif 304.endif # !defined(INTERNALLIB) || defined(INTERNALLIBPROF) 305.if !defined(INTERNALLIB) 306.if defined(SHLIB_NAME) 307.if defined(SHLIB_LINK) 308 rm -f ${SHLIB_LINK} 309.endif 310.if defined(LIB) && !empty(LIB) 311 rm -f lib${LIB}.so.* lib${LIB}.so 312.endif 313.endif 314.endif # !defined(INTERNALLIB) 315.if defined(_LIBS) && !empty(_LIBS) 316 rm -f ${_LIBS} 317.endif 318.if defined(CLEANDIRS) && !empty(CLEANDIRS) 319 rm -rf ${CLEANDIRS} 320.endif 321.endif 322 323.include <bsd.obj.mk> 324 325.include <bsd.sys.mk> 326 327