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.4 2004/03/05 01:06:50 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 ${OBJFORMAT} == elf 17.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) 18SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 19.endif 20.if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*} 21SHLIB_LINK?= ${SHLIB_NAME:R} 22.endif 23SONAME?= ${SHLIB_NAME} 24.else 25.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 26SHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 27.endif 28.endif 29.endif 30 31.if defined(DEBUG_FLAGS) 32CFLAGS+= ${DEBUG_FLAGS} 33.endif 34 35.if !defined(DEBUG_FLAGS) 36STRIP?= -s 37.endif 38 39.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 40.include <bsd.libnames.mk> 41.endif 42.if defined(USEGNUDIR) 43USELIBDIR?=${GCCLIBDIR} 44USESHLIBDIR?=${GCCSHLIBDIR} 45.else 46USELIBDIR?=${LIBDIR} 47USESHLIBDIR?=${SHLIBDIR} 48.endif 49 50# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 51# .So used for PIC object files 52.SUFFIXES: 53.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l 54 55.if !defined(PICFLAG) 56PICFLAG=-fpic 57.endif 58 59PO_FLAG=-pg 60 61.c.o: 62 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 63 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 64 @mv ${.TARGET}.tmp ${.TARGET} 65 66.c.po: 67 ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 68 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 69 @mv ${.TARGET}.tmp ${.TARGET} 70 71.c.So: 72 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 73 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 74 @mv ${.TARGET}.tmp ${.TARGET} 75 76.cc.o .C.o .cpp.o .cxx.o: 77 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 78 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 79 @mv ${.TARGET}.tmp ${.TARGET} 80 81.cc.po .C.po .cpp.po .cxx.po: 82 ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 83 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 84 @mv ${.TARGET}.tmp ${.TARGET} 85 86.cc.So .C.So .cpp.So .cxx.So: 87 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 88 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 89 @mv ${.TARGET}.tmp ${.TARGET} 90 91.f.o: 92 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 93 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 94 @mv ${.TARGET}.tmp ${.TARGET} 95 96.f.po: 97 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 98 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 99 @mv ${.TARGET}.tmp ${.TARGET} 100 101.f.So: 102 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 103 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 104 @mv ${.TARGET}.tmp ${.TARGET} 105 106.m.o: 107 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 108 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 109 @mv ${.TARGET}.tmp ${.TARGET} 110 111.m.po: 112 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 113 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 114 @mv ${.TARGET}.tmp ${.TARGET} 115 116.m.So: 117 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 118 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 119 @mv ${.TARGET}.tmp ${.TARGET} 120 121.s.o: 122 ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ 123 ${.IMPSRC} -o ${.TARGET} 124 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 125 @mv ${.TARGET}.tmp ${.TARGET} 126 127.s.po: 128 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ 129 ${.IMPSRC} -o ${.TARGET} 130 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 131 @mv ${.TARGET}.tmp ${.TARGET} 132 133.s.So: 134 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ 135 ${AINC} -c ${.IMPSRC} -o ${.TARGET} 136 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 137 @mv ${.TARGET}.tmp ${.TARGET} 138 139.S.o: 140 ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 141 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET} 142 @mv ${.TARGET}.tmp ${.TARGET} 143 144.S.po: 145 ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 146 @${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET} 147 @mv ${.TARGET}.tmp ${.TARGET} 148 149.S.So: 150 ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ 151 -o ${.TARGET} 152 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 153 @mv ${.TARGET}.tmp ${.TARGET} 154 155all: objwarn 156 157.if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) 158OBJS+= ${SRCS:N*.h:N*.patch:R:S/$/.o/g} 159.for _PATCH in ${SRCS:T:N*.h.patch:M*.patch} 160.for _OBJ in ${_PATCH:R:R:S/$/.o/} 161OBJS:= ${OBJS:N${_OBJ}} ${_OBJ} 162.endfor 163.endfor 164.endif 165 166.if defined(LIB) && !empty(LIB) 167_LIBS= lib${LIB}.a 168 169lib${LIB}.a: ${OBJS} ${STATICOBJS} 170 @${ECHO} building static ${LIB} library 171 @rm -f ${.TARGET} 172 @${AR} cq ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 173 ${RANLIB} ${.TARGET} 174.endif 175 176.if !defined(INTERNALLIB) 177 178.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 179_LIBS+= lib${LIB}_p.a 180POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 181 182lib${LIB}_p.a: ${POBJS} 183 @${ECHO} building profiled ${LIB} library 184 @rm -f ${.TARGET} 185 @${AR} cq ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} 186 ${RANLIB} ${.TARGET} 187.endif 188 189.if defined(SHLIB_NAME) || \ 190 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 191SOBJS+= ${OBJS:.o=.So} 192.endif 193 194.if defined(SHLIB_NAME) 195_LIBS+= ${SHLIB_NAME} 196 197${SHLIB_NAME}: ${SOBJS} 198 @${ECHO} building shared library ${SHLIB_NAME} 199 @rm -f ${.TARGET} ${SHLIB_LINK} 200.if defined(SHLIB_LINK) 201 @ln -fs ${.TARGET} ${SHLIB_LINK} 202.endif 203.if ${OBJFORMAT} == aout 204 @${CC} -shared -Wl,-x,-assert,pure-text \ 205 -o ${.TARGET} \ 206 `lorder ${SOBJS} | tsort -q` ${LDADD} 207.else 208 @${CC} ${LDFLAGS} -shared -Wl,-x \ 209 -o ${.TARGET} -Wl,-soname,${SONAME} \ 210 `lorder ${SOBJS} | tsort -q` ${LDADD} 211.endif 212.endif 213 214.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 215_LIBS+= lib${LIB}_pic.a 216 217lib${LIB}_pic.a: ${SOBJS} 218 @${ECHO} building special pic ${LIB} library 219 @rm -f ${.TARGET} 220 @${AR} cq ${.TARGET} ${SOBJS} ${ARADD} 221 ${RANLIB} ${.TARGET} 222.endif 223 224.endif # !defined(INTERNALLIB) 225 226all: ${_LIBS} 227 228.if !defined(NOMAN) 229all: _manpages 230.endif 231 232_EXTRADEPEND: 233 @TMP=_depend$$$$; \ 234 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 235 > $$TMP; \ 236 mv $$TMP ${DEPENDFILE} 237.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 238.if ${OBJFORMAT} == aout 239 echo ${SHLIB_NAME}: \ 240 `${CC} -shared -Wl,-f ${LDADD}` \ 241 >> ${DEPENDFILE} 242.else 243.if defined(DPADD) && !empty(DPADD) 244 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 245.endif 246.endif 247.endif 248 249.if !target(install) 250 251.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 252SHLINSTALLFLAGS+= -fschg 253.endif 254 255_INSTALLFLAGS:= ${INSTALLFLAGS} 256.for ie in ${INSTALLFLAGS_EDIT} 257_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 258.endfor 259_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 260.for ie in ${INSTALLFLAGS_EDIT} 261_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 262.endfor 263 264.if !defined(INTERNALLIB) 265realinstall: _libinstall 266.ORDER: beforeinstall _libinstall 267_libinstall: 268.if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) 269 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 270 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${USELIBDIR} 271.endif 272.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 273 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 274 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${USELIBDIR} 275.endif 276.if defined(SHLIB_NAME) 277 ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 278 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 279 ${SHLIB_NAME} ${DESTDIR}${USESHLIBDIR} 280.if defined(SHLIB_LINK) 281 ln -fs ${SHLIB_NAME} ${DESTDIR}${USESHLIBDIR}/${SHLIB_LINK} 282.endif 283.endif 284.if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 285 ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 286 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${USELIBDIR} 287.endif 288.endif !defined(INTERNALLIB) 289 290.include <bsd.files.mk> 291.include <bsd.incs.mk> 292.include <bsd.links.mk> 293 294.if !defined(NOMAN) 295realinstall: _maninstall 296.ORDER: beforeinstall _maninstall 297.endif 298 299.endif 300 301.if !defined(NOMAN) 302.include <bsd.man.mk> 303.endif 304 305.include <bsd.dep.mk> 306 307.if !exists(${.OBJDIR}/${DEPENDFILE}) 308.if defined(LIB) && !empty(LIB) 309${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} 310.endif 311.if defined(SHLIB_NAME) || \ 312 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 313${SOBJS}: ${SRCS:M*.h} 314.endif 315.endif 316 317.if !target(clean) 318clean: 319.if defined(CLEANFILES) && !empty(CLEANFILES) 320 rm -f ${CLEANFILES} 321.endif 322.if defined(LIB) && !empty(LIB) 323 rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} 324.endif 325.if !defined(INTERNALLIB) 326.if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) 327 rm -f ${POBJS} ${POBJS:S/$/.tmp/} 328.endif 329.if defined(SHLIB_NAME) || \ 330 defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) 331 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} 332.endif 333.if defined(SHLIB_NAME) 334.if defined(SHLIB_LINK) 335 rm -f ${SHLIB_LINK} 336.endif 337.if defined(LIB) && !empty(LIB) 338 rm -f lib${LIB}.so.* lib${LIB}.so 339.endif 340.endif 341.endif !defined(INTERNALLIB) 342.if defined(_LIBS) && !empty(_LIBS) 343 rm -f ${_LIBS} 344.endif 345.if defined(CLEANDIRS) && !empty(CLEANDIRS) 346 rm -rf ${CLEANDIRS} 347.endif 348.endif 349 350.include <bsd.obj.mk> 351 352.include <bsd.sys.mk> 353