---
 doc/libtool.texi           |   18 ++++++++++++------
 libltdl/config/ltmain.m4sh |   21 +++++++++++++++++++++
 tests/sysroot.at           |    3 +++
 3 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/doc/libtool.texi b/doc/libtool.texi
index 914bd1d..4b256bf 100644
--- a/doc/libtool.texi
+++ b/doc/libtool.texi
@@ -1721,12 +1721,18 @@ commands are also completed.
 @cindex finish mode
 @cindex mode, finish
 
-...@dfn{finish} mode helps system administrators install libtool libraries
-so that they can be located and linked into user programs.
-
-Each @var{mode-arg} is interpreted as the name of a library directory.
-Running this command may require superuser privileges, so the
-...@option{--dry-run} option may be useful.
+...@dfn{finish} mode has two functions.  One is to help system administrators
+install libtool libraries so that they can be located and linked into
+user programs.  To invoke this functionality, pass the name of a library
+directory as @var{mode-arg}.  Running this command may require superuser
+privileges, and the @option{--dry-run} option may be useful.
+
+The second is to facilitate transferring libtool libraries to a native
+compilation environment after they were built in a cross-compilation
+environment.  Cross-compilation environments may rely on recent libtool
+features, and running libtool in finish mode will make it easier to
+work with older versions of libtool.  This task is performed whenever
+the @var{mode-arg} is a @samp{.la} file.
 
 @node Uninstall mode
 @section Uninstall mode
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index b03b724..639ce0a 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -1418,6 +1418,27 @@ func_mode_finish ()
       fi
     done
 
+    if test -n "$libs"; then
+      tmpdir=`func_mktempdir`
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED 's/[].[^$\\*|]/\\\\&/g'`
+        sysroot_cmd="s|\([ ']\)$sysroot_regex|\1|g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      for lib in $libs; do
+       $opt_dry_run || {
+         sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+           > $tmpdir/tmp-la
+         mv -f $tmpdir/tmp-la $lib
+       }
+       file="$outputname"
+      done
+      $opt_dry_run || ${RM}r "$tmpdir"
+    fi
+
     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
        if test -n "$finish_cmds"; then
diff --git a/tests/sysroot.at b/tests/sysroot.at
index 869c9c4..c0ac6d1 100644
--- a/tests/sysroot.at
+++ b/tests/sysroot.at
@@ -186,6 +186,9 @@ LT_AT_BOOTSTRAP([], [-I $abs_top_srcdir/libltdl/m4], 
[ignore],
 AT_CHECK([$MAKE install DESTDIR=$sysroot], [0], [ignore], [ignore])
 AT_CHECK([test -f $sysroot/$prefix/bin/prog$EXEEXT])
 AT_CHECK([grep -F "$sysroot" "$sysroot/$prefix/bin/prog$EXEEXT"], [1])
+AT_CHECK([grep "'.*=" $sysroot/$prefix/lib/lib2.la], [0], [ignore])
+AT_CHECK([./libtool --mode=finish $sysroot/$prefix/lib/lib@<:@12@:>@.la], [0], 
[ignore])
+AT_CHECK([grep "'.*=" $sysroot/$prefix/lib/lib@<:@12@:>@.la], [1])
 
 # missing tests
 # 1) pass absolute .la files
-- 
1.7.1


Reply via email to