bsd.lib.mk revision 76861
143105Sdfr# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 243105Sdfr# $FreeBSD: head/share/mk/bsd.lib.mk 76861 2001-05-19 23:18:21Z kris $ 343105Sdfr# 443105Sdfr 543105Sdfr.if !target(__initialized__) 643105Sdfr__initialized__: 743105Sdfr.if exists(${.CURDIR}/../Makefile.inc) 843105Sdfr.include "${.CURDIR}/../Makefile.inc" 943105Sdfr.endif 1043105Sdfr.endif 1143105Sdfr 1243105Sdfr.if exists(${.CURDIR}/shlib_version) 1343105SdfrSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major 1443105Sdfr.if ${OBJFORMAT} == aout 1543105SdfrSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor 1643105Sdfr.endif 1743105Sdfr.endif 1843105Sdfr 1943105Sdfr# Set up the variables controlling shared libraries. After this section, 2043105Sdfr# SHLIB_NAME will be defined only if we are to create a shared library. 2143105Sdfr# SHLIB_LINK will be defined only if we are to create a link to it. 2243105Sdfr# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 2343105Sdfr.if defined(NOPIC) 2443105Sdfr.undef SHLIB_NAME 2543105Sdfr.undef INSTALL_PIC_ARCHIVE 2643105Sdfr.else 27116181Sobrien.if ${OBJFORMAT} == elf 28116181Sobrien.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR) 29116181SobrienSHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 3043105SdfrSHLIB_LINK?= lib${LIB}.so 3143105Sdfr.endif 3243105SdfrSONAME?= ${SHLIB_NAME} 3343105Sdfr.else 3443105Sdfr.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 3543105SdfrSHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 3643105Sdfr.endif 37142833Siedowse.endif 38129880Sphk.endif 3948104Syokota 4043105Sdfr.if defined(DESTDIR) 4148104SyokotaCFLAGS+= -I${DESTDIR}/usr/include 4243105SdfrCXXINCLUDES+= -I${DESTDIR}/usr/include/g++ 4348104Syokota.endif 4448104Syokota 4548104Syokota.if defined(DEBUG_FLAGS) 4648104SyokotaCFLAGS+= ${DEBUG_FLAGS} 4748104Syokota.endif 4843105Sdfr 4943105Sdfr.if !defined(DEBUG_FLAGS) 5043105SdfrSTRIP?= -s 5143105Sdfr.endif 52114384Speter 5343105Sdfr.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 54114384Speter.include <bsd.libnames.mk> 5543105Sdfr.endif 5643105Sdfr 5743105Sdfr.MAIN: all 5843105Sdfr 5943105Sdfr# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 6043105Sdfr# .So used for PIC object files 6143105Sdfr.SUFFIXES: 62199229Sjkim.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l 63199229Sjkim 64199229Sjkim.c.o: 65199229Sjkim ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 66199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 67199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 68199229Sjkim 69199229Sjkim.c.po: 70199229Sjkim ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 71199229Sjkim @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 72199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 73199229Sjkim 74199229Sjkim.c.So: 75199229Sjkim ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 76199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 77199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 78199229Sjkim 79199229Sjkim.cc.o .C.o .cpp.o .cxx.o: 80199229Sjkim ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 81199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 82199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 83199229Sjkim 84199229Sjkim.cc.po .C.po .cpp.po .cxx.po: 85199229Sjkim ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 86199229Sjkim @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 87199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 88199229Sjkim 89199229Sjkim.cc.So .C.So .cpp.So .cxx.So: 90199229Sjkim ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 91199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 92199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 93199229Sjkim 94199229Sjkim.f.o: 95199229Sjkim ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 96199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 97199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 98199229Sjkim 99199229Sjkim.f.po: 100199229Sjkim ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 101199229Sjkim @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 102199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 103199229Sjkim 104199229Sjkim.f.So: 105199229Sjkim ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 106199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 107199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 108199229Sjkim 109199229Sjkim.m.o: 110199229Sjkim ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 111199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 112199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 113199229Sjkim 114199229Sjkim.m.po: 115199229Sjkim ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 116199229Sjkim @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 117199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 118199229Sjkim 119199229Sjkim.m.So: 120199229Sjkim ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 121199229Sjkim @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 122199229Sjkim @mv ${.TARGET}.tmp ${.TARGET} 123199229Sjkim 124199229Sjkim.s.o: 12548104Syokota ${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \ 12648104Syokota ${.IMPSRC} -o ${.TARGET} 12743105Sdfr @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 12848104Syokota @mv ${.TARGET}.tmp ${.TARGET} 12943105Sdfr 13043105Sdfr.s.po: 13143105Sdfr ${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \ 13248104Syokota ${.IMPSRC} -o ${.TARGET} 13348104Syokota @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 13448104Syokota @mv ${.TARGET}.tmp ${.TARGET} 13548104Syokota 13648104Syokota.s.So: 13748104Syokota ${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \ 13843105Sdfr ${.IMPSRC} -o ${.TARGET} 13948104Syokota @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 140126080Sphk @mv ${.TARGET}.tmp ${.TARGET} 141126080Sphk 142111815Sphk.S.o: 143111815Sphk ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 144111815Sphk @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 145111815Sphk @mv ${.TARGET}.tmp ${.TARGET} 146111815Sphk 147111815Sphk.S.po: 148111815Sphk ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 14943105Sdfr @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 15043105Sdfr @mv ${.TARGET}.tmp ${.TARGET} 15143105Sdfr 15243105Sdfr.S.So: 15362225Speter ${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 15462225Speter @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 15562225Speter @mv ${.TARGET}.tmp ${.TARGET} 15662225Speter 15762225Speter.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB) 15862225Speter.if !defined(NOPROFILE) && !defined(INTERNALLIB) 15943105Sdfr_LIBS=lib${LIB}.a lib${LIB}_p.a 16043105Sdfr.else 16143105Sdfr_LIBS=lib${LIB}.a 16248104Syokota.endif 16348104Syokota.endif 16443105Sdfr 16547618Sdfr.if defined(SHLIB_NAME) 16647618Sdfr_LIBS+=${SHLIB_NAME} 16747618Sdfr.endif 16847618Sdfr.if defined(INSTALL_PIC_ARCHIVE) 16951052Sdfr_LIBS+=lib${LIB}_pic.a 17048104Syokota.endif 171199229Sjkim 17252174Sdfr.if !defined(PICFLAG) 17348104SyokotaPICFLAG=-fpic 17452174Sdfr.endif 17548104Syokota 17648104Syokota.if !defined(NOMAN) 17748104Syokotaall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln 17848104Syokota.else 17948104Syokotaall: objwarn ${_LIBS} _SUBDIR # llib-l${LIB}.ln 18048104Syokota.endif 18148104Syokota 18248104SyokotaOBJS+= ${SRCS:N*.h:R:S/$/.o/g} 183199002Sjkim 18443105Sdfrlib${LIB}.a:: ${OBJS} ${STATICOBJS} 18543105Sdfr @${ECHO} building static ${LIB} library 18643105Sdfr @rm -f lib${LIB}.a 18743105Sdfr @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 18843105Sdfr ${RANLIB} lib${LIB}.a 18948104Syokota 19048104SyokotaPOBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 19148104Syokota.if !defined(NOPROFILE) 19248104Syokotalib${LIB}_p.a:: ${POBJS} 19343105Sdfr @${ECHO} building profiled ${LIB} library 19448104Syokota @rm -f lib${LIB}_p.a 19543105Sdfr @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD} 19643105Sdfr ${RANLIB} lib${LIB}_p.a 19748104Syokota.endif 198115549Sphk 19948104Syokota.if defined(DESTDIR) 20048104SyokotaLDDESTDIRENV?= LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR} 201115549Sphk.endif 20248104Syokota 20343105SdfrSOBJS+= ${OBJS:.o=.So} 20451052Sdfr 20543105Sdfr.if defined(SHLIB_NAME) 206199002Sjkim${SHLIB_NAME}: ${SOBJS} 20743105Sdfr @${ECHO} building shared library ${SHLIB_NAME} 20843105Sdfr @rm -f ${SHLIB_NAME} ${SHLIB_LINK} 20943105Sdfr.if defined(SHLIB_LINK) 210120465Sphk @ln -sf ${SHLIB_NAME} ${SHLIB_LINK} 21143105Sdfr.endif 212199002Sjkim.if ${OBJFORMAT} == aout 21343105Sdfr @${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \ 21443105Sdfr -o ${SHLIB_NAME} \ 215137148Sphk `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 216174985Swkoszek.else 21743105Sdfr @${LDDESTDIRENV} ${CC} -shared -Wl,-x \ 218153072Sru -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \ 21954073Smdodd `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 22048104Syokota.endif 22143105Sdfr.endif 22243105Sdfr 223199002Sjkim.if defined(INSTALL_PIC_ARCHIVE) 22443105Sdfrlib${LIB}_pic.a:: ${SOBJS} 22543105Sdfr @${ECHO} building special pic ${LIB} library 226142833Siedowse @rm -f lib${LIB}_pic.a 227142833Siedowse @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD} 228142833Siedowse ${RANLIB} lib${LIB}_pic.a 229199229Sjkim.endif 230142833Siedowse 231199229Sjkimllib-l${LIB}.ln: ${SRCS} 232199229Sjkim ${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c} 233199229Sjkim 234199229Sjkim.if !target(clean) 235142833Siedowseclean: _SUBDIR 236199229Sjkim rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES} 237142833Siedowse rm -f lib${LIB}.a # llib-l${LIB}.ln 238142833Siedowse rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a 239142833Siedowse rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \ 240142833Siedowse ${SHLIB_NAME} ${SHLIB_LINK} \ 241142833Siedowse lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a 242142833Siedowse.if defined(CLEANDIRS) && !empty(CLEANDIRS) 243199229Sjkim rm -rf ${CLEANDIRS} 244198964Sjkim.endif 245199229Sjkim.endif 246142833Siedowse 247142833Siedowse_EXTRADEPEND: 24848104Syokota @TMP=_depend$$$$; \ 24943105Sdfr sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 25043105Sdfr > $$TMP; \ 251130585Sphk mv $$TMP ${DEPENDFILE} 25243105Sdfr.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 253199002Sjkim.if ${OBJFORMAT} == aout 25443105Sdfr echo ${SHLIB_NAME}: \ 25543105Sdfr `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \ 25643105Sdfr >> ${DEPENDFILE} 257130585Sphk.else 25843105Sdfr.if defined(DPADD) && !empty(DPADD) 259199002Sjkim echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 26043105Sdfr.endif 26143105Sdfr.endif 26243105Sdfr.endif 263130585Sphk 26443105Sdfr.if !target(install) 265199002Sjkim.if !target(beforeinstall) 26643105Sdfrbeforeinstall: _includeinstall 26743105Sdfr.endif 26843105Sdfr 269130585Sphk_includeinstall: 27043105Sdfr.if defined(INCS) 271199002Sjkim.for header in ${INCS} 27243105Sdfr cd ${.CURDIR} && \ 27343105Sdfr ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \ 27443105Sdfr ${header} ${DESTDIR}${INCDIR} 275130585Sphk 27643105Sdfr.endfor 277199002Sjkim.endif 27843105Sdfr 27943105Sdfr.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 28043105SdfrSHLINSTALLFLAGS+= -fschg 281130585Sphk.endif 28243105Sdfr 283199002Sjkim_INSTALLFLAGS:= ${INSTALLFLAGS} 28443105Sdfr.for ie in ${INSTALLFLAGS_EDIT} 28543105Sdfr_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 28648104Syokota.endfor 28762225Speter_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 28862225Speter.for ie in ${INSTALLFLAGS_EDIT} 28962225Speter_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 29062225Speter.endfor 29162225Speter 292142833Siedowserealinstall: beforeinstall 293142833Siedowse.if !defined(INTERNALLIB) 29462225Speter ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 29562225Speter ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 29662225Speter.if !defined(NOPROFILE) 29762225Speter ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 29862225Speter ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 29962225Speter.endif 30062225Speter.endif 30162225Speter.if defined(SHLIB_NAME) 30262225Speter ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 30362225Speter ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 30462225Speter ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 30562225Speter.if defined(SHLIB_LINK) 306199229Sjkim ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 307199229Sjkim.endif 308199229Sjkim.endif 309199229Sjkim.if defined(INSTALL_PIC_ARCHIVE) 310199229Sjkim ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 311199229Sjkim ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 312199229Sjkim.endif 313199229Sjkim.if defined(LINKS) && !empty(LINKS) 314199229Sjkim @set ${LINKS}; \ 315199229Sjkim while test $$# -ge 2; do \ 316199229Sjkim l=${DESTDIR}$$1; \ 317199229Sjkim shift; \ 318199229Sjkim t=${DESTDIR}$$1; \ 319199229Sjkim shift; \ 320199229Sjkim ${ECHO} $$t -\> $$l; \ 321199229Sjkim ln -f $$l $$t; \ 322199229Sjkim done; true 323199229Sjkim.endif 324199229Sjkim.if defined(SYMLINKS) && !empty(SYMLINKS) 325199229Sjkim @set ${SYMLINKS}; \ 326199229Sjkim while test $$# -ge 2; do \ 327199229Sjkim l=$$1; \ 328199229Sjkim shift; \ 329199229Sjkim t=${DESTDIR}$$1; \ 330199229Sjkim shift; \ 331199229Sjkim ${ECHO} $$t -\> $$l; \ 332199229Sjkim ln -fs $$l $$t; \ 333199229Sjkim done; true 334199229Sjkim.endif 335199229Sjkim 336199229Sjkiminstall: afterinstall _SUBDIR 337199229Sjkim.if !defined(NOMAN) 338199229Sjkimafterinstall: realinstall maninstall 339199229Sjkim.else 340199229Sjkimafterinstall: realinstall 341199229Sjkim.endif 342199229Sjkim.endif 343199229Sjkim 344199229Sjkim.if !target(regress) 345199229Sjkimregress: 346199229Sjkim.endif 347199229Sjkim 348199229SjkimDISTRIBUTION?= bin 349199229Sjkim.if !target(distribute) 350199229Sjkimdistribute: _SUBDIR 351199229Sjkim.for dist in ${DISTRIBUTION} 352199229Sjkim cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 353199229Sjkim.endfor 354199229Sjkim.endif 355199229Sjkim 356199229Sjkim.if !target(lint) 357199229Sjkimlint: 358199229Sjkim.endif 359199229Sjkim 360199229Sjkim.if !defined(NOMAN) 361199229Sjkim.include <bsd.man.mk> 362199229Sjkim.else 363199229Sjkim.if !target(all-man) 364199229Sjkimall-man: 365199229Sjkim.endif 366199229Sjkim.if !target(maninstall) 367199229Sjkimmaninstall: 368199229Sjkim.endif 369199229Sjkim.endif 370199229Sjkim 371199229Sjkim.include <bsd.dep.mk> 372199229Sjkim 373199229Sjkim.if !exists(${DEPENDFILE}) 374199229Sjkim${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 375199229Sjkim.endif 376199229Sjkim 377199229Sjkim.include <bsd.obj.mk> 378199229Sjkim 379.include <bsd.sys.mk> 380