On Nov 14, 2013 6:34 PM, "Thomas De Schampheleire" < [email protected]> wrote: > > # HG changeset patch > # User Thomas De Schampheleire <[email protected] > > # Date 1384427165 -3600 > # Node ID e2a04d7b8981bcc7de64e12251eb5fd52c1096f5 > # Parent 0c37f66b4f3b7f32b02a98fad3d8368c283a2b61 > link: disable --as-needed to fix gettext on some systems > > In some configurations, vim fails to link correctly with messages such as: > edit.c:(.text+0x1614): undefined reference to `libintl_gettext' > > In particular, this has been seen by the buildroot autobuilds (see [1]) but > has also been reported at [2] and [3]. > > In the bad case, the configure script says: > checking for NLS... gettext() works > In the good case, it says: > checking for NLS... gettext() works with -lintl > > In the bad case, the system has libelf, vim detects that and takes it along > in $LIBS. Libelf needs libintl on this system, and so linking the test > program with -lelf will automatically take -lintl too. This causes configure > to think gettext() does not need libintl, while in reality it does. > > In the good case, libelf is not present and thus not used. The first > configure test for gettext fails, and then configure retries with -lintl > (which succeeds). > > Until now, there isn't really a problem. In both cases, you could link > correctly. In the 'bad' case, libintl is implicitly taken through libelf, in > the second case it is explicitly taken. > > The real problem occurs because configure also tests whether the linker > supports --as-needed and uses it when possible, instead of the link.sh > script. However, --as-needed seems to cause libintl NOT to be taken in the > bad case, causing the undefined references to libintl_gettext. If you remove > --as-needed from the link command, it succeeds.
I think disabling --as-needed is not a proper fix. Should not you instead construct a check which will catch this case and force -lintl? If I read correctly you make build system link with a bolder libelf while only libintl is needed and not the whole libelf. > [1] http://autobuild.buildroot.net/results/21b5a910e6a27fa1cb12d0002ffed7e6ed9d6c83/ > [2] http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2012-November/243930.html > [3] http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2012-May/234184.html > > > Signed-off-by: Thomas De Schampheleire <[email protected]> > > --- > src/auto/configure | 15 --------------- > src/configure.in | 20 ++++++-------------- > 2 files changed, 6 insertions(+), 29 deletions(-) > > diff --git a/src/auto/configure b/src/auto/configure > --- a/src/auto/configure > +++ b/src/auto/configure > @@ -13049,23 +13049,7 @@ if test "$GCC" = yes; then > fi > fi > > - > -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5 > -$as_echo_n "checking linker --as-needed support... " >&6; } > LINK_AS_NEEDED= > -# Check if linker supports --as-needed and --no-as-needed options > -if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then > - LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'` > - LINK_AS_NEEDED=yes > -fi > -if test "$LINK_AS_NEEDED" = yes; then > - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 > -$as_echo "yes" >&6; } > -else > - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 > -$as_echo "no" >&6; } > -fi > - > > # IBM z/OS reset CFLAGS for config.mk > if test "$zOSUnix" = "yes"; then > diff --git a/src/configure.in b/src/configure.in > --- a/src/configure.in > +++ b/src/configure.in > @@ -3907,21 +3907,13 @@ if test "$GCC" = yes; then > fi > AC_SUBST(DEPEND_CFLAGS_FILTER) > > -dnl link.sh tries to avoid overlinking in a hackish way. > -dnl At least GNU ld supports --as-needed which provides the same functionality > -dnl at linker level. Let's use it. > -AC_MSG_CHECKING(linker --as-needed support) > +dnl On some systems, libelf needs libintl. In this case, when the configure > +dnl script tests how to link for gettext support, it will think libintl is not > +dnl needed (but in reality it is, it was simply implicitly through libelf). > +dnl When the final link command uses --as-needed, libintl won't be taken in, > +dnl not even through libelf, and the link fails with undefined references to > +dnl libintl_gettext. Hence, disable --as-needed. > LINK_AS_NEEDED= > -# Check if linker supports --as-needed and --no-as-needed options > -if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then > - LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'` > - LINK_AS_NEEDED=yes > -fi > -if test "$LINK_AS_NEEDED" = yes; then > - AC_MSG_RESULT(yes) > -else > - AC_MSG_RESULT(no) > -fi > AC_SUBST(LINK_AS_NEEDED) > > # IBM z/OS reset CFLAGS for config.mk > > -- > -- > You received this message from the "vim_dev" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > > --- > You received this message because you are subscribed to the Google Groups "vim_dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
