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