From 0771f626ab33a517372f630331d1887252521bcf Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 28 Mar 2010 11:23:57 +0200 Subject: [PATCH] lib-ignore: Determine different options for different compilers. --- ChangeLog | 10 ++++++ NEWS | 6 ++++ m4/lib-ignore.m4 | 98 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 101 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 97ad7c37c..dca5a125c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2010-03-28 Bruno Haible + Ralf Wildenhues + + 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. + 2010-03-27 Bruno Haible Remove unused GNULIB_XYZ macro definitions. diff --git a/NEWS b/NEWS index 0074492c5..778e3b965 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,12 @@ User visible incompatible changes 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. diff --git a/m4/lib-ignore.m4 b/m4/lib-ignore.m4 index 0236cb545..a67b002c0 100644 --- a/m4/lib-ignore.m4 +++ b/m4/lib-ignore.m4 @@ -7,11 +7,49 @@ dnl with or without modifications, as long as this notice is preserved. 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 flag to ignore unused libraries], - [gl_cv_ignore_unused_libraries], - [gl_cv_ignore_unused_libraries=none + 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,23 +59,57 @@ AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES], # 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'. + # 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 \ - '-Wl,--as-needed' \ - '-Wl,-z,ignore' \ - '-z ignore' + for gl_flags in _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS do LDFLAGS="$gl_flags $LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM()], - [gl_cv_ignore_unused_libraries=$gl_flags]) + [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=$gl_flags]) LDFLAGS=$gl_saved_ldflags - test "$gl_cv_ignore_unused_libraries" != none && break + test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none && + break done - LIBS=$gl_saved_libs]) + 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' +]) - test "$gl_cv_ignore_unused_libraries" != none && - LDFLAGS="$LDFLAGS $gl_cv_ignore_unused_libraries" +# _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)]) -- 2.11.0