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