bsd.lib.mk revision 92491
1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD: head/share/mk/bsd.lib.mk 92491 2002-03-17 10:05:57Z markm $ 3# 4 5.if !target(__initialized__) 6__initialized__: 7.if exists(${.CURDIR}/../Makefile.inc) 8.include "${.CURDIR}/../Makefile.inc" 9.endif 10.endif 11 12.if exists(${.CURDIR}/shlib_version) 13SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major 14.if ${OBJFORMAT} == aout 15SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor 16.endif 17.endif 18 19# Set up the variables controlling shared libraries. After this section, 20# SHLIB_NAME will be defined only if we are to create a shared library. 21# SHLIB_LINK will be defined only if we are to create a link to it. 22# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 23.if defined(NOPIC) 24.undef SHLIB_NAME 25.undef INSTALL_PIC_ARCHIVE 26.else 27.if ${OBJFORMAT} == elf 28.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR) 29SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 30SHLIB_LINK?= lib${LIB}.so 31.endif 32SONAME?= ${SHLIB_NAME} 33.else 34.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 35SHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 36.endif 37.endif 38.endif 39 40.if defined(DEBUG_FLAGS) 41CFLAGS+= ${DEBUG_FLAGS} 42.endif 43 44.if !defined(DEBUG_FLAGS) 45STRIP?= -s 46.endif 47 48.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 49.include <bsd.libnames.mk> 50.endif 51 52.MAIN: all 53 54# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 55# .So used for PIC object files 56.SUFFIXES: 57.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l .ln 58 59.c.ln: 60 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \ 61 touch ${.TARGET} 62 63.cc.ln .C.ln .cpp.ln .cxx.ln: 64 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \ 65 touch ${.TARGET} 66 67.c.o: 68 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 69 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 70 @mv ${.TARGET}.tmp ${.TARGET} 71 72.c.po: 73 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 74 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 75 @mv ${.TARGET}.tmp ${.TARGET} 76 77.c.So: 78 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 79 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 80 @mv ${.TARGET}.tmp ${.TARGET} 81 82.cc.o .C.o .cpp.o .cxx.o: 83 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 84 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 85 @mv ${.TARGET}.tmp ${.TARGET} 86 87.cc.po .C.po .cpp.po .cxx.po: 88 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 89 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 90 @mv ${.TARGET}.tmp ${.TARGET} 91 92.cc.So .C.So .cpp.So .cxx.So: 93 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 94 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 95 @mv ${.TARGET}.tmp ${.TARGET} 96 97.f.o: 98 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 99 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 100 @mv ${.TARGET}.tmp ${.TARGET} 101 102.f.po: 103 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 104 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 105 @mv ${.TARGET}.tmp ${.TARGET} 106 107.f.So: 108 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 109 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 110 @mv ${.TARGET}.tmp ${.TARGET} 111 112.m.o: 113 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 114 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 115 @mv ${.TARGET}.tmp ${.TARGET} 116 117.m.po: 118 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 119 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 120 @mv ${.TARGET}.tmp ${.TARGET} 121 122.m.So: 123 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 124 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 125 @mv ${.TARGET}.tmp ${.TARGET} 126 127.s.o: 128 ${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \ 129 ${.IMPSRC} -o ${.TARGET} 130 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 131 @mv ${.TARGET}.tmp ${.TARGET} 132 133.s.po: 134 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \ 135 ${.IMPSRC} -o ${.TARGET} 136 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 137 @mv ${.TARGET}.tmp ${.TARGET} 138 139.s.So: 140 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \ 141 ${.IMPSRC} -o ${.TARGET} 142 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 143 @mv ${.TARGET}.tmp ${.TARGET} 144 145.S.o: 146 ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 147 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 148 @mv ${.TARGET}.tmp ${.TARGET} 149 150.S.po: 151 ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 152 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 153 @mv ${.TARGET}.tmp ${.TARGET} 154 155.S.So: 156 ${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 157 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 158 @mv ${.TARGET}.tmp ${.TARGET} 159 160.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB) 161.if !defined(NOPROFILE) && !defined(INTERNALLIB) 162_LIBS=lib${LIB}.a lib${LIB}_p.a 163.else 164_LIBS=lib${LIB}.a 165.endif 166.endif 167 168LINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/} 169 170.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "") 171LINTLIB=llib-l${LIB}.ln 172.else 173LINTLIB= 174.endif 175 176.if defined(SHLIB_NAME) 177_LIBS+=${SHLIB_NAME} 178.endif 179.if defined(INSTALL_PIC_ARCHIVE) 180_LIBS+=lib${LIB}_pic.a 181.endif 182 183.if !defined(PICFLAG) 184.if ${MACHINE_ARCH} == "sparc64" 185PICFLAG=-fPIC 186.else 187PICFLAG=-fpic 188.endif 189.endif 190 191.if !defined(NOMAN) 192all: objwarn ${_LIBS} all-man _SUBDIR ${LINTLIB} 193.else 194all: objwarn ${_LIBS} _SUBDIR ${LINTLIB} 195.endif 196 197OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 198 199lib${LIB}.a:: ${OBJS} ${STATICOBJS} 200 @${ECHO} building static ${LIB} library 201 @rm -f lib${LIB}.a 202 @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 203 ${RANLIB} lib${LIB}.a 204 205POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 206.if !defined(NOPROFILE) 207lib${LIB}_p.a:: ${POBJS} 208 @${ECHO} building profiled ${LIB} library 209 @rm -f lib${LIB}_p.a 210 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD} 211 ${RANLIB} lib${LIB}_p.a 212.endif 213 214SOBJS+= ${OBJS:.o=.So} 215 216.if defined(SHLIB_NAME) 217${SHLIB_NAME}: ${SOBJS} 218 @${ECHO} building shared library ${SHLIB_NAME} 219 @rm -f ${SHLIB_NAME} ${SHLIB_LINK} 220.if defined(SHLIB_LINK) 221 @ln -sf ${SHLIB_NAME} ${SHLIB_LINK} 222.endif 223.if ${OBJFORMAT} == aout 224 @${CC} -shared -Wl,-x,-assert,pure-text \ 225 -o ${SHLIB_NAME} \ 226 `lorder ${SOBJS} | tsort -q` ${LDADD} 227.else 228 @${CC} -shared -Wl,-x \ 229 -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \ 230 `lorder ${SOBJS} | tsort -q` ${LDADD} 231.endif 232.endif 233 234.if defined(INSTALL_PIC_ARCHIVE) 235lib${LIB}_pic.a:: ${SOBJS} 236 @${ECHO} building special pic ${LIB} library 237 @rm -f lib${LIB}_pic.a 238 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD} 239 ${RANLIB} lib${LIB}_pic.a 240.endif 241 242.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "") 243${LINTLIB}: ${LINTOBJS} 244 @${ECHO} building lint library ${SHLIB_NAME} 245 @rm -f ${LINTLIB} 246 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} 247.endif 248 249.if !target(clean) 250clean: _SUBDIR 251 rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES} 252 rm -f lib${LIB}.a ${LINTLIB} 253 rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a 254 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \ 255 ${SHLIB_NAME} ${SHLIB_LINK} \ 256 lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a 257 rm -f ${LINTOBJS} ${LINTLIB} 258.if defined(CLEANDIRS) && !empty(CLEANDIRS) 259 rm -rf ${CLEANDIRS} 260.endif 261.endif 262 263_EXTRADEPEND: 264 @TMP=_depend$$$$; \ 265 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 266 > $$TMP; \ 267 mv $$TMP ${DEPENDFILE} 268.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 269.if ${OBJFORMAT} == aout 270 echo ${SHLIB_NAME}: \ 271 `${CC} -shared -Wl,-f ${LDADD}` \ 272 >> ${DEPENDFILE} 273.else 274.if defined(DPADD) && !empty(DPADD) 275 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 276.endif 277.endif 278.endif 279 280.if !target(install) 281.if !target(beforeinstall) 282beforeinstall: _includeinstall 283.endif 284 285_includeinstall: 286.if defined(INCS) 287.for header in ${INCS} 288 cd ${.CURDIR} && \ 289 ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \ 290 ${header} ${DESTDIR}${INCDIR} 291 292.endfor 293.endif 294 295.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 296SHLINSTALLFLAGS+= -fschg 297.endif 298 299_INSTALLFLAGS:= ${INSTALLFLAGS} 300.for ie in ${INSTALLFLAGS_EDIT} 301_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 302.endfor 303_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 304.for ie in ${INSTALLFLAGS_EDIT} 305_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 306.endfor 307 308realinstall: beforeinstall 309.if !defined(INTERNALLIB) 310 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 311 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 312.if !defined(NOPROFILE) 313 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 314 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 315.endif 316.endif 317.if defined(SHLIB_NAME) 318 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 319 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 320 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 321.if defined(SHLIB_LINK) 322 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 323.endif 324.endif 325.if defined(INSTALL_PIC_ARCHIVE) 326 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 327 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 328.endif 329.if defined(LINKS) && !empty(LINKS) 330 @set ${LINKS}; \ 331 while test $$# -ge 2; do \ 332 l=${DESTDIR}$$1; \ 333 shift; \ 334 t=${DESTDIR}$$1; \ 335 shift; \ 336 ${ECHO} $$t -\> $$l; \ 337 ln -f $$l $$t; \ 338 done; true 339.endif 340.if defined(SYMLINKS) && !empty(SYMLINKS) 341 @set ${SYMLINKS}; \ 342 while test $$# -ge 2; do \ 343 l=$$1; \ 344 shift; \ 345 t=${DESTDIR}$$1; \ 346 shift; \ 347 ${ECHO} $$t -\> $$l; \ 348 ln -fs $$l $$t; \ 349 done; true 350.endif 351.if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && (${LINTOBJS} != "") 352 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 353 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR} 354.endif 355 356install: afterinstall _SUBDIR 357.if !defined(NOMAN) 358afterinstall: realinstall maninstall 359.else 360afterinstall: realinstall 361.endif 362.endif 363 364.if !target(regress) 365regress: 366.endif 367 368DISTRIBUTION?= bin 369.if !target(distribute) 370distribute: _SUBDIR 371.for dist in ${DISTRIBUTION} 372 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 373.endfor 374.endif 375 376.if !target(lint) 377lint: ${SRCS:M*.c} _SUBDIR 378 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC} | more 2>&1 379.endif 380 381 382.if !defined(NOMAN) 383.include <bsd.man.mk> 384.else 385.if !target(all-man) 386all-man: 387.endif 388.if !target(maninstall) 389maninstall: 390.endif 391.endif 392 393.include <bsd.dep.mk> 394 395.if !exists(${DEPENDFILE}) 396${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 397.endif 398 399.include <bsd.obj.mk> 400 401.include <bsd.sys.mk> 402