[ adding libtool-patches ]

Hello Rainer, all,

* Rainer Tammer wrote on Sun, Sep 19, 2010 at 12:55:59PM CEST:
> here is the result of the bisect. I had to slightly change your
> suggested bisect script:
> 
> if grep 'FAIL: f[c7]*demo-exec' checklog; then
> ->
> if grep '^FAIL: ' checklog; then
> 
> Result:

> 2fc264a8e2f7224627bb7c191a38a2dc9e7b5bcb is first bad commit
> commit 2fc264a8e2f7224627bb7c191a38a2dc9e7b5bcb
> Author: Ralf Wildenhues <ralf.wildenh...@gmx.de>
> Date:   Fri Aug 6 22:03:19 2010 +0200
> 
>     Fix AC_NO_EXECUTABLES test failure on AIX.
> 
>     * libltdl/m4/libtool.m4 (_LT_SYS_MODULE_PATH_AIX): Wrap link
>     test in AC_CACHE_VAL, using cache variable $lt_cv_aix_libpath.
>     * tests/no-executables.at (AC_NO_EXECUTABLES): Preset it, to
>     avoid link test.
>     Bug report by Rainer Tammer.

Thank You! for carrying this through until the end!  The timing is
really at the last minute, before this becomes a regression in a
released version.

As far as I can see it, the semantic change of the above patch is that,
before the patch, _LT_SYS_MODULE_PATH_AIX computed the libpath value for
each compiler separately, while now it is done only once, by the C
compiler, and that result reused for the others.  A quick test reveals
that the different compilers add different directories to their path.

Now, The Right Thing[tm] would probably be to somehow merge these paths
intelligently, so that when we link C, C++, and Fortran code together,
all directories are available.  However, at this point I'm *only*
interested in avoiding *regressions* and still keeping the
no-executables issue fixed.

Thus, the attached patch uses, in addition to a global cache variable
(that the user may specify), a set of per-language cache variables.
(The trailing space in the tagvar name is because the CC tagvar has no
_CC suffix, but should not overlap with the global name.)

I'm running it on the AIX systems I have access to now.

Rainer, can you please try it on your problematic system, too, ASAP?

OK to commit?

Thanks,
Ralf
>From c723aee17f21478894ba038711afde125daa1f70 Mon Sep 17 00:00:00 2001
From: Ralf Wildenhues <ralf.wildenh...@gmx.de>
Date: Mon, 20 Sep 2010 21:51:55 +0200
Subject: [PATCH] Revert to per-language libpath computation on AIX.

* libltdl/m4/libtool.m4 (_LT_SYS_MODULE_PATH_AIX): Accept
tagname argument.  Use global cache variable lt_cv_aix_libpath
to override per-language tag variables for the libpath value.
Fix the sed script to remove trailing space.
(_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG): Pass tag argument to
_LT_SYS_MODULE_PATH_AIX.
Tracked down and reported by Rainer Tammer.

Signed-off-by: Ralf Wildenhues <ralf.wildenh...@gmx.de>
---
 ChangeLog             |   11 ++++++++++
 libltdl/m4/libtool.m4 |   54 ++++++++++++++++++++++++++++--------------------
 2 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8ed47f7..3a87052 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-09-20  Ralf Wildenhues  <ralf.wildenh...@gmx.de>
+
+       Revert to per-language libpath computation on AIX.
+       * libltdl/m4/libtool.m4 (_LT_SYS_MODULE_PATH_AIX): Accept
+       tagname argument.  Use global cache variable lt_cv_aix_libpath
+       to override per-language tag variables for the libpath value.
+       Fix the sed script to remove trailing space.
+       (_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG): Pass tag argument to
+       _LT_SYS_MODULE_PATH_AIX.
+       Tracked down and reported by Rainer Tammer.
+
 2010-09-20  Peter Rosin  <p...@lysator.liu.se>
            Ralf Wildenhues  <ralf.wildenh...@gmx.de>
 
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index a8b07bf..2aee398 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -1073,33 +1073,41 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-AC_CACHE_VAL([lt_cv_aix_libpath],
-[AC_LINK_IFELSE([AC_LANG_PROGRAM],[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-lt_cv_aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e 
"$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$lt_cv_aix_libpath"; then
-  lt_cv_aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e 
"$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$lt_cv_aix_libpath"; then lt_cv_aix_libpath="/usr/lib:/lib"; fi
-])
-aix_libpath=$lt_cv_aix_libpath
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 
2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 
2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
 ])# _LT_SYS_MODULE_PATH_AIX
 
 
@@ -4944,7 +4952,7 @@ _LT_EOF
        _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, 
$1)='${wl}-blibpath:$libdir:'"$aix_libpath"
         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname 
$libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test 
"x${allow_undefined_flag}" != "x"; then func_echo_all 
"${wl}${allow_undefined_flag}"; else :; fi` 
'"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
@@ -4955,7 +4963,7 @@ _LT_EOF
        else
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, 
$1)='${wl}-blibpath:$libdir:'"$aix_libpath"
          # Warning - without using the other run time loading flags,
          # -berok will link without error, but may produce a broken library.
@@ -5950,7 +5958,7 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _LT_SYS_MODULE_PATH_AIX([$1])
           _LT_TAGVAR(hardcode_libdir_flag_spec, 
$1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 
           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname 
$libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test 
"x${allow_undefined_flag}" != "x"; then func_echo_all 
"${wl}${allow_undefined_flag}"; else :; fi` 
'"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
@@ -5962,7 +5970,7 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
            # Determine the default libpath from the value encoded in an
            # empty executable.
-           _LT_SYS_MODULE_PATH_AIX
+           _LT_SYS_MODULE_PATH_AIX([$1])
            _LT_TAGVAR(hardcode_libdir_flag_spec, 
$1)='${wl}-blibpath:$libdir:'"$aix_libpath"
            # Warning - without using the other run time loading flags,
            # -berok will link without error, but may produce a broken library.
-- 
1.7.3.rc1

Reply via email to