> * Bruno Haible wrote on Sat, Mar 20, 2010 at 11:52:25PM CET: > > lib-ignore: Determine different options for different compilers. > > * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Set a variable which > > depends on the current language (C/C++/Fortran). Don't set LDFLAGS. > > Add comments. > > (_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS): New macro. > > * NEWS: Mention the change.
I've committed this patch now, including Ralf's comments about libtool, below. Jim, for coreutils, I propose this patch: ============================================================================= 2010-03-28 Bruno Haible <br...@clisp.org> Update after change in gnulib's lib-ignore module. * src/Makefile.am (AM_LDFLAGS): New variable. --- src/Makefile.am.orig Sun Mar 28 11:31:05 2010 +++ src/Makefile.am Sun Mar 28 11:30:27 2010 @@ -170,6 +170,9 @@ noinst_LIBRARIES = libver.a nodist_libver_a_SOURCES = version.c version.h +# Tell the linker to omit references to unused shared libraries. +AM_LDFLAGS = $(IGNORE_UNUSED_LIBRARIES_CFLAGS) + # Sometimes, the expansion of $(LIBINTL) includes -lc which may # include modules defining variables like `optind', so libcoreutils.a # must precede $(LIBINTL) in order to ensure we use GNU getopt. ============================================================================= 2010-03-28 Bruno Haible <br...@clisp.org> Ralf Wildenhues <ralf.wildenh...@gmx.de> lib-ignore: Determine different options for different compilers. * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Set a variable which depends on the current language (C/C++/Fortran). Don't set LDFLAGS. Add comments. (_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS): New macro. * NEWS: Mention the change. *** NEWS.orig Sun Mar 28 11:23:19 2010 --- NEWS Sun Mar 28 11:23:01 2010 *************** *** 6,11 **** --- 6,17 ---- Date Modules Changes + 2010-03-28 lib-ignore This module now provides a variable + IGNORE_UNUSED_LIBRARIES_CFLAGS that you should + add to LDFLAGS (when linking C programs only) or + CFLAGS yourself. It is no longer added to LDFLAGS + automatically. + 2010-03-18 pty This module now only declares the pty.h header. Use the new modules 'forkpty' or 'openpty' to get the functions that were previously provided. *** m4/lib-ignore.m4.orig Sun Mar 28 11:23:19 2010 --- m4/lib-ignore.m4 Sun Mar 28 11:21:08 2010 *************** *** 7,17 **** dnl Written by Paul Eggert. AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES], [ ! AC_CACHE_CHECK([for flag to ignore unused libraries], ! [gl_cv_ignore_unused_libraries], ! [gl_cv_ignore_unused_libraries=none gl_saved_ldflags=$LDFLAGS gl_saved_libs=$LIBS # Link with -lm to detect binutils 2.16 bug with --as-needed; see --- 7,55 ---- dnl Written by Paul Eggert. + # gl_IGNORE_UNUSED_LIBRARIES + # -------------------------- + # Determines the option to be passed to the C/C++/Fortran compiler, so that it + # omits unused libraries. + # Example (on Solaris): + # $ cc foo.c -lnsl; ldd ./a.out + # libnsl.so.1 => /lib/libnsl.so.1 + # libc.so.1 => /lib/libc.so.1 + # libmp.so.2 => /lib/libmp.so.2 + # libmd.so.1 => /lib/libmd.so.1 + # libscf.so.1 => /lib/libscf.so.1 + # libdoor.so.1 => /lib/libdoor.so.1 + # libuutil.so.1 => /lib/libuutil.so.1 + # libgen.so.1 => /lib/libgen.so.1 + # libm.so.2 => /lib/libm.so.2 + # $ cc foo.c -lnsl -Wl,-z,ignore; ldd ./a.out + # libc.so.1 => /lib/libc.so.1 + # libm.so.2 => /lib/libm.so.2 + # + # Note that the option works only for the C compiler, not for the C++ + # compiler: + # - Sun C likes '-Wl,-z,ignore'. + # '-Qoption ld -z,ignore' is not accepted. + # '-z ignore' is accepted but has no effect. + # - Sun C++ and Sun Fortran like '-Qoption ld -z,ignore'. + # '-Wl,-z,ignore' is not accepted. + # '-z ignore' is accepted but has no effect. + # + # Sets and substitutes a variable that depends on the current language: + # - IGNORE_UNUSED_LIBRARIES_CFLAGS for C + # - IGNORE_UNUSED_LIBRARIES_CXXFLAGS for C++ + # - IGNORE_UNUSED_LIBRARIES_FFLAGS for Fortran + # + # Note that the option works only for direct invocation of the compiler, not + # through libtool: When libtool is used to create a shared library, it will + # honor and translate '-Wl,-z,ignore' to '-Qoption ld -z -Qoption ld ignore' + # if needed, but it will drop a '-Qoption ld -z,ignore' on the command line. + # AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES], [ ! AC_CACHE_CHECK([for []_AC_LANG[] compiler flag to ignore unused libraries], ! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries], ! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=none gl_saved_ldflags=$LDFLAGS gl_saved_libs=$LIBS # Link with -lm to detect binutils 2.16 bug with --as-needed; see *************** *** 21,43 **** # to forestall problems with linkers that have -z, -i, -g, -n, etc. flags. # GCC + binutils likes '-Wl,--as-needed'. # GCC + Solaris ld likes '-Wl,-z,ignore'. ! # Sun C likes '-z ignore'. # Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11 # native cc issues annoying warnings and then ignores it, # which would cause us to incorrectly conclude that it worked. ! for gl_flags in \ ! '-Wl,--as-needed' \ ! '-Wl,-z,ignore' \ ! '-z ignore' do LDFLAGS="$gl_flags $LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM()], ! [gl_cv_ignore_unused_libraries=$gl_flags]) LDFLAGS=$gl_saved_ldflags ! test "$gl_cv_ignore_unused_libraries" != none && break done ! LIBS=$gl_saved_libs]) ! test "$gl_cv_ignore_unused_libraries" != none && ! LDFLAGS="$LDFLAGS $gl_cv_ignore_unused_libraries" ]) --- 59,115 ---- # to forestall problems with linkers that have -z, -i, -g, -n, etc. flags. # GCC + binutils likes '-Wl,--as-needed'. # GCC + Solaris ld likes '-Wl,-z,ignore'. ! # Sun C likes '-Wl,-z,ignore'. '-z ignore' is accepted but has no effect. # Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11 # native cc issues annoying warnings and then ignores it, # which would cause us to incorrectly conclude that it worked. ! for gl_flags in _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS do LDFLAGS="$gl_flags $LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM()], ! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=$gl_flags]) LDFLAGS=$gl_saved_ldflags ! test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none && ! break done ! LIBS=$gl_saved_libs ! ]) ! IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS= ! if test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none; then ! IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS="$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" ! fi ! AC_SUBST([IGNORE_UNUSED_LIBRARIES_]_AC_LANG_PREFIX[FLAGS]) ! ]) ! ! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS ! # ----------------------------------- ! # Expands to the language dependent options to be tried. ! AC_DEFUN([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS], ! [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) ! ! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C) ! # -------------------------------------- ! m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)], ! [ '-Wl,--as-needed' \ ! '-Wl,-z,ignore' \ ! '-z ignore' ! ]) ! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++) ! # ---------------------------------------- ! m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)], ! [ '-Wl,--as-needed' \ ! '-Qoption ld -z,ignore' \ ! '-Wl,-z,ignore' \ ! '-z ignore' ]) + + # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77) + # ----------------------------------------------- + m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)], + [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)]) + + # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran) + # -------------------------------------------- + m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)], + [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)])