diff options
author | Peter Rosin <peda@lysator.liu.se> | 2013-09-17 20:33:12 +0200 |
---|---|---|
committer | Gary V. Vaughan <gary@gnu.org> | 2014-10-26 20:29:23 +0000 |
commit | 9d7c3ed698cedc3ee9ec2820b8b7589e1701bafd (patch) | |
tree | de63f8f665b14a0a5811f4ebde57956afa448b38 | |
parent | bd46c774161868e6e8b70bd4c32cfee0ef8db3fb (diff) | |
download | libtool-9d7c3ed698cedc3ee9ec2820b8b7589e1701bafd.tar.gz |
libtool: trust -print-search-dirs from recent GCC
Alan Modra hints in [1] that -print-search-dirs was fixed in
GCC 4.2(?), so that it nowadays automatically appends
-print-multi-os-directory for the applicable directories. I.e.
it should no longer be necessary for libtool to append a second
../lib64 when GCC has already done so. Also, the multi-os
appending loop seems to have been added specifically for early
(arguably broken) bi-arch enabled GCCs that printed -m32
directories even though -m64 was the default [2]. So, my
conclusion is that we want any libtool magic to affect
-print-search-dirs output from contemporary GCCs as little as
possible, while continuing to append the
-print-multi-os-directory for the legacy case.
Fixes bug#15321 reported by Ozkan Sezer.
[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20425
[2] http://lists.gnu.org/archive/html/bug-libtool/2006-09/msg00019.html
* m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER): If any of the
directories printed by -print-search-dirs ends with the
content of -print-multi-os-directory, then assume that
GCC adds the multi-os-directory where appropriate all by
itself and hence don't try to second guess when to add
it manually.
* THANKS: Update.
Conflicts:
THANKS
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | libltdl/m4/libtool.m4 | 17 |
2 files changed, 13 insertions, 5 deletions
@@ -149,6 +149,7 @@ Nix nix@esperi.org.uk Olaf Lenz olenz@fias.uni-frankfurt.de Olly Betts olly@muscat.co.uk + Ozkan Sezer sezeroz@gmail.com Patrice Fromy patrice.fromy@u-psud.fr Patrick Welche prlw1@newn.cam.ac.uk Paul Biggar paul.biggar@gmail.com diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 index dc016824..2aba5497 100644 --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 @@ -2221,13 +2221,20 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi |