diff options
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | build-aux/ltmain.in | 3 | ||||
-rw-r--r-- | doc/libtool.texi | 21 | ||||
-rw-r--r-- | doc/notes.texi | 15 | ||||
-rw-r--r-- | m4/libtool.m4 | 72 |
5 files changed, 97 insertions, 20 deletions
@@ -7,6 +7,9 @@ NEWS - list of user-visible changes between releases of GNU Libtool - Libtoolize searches for the best available M4 on the user PATH at runtime, rather than settling for the first one found. + - Support munging sys_lib_dlsearch_path_spec with LT_SYS_LIBRARY_PATH + environment variable. + ** Bug fixes: - Bail out at configure time if the installed M4 is not sufficient @@ -24,9 +27,6 @@ NEWS - list of user-visible changes between releases of GNU Libtool ia64-hp-hpux*, because the default system runtime loader path does not contain them. - - For various GNU/Linux (and other GNU OSes) on 64bit glibc/ELF hosts, - explicit /lib64 and /usr/lib64 rpaths are no longer necessary. - * Noteworthy changes in release 2.4.4 (2014-11-29) [stable] diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in index a72c007c..42048dfe 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in @@ -5525,6 +5525,9 @@ func_mode_link () eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" diff --git a/doc/libtool.texi b/doc/libtool.texi index 90aeb8ff..06322259 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -2419,6 +2419,27 @@ Program to use rather than checking for @command{mt}, the Manifest Tool. Only used on Cygwin/MS-Windows at the moment. @end defvar +@defvar LT_SYS_LIBRARY_PATH +Libtool has heuristics for the system search path for runtime-loaded +libraries. If the guessed default does not match the setup of the host +system, this variable can be used to modify that path list, as follows +(@code{LT_SYS_LIBRARY_PATH} is a colon-delimited list like @code{PATH}): +@itemize @bullet +@item @code{path:} +The heuristically determined paths will be appened after the trailing +colon; +@item @code{:path} +The heuristically determined paths will be prepended before the leading +colon; +@item @code{path::path} +The heuristically determined paths will be inserted between the double +colons; +@item @code{path} +With no dangling colons, the heuristically determined paths will be +ignored entirely. +@end itemize +@end defvar + With 1.3 era libtool, if you wanted to know any details of what libtool had discovered about your architecture and environment, you had to run the script with @option{--config} and grep through the diff --git a/doc/notes.texi b/doc/notes.texi index a99bbbd6..1fa8a0b9 100644 --- a/doc/notes.texi +++ b/doc/notes.texi @@ -68,13 +68,12 @@ to use autoconf-mode, which is distributed with GNU Emacs 21, Autoconf itself, and all recent releases of XEmacs. @item -When building on some GNU/Linux systems for multilib targets -@command{libtool} sometimes guesses the wrong paths that the linker -and dynamic linker search by default. If this occurs, you may override -libtool's guesses at @command{configure} time by setting the -@command{autoconf} cache variables -@code{lt_cv_sys_lib_search_path_spec} and -@code{lt_cv_sys_lib_dlsearch_path_spec} respectively to the correct search -paths. +When building on some GNU/Linux systems for multilib targets @command{libtool} +sometimes guesses the wrong paths that the linker and dynamic linker search by +default. If this occurs for the dynamic library path, you may use the +@code{LT_SYS_LIBRARY_PATH} environment variable to adjust. Otherwise, at +@command{configure} time you may override libtool's guesses by setting the +@command{autoconf} cache variables @code{lt_cv_sys_lib_search_path_spec} and +@code{lt_cv_sys_lib_dlsearch_path_spec} respectively. @end itemize diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 2f52305f..fd7108e4 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -727,6 +727,15 @@ _LT_LIBTOOL_TAG_VARS _LT_EOF + cat <<'_LT_EOF' >> "$cfgfile" +## -------------------------------------- ## +## Shell functions shared with configure. ## +## -------------------------------------- ## + +_LT_PREPARE_MUNGE_PATH_LIST + +_LT_EOF + case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" @@ -2202,6 +2211,47 @@ _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \$@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics @@ -2212,6 +2262,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ @@ -2306,6 +2357,9 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor @@ -2791,19 +2845,16 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi - # Ideally we could use /sbin/ldconfig to report what directories are - # searched, but (aside from not being certain /sbin/ldconfig is - # available) Fedora on 64bit does not report /usr/lib64, even though - # it is searched at run-time. - case $host_cpu in - # match at least x86_64, ia64, powerpc64*, s390x (add other glibc/ELF 64bit cpus here): - *64*|s390x) sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 $sys_lib_dlsearch_path_spec" ;; - esac # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the @@ -3023,6 +3074,9 @@ fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi + +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi |