summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rosin <peda@lysator.liu.se>2013-09-17 20:33:12 +0200
committerGary V. Vaughan <gary@gnu.org>2014-10-26 20:29:23 +0000
commit9d7c3ed698cedc3ee9ec2820b8b7589e1701bafd (patch)
treede63f8f665b14a0a5811f4ebde57956afa448b38
parentbd46c774161868e6e8b70bd4c32cfee0ef8db3fb (diff)
downloadlibtool-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--THANKS1
-rw-r--r--libltdl/m4/libtool.m417
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