---
 libltdl/config/ltmain.m4sh |   81 ++++++++++++++++++++++++++++++++-----------
 1 files changed, 60 insertions(+), 21 deletions(-)

diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 8864916..4251bb3 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -565,6 +565,36 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Change PATH to an absolute path or replace a leading = with a
+# sysroot.  Store the result into func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  [\\/]* | [A-Za-z]:[\\/]*) ;;
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  *)
+    if test -d "$1"; then
+      absdir=`cd "$1" && pwd`
+      test -z "$absdir" && \
+        func_fatal_error "cannot determine absolute directory name of \`$dir'"
+      func_resolve_sysroot_result=`cd "$dir" && pwd`
+    else
+      func_dirname_and_basename "$1" "" "."
+      absdir=`cd "$func_dirname_result" && pwd`
+      test -z "$absdir" && \
+        func_fatal_error "cannot determine absolute directory name of 
\`$func_dirname_result'"
+      func_resolve_sysroot_result="$absdir/$func_basename_result"
+    fi
+    ;;
+  esac
+}
+
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -4062,29 +4092,26 @@ func_mode_link ()
        ;;
 
       -L*)
-       func_stripname '-L' '' "$arg"
-       dir=$func_stripname_result
-       if test -z "$dir"; then
+       func_stripname "-L" '' "$1"
+       if test -z "$func_stripname_result"; then
          if test "$#" -gt 0; then
            func_fatal_error "require no space between \`-L' and \`$1'"
          else
            func_fatal_error "need path for \`-L' option"
          fi
        fi
-       # We need an absolute path.
-       case $dir in
-       [\\/]* | [A-Za-z]:[\\/]*) ;;
-       *)
-         absdir=`cd "$dir" && pwd`
-         test -z "$absdir" && \
-           func_fatal_error "cannot determine absolute directory name of 
\`$dir'"
-         dir="$absdir"
-         ;;
-       esac
+       func_resolve_sysroot "$func_stripname_result"
+       dir=$func_resolve_sysroot_result
        case "$deplibs " in
-       *" -L$dir "*) ;;
+       *" -L$dir "* | *" $arg "*)
+         # Will only happen for absolute or sysroot arguments
+         ;;
        *)
-         deplibs="$deplibs -L$dir"
+         # Preserve sysroot, but never include relative directories
+         case $dir in
+           [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs="$deplibs $arg" ;;
+           *) deplibs="$deplibs -L$dir" ;;
+         esac
          lib_search_path="$lib_search_path $dir"
          ;;
        esac
@@ -4236,6 +4263,10 @@ func_mode_link ()
        # We need an absolute path.
        case $dir in
        [\\/]* | [A-Za-z]:[\\/]*) ;;
+       =*)
+         func_stripname '=' '' "$arg"
+         dir=$lt_sysroot$func_stripname_result
+         ;;
        *)
          func_fatal_error "only absolute run-paths are allowed"
          ;;
@@ -4764,7 +4795,8 @@ func_mode_link ()
            test "$pass" = conv && continue
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           newlib_search_path="$newlib_search_path 
$func_resolve_sysroot_result"
            ;;
          prog)
            if test "$pass" = conv; then
@@ -4778,7 +4810,8 @@ func_mode_link ()
              finalize_deplibs="$deplib $finalize_deplibs"
            fi
            func_stripname '-L' '' "$deplib"
-           newlib_search_path="$newlib_search_path $func_stripname_result"
+           func_resolve_sysroot "$func_stripname_result"
+           newlib_search_path="$newlib_search_path 
$func_resolve_sysroot_result"
            ;;
          *)
            func_warning "\`-L' is ignored for archives/objects"
@@ -4788,8 +4821,9 @@ func_mode_link ()
          ;; # -L
        -R*)
          if test "$pass" = link; then
-           func_stripname '-R' '' "$deplib"
-           dir=$func_stripname_result
+           func_stripname '-L' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           dir=$func_resolve_sysroot_result
            # Make sure the xrpath contains only unique directories.
            case "$xrpath " in
            *" $dir "*) ;;
@@ -5071,6 +5105,7 @@ func_mode_link ()
          for deplib in $dependency_libs; do
            case $deplib in
            -L*) func_stripname '-L' '' "$deplib"
+                func_resolve_sysroot "$func_stripname_result"
                 newlib_search_path="$newlib_search_path $func_stripname_result"
                 ;;
            esac
@@ -5473,11 +5508,13 @@ func_mode_link ()
          for deplib in $dependency_libs; do
            newdependency_libs="$deplib $newdependency_libs"
            if $opt_duplicate_deps ; then
+             func_resolve_sysroot "$deplib"
+             deplib=$func_resolve_sysroot_result
              case "$tmp_libs " in
              *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
              esac
+             tmp_libs="$tmp_libs $deplib"
            fi
-           tmp_libs="$tmp_libs $deplib"
          done
 
          if test "$link_all_deplibs" != no; then
@@ -5487,8 +5524,10 @@ func_mode_link ()
              case $deplib in
              -L*) path="$deplib" ;;
              *.la)
+               func_resolve_sysroot "$deplib"
+               deplib=$func_resolve_sysroot_result
                func_dirname "$deplib" "" "."
-               dir="$func_dirname_result"
+               dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
                [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-- 
1.7.1



Reply via email to