Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/share/mk/bsd.lib.mk,v rcsdiff: /ftp/cvs/cvsroot/src/share/mk/bsd.lib.mk,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.281 retrieving revision 1.289.2.2.2.1.2.3 diff -u -p -r1.281 -r1.289.2.2.2.1.2.3 --- src/share/mk/bsd.lib.mk 2008/05/03 14:48:31 1.281 +++ src/share/mk/bsd.lib.mk 2014/04/04 05:07:14 1.289.2.2.2.1.2.3 @@ -1,4 +1,4 @@ -# $NetBSD: bsd.lib.mk,v 1.281 2008/05/03 14:48:31 lukem Exp $ +# $NetBSD: bsd.lib.mk,v 1.289.2.2.2.1.2.3 2014/04/04 05:07:14 matt Exp $ # @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94 .include @@ -7,12 +7,30 @@ # Pull in here so we can override its .c.o rule .include +LIBISMODULE?= no LIBISPRIVATE?= no +LIBISCXX?= no + +_LIB_PREFIX= lib + +.if ${LIBISMODULE} != "no" +_LIB_PREFIX= # empty +MKDEBUGLIB:= no +MKLINT:= no +MKPICINSTALL:= no +MKPROFILE:= no +MKSTATICLIB:= no +.endif .if ${LIBISPRIVATE} != "no" MKDEBUGLIB:= no MKLINT:= no +MKPICINSTALL:= no +. if defined(NOSTATICLIB) && ${MKPICLIB} != "no" +MKSTATICLIB:= no +. else MKPIC:= no +. endif MKPROFILE:= no .endif @@ -22,6 +40,13 @@ realinstall: checkver libinstall clean: cleanlib ##### LIB specific flags. +# XXX: This is needed for programs that link with .a libraries +# Perhaps a more correct solution is to always generate _pic.a +# files or always have a shared library. +.if defined(MKPIE) && (${MKPIE} != "no") +CFLAGS+= ${PIE_CFLAGS} +AFLAGS+= ${PIE_AFLAGS} +.endif COPTS+= ${COPTS.lib${LIB}} CPPFLAGS+= ${CPPFLAGS.lib${LIB}} CXXFLAGS+= ${CXXFLAGS.lib${LIB}} @@ -43,7 +68,7 @@ DPADD+= ${LIBDO.${_lib}}/lib${_lib}.so .endif # } ##### Build and install rules -MKDEP_SUFFIXES?= .o .po .so .ln +MKDEP_SUFFIXES?= .o .po .so .go .ln CPPFLAGS+= ${DESTDIR:D-nostdinc ${CPPFLAG_ISYSTEM} ${DESTDIR}/usr/include} CXXFLAGS+= ${DESTDIR:D-nostdinc++ ${CPPFLAG_ISYSTEMXX} ${DESTDIR}/usr/include/g++} @@ -57,6 +82,7 @@ SHLIB_TEENY != . ${SHLIB_VERSION_FILE} ; exists(${NETBSDSRCDIR}/lib/checkver) checkver: @(cd ${.CURDIR} && \ + HOST_SH=${HOST_SH:Q} AWK=${TOOL_AWK:Q} \ ${HOST_SH} ${NETBSDSRCDIR}/lib/checkver -v ${SHLIB_VERSION_FILE} \ -d ${DESTDIR}${_LIBSODIR} ${LIB}) .endif @@ -174,10 +200,10 @@ MKSHLIBOBJS= no # Platform-independent linker flags for ELF shared libraries .if ${OBJECT_FMT} == "ELF" SHLIB_SOVERSION= ${SHLIB_MAJOR} -SHLIB_SHFLAGS= -Wl,-soname,lib${LIB}.so.${SHLIB_SOVERSION} +SHLIB_SHFLAGS= -Wl,-soname,${_LIB_PREFIX}${LIB}.so.${SHLIB_SOVERSION} SHLIB_SHFLAGS+= -Wl,--warn-shared-textrel -SHLIB_LDSTARTFILE?= ${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGINS} -SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${DESTDIR}/usr/lib/crtn.o +SHLIB_LDSTARTFILE?= ${_GCC_CRTDIR}/crti.o ${_GCC_CRTBEGINS} +SHLIB_LDENDFILE?= ${_GCC_CRTENDS} ${_GCC_CRTDIR}/crtn.o .endif CFLAGS+= ${COPTS} @@ -189,14 +215,14 @@ FFLAGS+= ${FOPTS} ${_MKTARGET_COMPILE} ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .c.po: ${_MKTARGET_COMPILE} ${COMPILE.c} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .c.go: @@ -207,21 +233,21 @@ FFLAGS+= ${FOPTS} ${_MKTARGET_COMPILE} ${COMPILE.c} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .cc.o .cpp.o .cxx.o .C.o: ${_MKTARGET_COMPILE} ${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .cc.po .cpp.po .cxx.po .C.po: ${_MKTARGET_COMPILE} ${COMPILE.cc} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} -pg ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .cc.go .cpp.go .cxx.go .C.go: @@ -232,21 +258,21 @@ FFLAGS+= ${FOPTS} ${_MKTARGET_COMPILE} ${COMPILE.cc} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${CSHLIBFLAGS} ${.IMPSRC} -o ${.TARGET} .if !defined(CFLAGS) || empty(CFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .f.o: ${_MKTARGET_COMPILE} ${COMPILE.f} ${.IMPSRC} -o ${.TARGET} .if !defined(FOPTS) || empty(FOPTS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .f.po: ${_MKTARGET_COMPILE} ${COMPILE.f} ${PROFFLAGS} -pg ${.IMPSRC} -o ${.TARGET} .if !defined(FOPTS) || empty(FOPTS:M*-g*) - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .f.go: @@ -257,7 +283,7 @@ FFLAGS+= ${FOPTS} ${_MKTARGET_COMPILE} ${COMPILE.f} ${FPICFLAGS} ${.IMPSRC} -o ${.TARGET} .if !defined(FOPTS) || empty(FOPTS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .f.ln: @@ -268,49 +294,49 @@ FFLAGS+= ${FOPTS} ${_MKTARGET_COMPILE} ${COMPILE.m} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .m.po: ${_MKTARGET_COMPILE} ${COMPILE.m} ${PROFFLAGS} -pg ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .m.go: ${_MKTARGET_COMPILE} ${COMPILE.m} ${DEBUGFLAGS} -g ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .m.so: ${_MKTARGET_COMPILE} ${COMPILE.m} ${CSHLIBFLAGS} ${OBJCOPTS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} .if !defined(OBJCFLAGS) || empty(OBJCFLAGS:M*-g*) - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .endif .s.o: ${_MKTARGET_COMPILE} ${COMPILE.s} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .S.o: ${_MKTARGET_COMPILE} ${COMPILE.S} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .s.po: ${_MKTARGET_COMPILE} ${COMPILE.s} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .S.po: ${_MKTARGET_COMPILE} ${COMPILE.S} ${PROFFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -X ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .s.go: ${_MKTARGET_COMPILE} @@ -323,12 +349,12 @@ FFLAGS+= ${FOPTS} .s.so: ${_MKTARGET_COMPILE} ${COMPILE.s} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .S.so: ${_MKTARGET_COMPILE} ${COMPILE.S} ${CAPICFLAGS} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} -o ${.TARGET} - ${OBJCOPY} -x ${.TARGET} + ${OBJCOPY} ${OBJCOPYLIBFLAGS} ${.TARGET} .if defined(LIB) # { .if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ @@ -347,7 +373,7 @@ LOBJS+=${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.l .if ${LIBISPRIVATE} != "no" # No installation is required libinstall:: -.else # ${LIBISPRIVATE} == "no" # { +.endif # ${LIBISPRIVATE} == "no" # { .if ${MKDEBUGLIB} != "no" _LIBS+=lib${LIB}_g.a @@ -386,8 +412,6 @@ _LIBS+=lib${LIB}.so.${SHLIB_FULLVERSION} _LIBS+=llib-l${LIB}.ln .endif -.endif # ${LIBISPRIVATE} == "no" # } - ALLOBJS= .if (${MKPIC} == "no" || (defined(LDSTATIC) && ${LDSTATIC} != "") \ || ${MKLINKLIB} != "no") && ${MKSTATICLIB} != "no" @@ -469,31 +493,44 @@ LDADD+= -lgcc_pic .endif .endif +.if ${LIBISCXX} != "no" +LIBCC:= ${CXX} +.else +LIBCC:= ${CC} +.endif + lib${LIB}.so.${SHLIB_FULLVERSION}: ${SOLIB} ${DPADD} ${DPLIBC} \ ${SHLIB_LDSTARTFILE} ${SHLIB_LDENDFILE} ${_MKTARGET_BUILD} rm -f lib${LIB}.so.${SHLIB_FULLVERSION} .if defined(DESTDIR) - ${CC} ${LDLIBC} -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \ + ${LIBCC} ${LDLIBC} -Wl,-nostdlib -B${_GCC_CRTDIR}/ -B${DESTDIR}${SHLIBDIR}/ \ ${_LIBLDOPTS} \ - -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} -o ${.TARGET} \ + -shared ${SHLIB_SHFLAGS} ${LDFLAGS} -o ${.TARGET} \ -Wl,--whole-archive ${SOLIB} \ -Wl,--no-whole-archive ${LDADD} \ -L${_GCC_LIBGCCDIR} .else - ${CC} ${LDLIBC} -Wl,-x -shared ${SHLIB_SHFLAGS} ${LDFLAGS} \ + ${LIBCC} ${LDLIBC} -shared ${SHLIB_SHFLAGS} ${LDFLAGS} \ -o ${.TARGET} ${_LIBLDOPTS} \ -Wl,--whole-archive ${SOLIB} -Wl,--no-whole-archive ${LDADD} .endif + ${OBJCOPY} -x ${.TARGET} .if ${OBJECT_FMT} == "ELF" # We don't use INSTALL_SYMLINK here because this is just # happening inside the build directory/objdir. XXX Why does # this spend so much effort on libraries that aren't live??? XXX +.if defined(SHLIB_FULLVERSION) && defined(SHLIB_MAJOR) && \ + "${SHLIB_FULLVERSION}" != "${SHLIB_MAJOR}" ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.${SHLIB_MAJOR}.tmp mv -f lib${LIB}.so.${SHLIB_MAJOR}.tmp lib${LIB}.so.${SHLIB_MAJOR} +.endif ${HOST_LN} -sf lib${LIB}.so.${SHLIB_FULLVERSION} lib${LIB}.so.tmp mv -f lib${LIB}.so.tmp lib${LIB}.so .endif +.if ${MKSTRIPIDENT} != "no" + ${OBJCOPY} -R .ident ${.TARGET} +.endif .if !empty(LOBJS) # { LLIBS?= -lc @@ -603,48 +640,54 @@ ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a: lib .endif .if ${MKPIC} != "no" && defined(SHLIB_FULLVERSION) -libinstall:: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} -.PRECIOUS: ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} +_LIB_SO_TGT= ${DESTDIR}${_LIBSODIR}/${_LIB_PREFIX}${LIB}.so +_LIB_SO_TGTLIBDIR= ${DESTDIR}${LIBDIR}/${_LIB_PREFIX}${LIB}.so + +libinstall:: ${_LIB_SO_TGT}.${SHLIB_FULLVERSION} +.PRECIOUS: ${_LIB_SO_TGT}.${SHLIB_FULLVERSION} .if ${MKUPDATE} == "no" .if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) -${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! .MADE +${_LIB_SO_TGT}.${SHLIB_FULLVERSION}! .MADE .endif -${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION} +${_LIB_SO_TGT}.${SHLIB_FULLVERSION}! lib${LIB}.so.${SHLIB_FULLVERSION} .else .if !defined(BUILD) && !make(all) && !make(lib${LIB}.so.${SHLIB_FULLVERSION}) -${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: .MADE +${_LIB_SO_TGT}.${SHLIB_FULLVERSION}: .MADE .endif -${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} +${_LIB_SO_TGT}.${SHLIB_FULLVERSION}: lib${LIB}.so.${SHLIB_FULLVERSION} .endif ${_MKTARGET_INSTALL} ${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${.ALLSRC} ${.TARGET} .if ${_LIBSODIR} != ${LIBDIR} - ${INSTALL_SYMLINK} \ - -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ - ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_FULLVERSION} + ${INSTALL_SYMLINK} -l r \ + ${_LIB_SO_TGT}.${SHLIB_FULLVERSION} \ + ${_LIB_SO_TGTLIBDIR}.${SHLIB_FULLVERSION} .endif .if ${OBJECT_FMT} == "a.out" && !defined(DESTDIR) /sbin/ldconfig -m ${_LIBSODIR} ${LIBDIR} .endif .if ${OBJECT_FMT} == "ELF" +.if defined(SHLIB_FULLVERSION) && defined(SHLIB_MAJOR) && \ + "${SHLIB_FULLVERSION}" != "${SHLIB_MAJOR}" ${INSTALL_SYMLINK} \ - lib${LIB}.so.${SHLIB_FULLVERSION} \ - ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_MAJOR} + ${_LIB_PREFIX}${LIB}.so.${SHLIB_FULLVERSION} \ + ${_LIB_SO_TGT}.${SHLIB_MAJOR} .if ${_LIBSODIR} != ${LIBDIR} - ${INSTALL_SYMLINK} \ - -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ - ${DESTDIR}${LIBDIR}/lib${LIB}.so.${SHLIB_MAJOR} + ${INSTALL_SYMLINK} -l r \ + ${_LIB_SO_TGT}.${SHLIB_FULLVERSION} \ + ${_LIB_SO_TGTLIBDIR}.${SHLIB_MAJOR} +.endif .endif .if ${MKLINKLIB} != "no" ${INSTALL_SYMLINK} \ - lib${LIB}.so.${SHLIB_FULLVERSION} \ - ${DESTDIR}${_LIBSODIR}/lib${LIB}.so + ${_LIB_PREFIX}${LIB}.so.${SHLIB_FULLVERSION} \ + ${_LIB_SO_TGT} .if ${_LIBSODIR} != ${LIBDIR} - ${INSTALL_SYMLINK} \ - -l r ${DESTDIR}${_LIBSODIR}/lib${LIB}.so.${SHLIB_FULLVERSION} \ - ${DESTDIR}${LIBDIR}/lib${LIB}.so + ${INSTALL_SYMLINK} -l r \ + ${_LIB_SO_TGT}.${SHLIB_FULLVERSION} \ + ${_LIB_SO_TGTLIBDIR} .endif .endif .endif @@ -672,6 +715,9 @@ ${DESTDIR}${LINTLIBDIR}/llib-l${LIB}.ln: .endif # !target(libinstall) # } ##### Pull in related .mk logic +LINKSOWN?= ${LIBOWN} +LINKSGRP?= ${LIBGRP} +LINKSMODE?= ${LIBMODE} .include .include .include