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