From 9d7c3ed698cedc3ee9ec2820b8b7589e1701bafd Mon Sep 17 00:00:00 2001 From: Peter Rosin Date: Tue, 17 Sep 2013 20:33:12 +0200 Subject: 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 --- THANKS | 1 + libltdl/m4/libtool.m4 | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/THANKS b/THANKS index 07212146..307a3220 100644 --- a/THANKS +++ b/THANKS @@ -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 -- cgit v1.2.1