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.14 2005/07/30 13:59:45 joerg 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 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 54 @mv ${.TARGET}.tmp ${.TARGET} 55 56.c.po: 57 ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 58 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 59 @mv ${.TARGET}.tmp ${.TARGET} 60 61.c.So: 62 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 63 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 64 @mv ${.TARGET}.tmp ${.TARGET} 65 66.cc.o .C.o .cpp.o .cxx.o: 67 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 68 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 69 @mv ${.TARGET}.tmp ${.TARGET} 70 71.cc.po .C.po .cpp.po .cxx.po: 72 ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 73 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 74 @mv ${.TARGET}.tmp ${.TARGET} 75 76.cc.So .C.So .cpp.So .cxx.So: 77 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 78 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 79 @mv ${.TARGET}.tmp ${.TARGET} 80 81.f.o: 82 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 83 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 84 @mv ${.TARGET}.tmp ${.TARGET} 85 86.f.po: 87 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 88 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 89 @mv ${.TARGET}.tmp ${.TARGET} 90 91.f.So: 92 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 93 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 94 @mv ${.TARGET}.tmp ${.TARGET} 95 96.m.o: 97 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 98 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 99 @mv ${.TARGET}.tmp ${.TARGET} 100 101.m.po: 102 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 103 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 104 @mv ${.TARGET}.tmp ${.TARGET} 105 106.m.So: 107 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 108 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 109 @mv ${.TARGET}.tmp ${.TARGET} 110 111.s.o: 112 ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ 113 ${.IMPSRC} -o ${.TARGET} 114 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 115 @mv ${.TARGET}.tmp ${.TARGET} 116 117.s.po: 118 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ 119 ${.IMPSRC} -o ${.TARGET} 120 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 121 @mv ${.TARGET}.tmp ${.TARGET} 122 123.s.So: 124 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 125 ${AINC} -c ${.IMPSRC} -o ${.TARGET} 126 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 127 @mv ${.TARGET}.tmp ${.TARGET} 128 129.S.o: 130 ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 131 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 132 @mv ${.TARGET}.tmp ${.TARGET} 133 134.S.po: 135 ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 136 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 137 @mv ${.TARGET}.tmp ${.TARGET} 138 139.S.So: 140 ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ 141 -o ${.TARGET} 142 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 143 @mv ${.TARGET}.tmp ${.TARGET} 144 145all: objwarn 146 147.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 148OBJS+= ${SRCS:N*.h:N*.patch:R:S/$/.o/g} 149.for _PATCH in ${SRCS:T:N*.no_obj.patch:N*.h.patch:M*.patch} 150.for _OBJ in ${_PATCH:R:R:S/$/.o/} 151OBJS:= ${OBJS:N${_OBJ}} ${_OBJ} 152.endfor 153.endfor 154.endif 155 156.if defined(LIB) && !empty(LIB) 157_LIBS= lib${LIB}.a 158 159lib${LIB}.a: ${OBJS} ${STATICOBJS} 160 @${ECHO} building static ${LIB} library 161 rm -f ${.TARGET} 162 ${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 163 ${RANLIB} ${.TARGET} 164.endif 165 166.if !defined(INTERNALLIB) && !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 167_LIBS+= lib${LIB}_p.a 168POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 169 170lib${LIB}_p.a: ${POBJS} 171 @${ECHO} building profiled ${LIB} library 172 rm -f ${.TARGET} 173 ${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 174 ${RANLIB} ${.TARGET} 175.endif 176 177.if !defined(INTERNALLIB) && defined(SHLIB_NAME) || \ 178 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 179SOBJS+= ${OBJS:.o=.So} 180.endif 181 182.if !defined(INTERNALLIB) && defined(SHLIB_NAME) 183_LIBS+= ${SHLIB_NAME} 184 185${SHLIB_NAME}: ${SOBJS} 186 @${ECHO} building shared library ${SHLIB_NAME} 187 rm -f ${.TARGET} ${SHLIB_LINK} 188.if defined(SHLIB_LINK) 189 ${LN} -fs ${.TARGET} ${SHLIB_LINK} 190.endif 191 ${CC} ${LDFLAGS} -shared -Wl,-x \ 192 -o ${.TARGET} -Wl,-soname,${SONAME} \ 193 `lorder ${SOBJS} | tsort -q` ${LDADD} 194.endif 195 196.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 197_LIBS+= lib${LIB}_pic.a 198 199lib${LIB}_pic.a: ${SOBJS} 200 @${ECHO} building special pic ${LIB} library 201 rm -f ${.TARGET} 202 ${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 203 ${RANLIB} ${.TARGET} 204.endif 205 206all: ${_LIBS} 207 208.if !defined(NOMAN) 209all: _manpages 210.endif 211 212_EXTRADEPEND: 213 @TMP=_depend$$$$; \ 214 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 215 > $$TMP; \ 216 mv $$TMP ${DEPENDFILE} 217.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 218.if defined(DPADD) && !empty(DPADD) 219 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 220.endif 221.endif 222 223.if !target(install) 224 225.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 226SHLINSTALLFLAGS+= -fschg 227.endif 228 229_INSTALLFLAGS:= ${INSTALLFLAGS} 230.for ie in ${INSTALLFLAGS_EDIT} 231_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 232.endfor 233_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 234.for ie in ${INSTALLFLAGS_EDIT} 235_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 236.endfor 237 238.if !defined(INTERNALLIB) 239realinstall: _libinstall 240.ORDER: beforeinstall _libinstall 241_libinstall: 242.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 243 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 244 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${TARGET_LIBDIR} 245.endif 246.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 247 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 248 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${TARGET_PROFLIBDIR}/lib${LIB}.a 249.endif 250.if defined(SHLIB_NAME) 251 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 252 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 253 ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR} 254.if defined(SHLIB_LINK) 255 ${LN} -fs ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR}/${SHLIB_LINK} 256.endif 257.endif 258.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 259 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 260 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${TARGET_LIBDIR} 261.endif 262.endif # !defined(INTERNALLIB) 263 264.include <bsd.nls.mk> 265.include <bsd.files.mk> 266.include <bsd.incs.mk> 267.include <bsd.links.mk> 268 269.if !defined(NOMAN) 270realinstall: _maninstall 271.ORDER: beforeinstall _maninstall 272.endif 273 274.endif 275 276.if !defined(NOMAN) 277.include <bsd.man.mk> 278.endif 279 280.include <bsd.dep.mk> 281 282.if !exists(${.OBJDIR}/${DEPENDFILE}) 283.if defined(LIB) && !empty(LIB) 284${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 285.endif 286.if defined(SHLIB_NAME) || \ 287 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 288${SOBJS}: ${SRCS:M*.h} 289.endif 290.endif 291 292.if !target(clean) 293clean: 294.if defined(CLEANFILES) && !empty(CLEANFILES) 295 rm -f ${CLEANFILES} 296.endif 297.if defined(LIB) && !empty(LIB) 298 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 299.endif 300.if !defined(INTERNALLIB) 301.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 302 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 303.endif 304.if defined(SHLIB_NAME) || \ 305 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 306 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 307.endif 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