]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
* libltdl/config/ltmain.m4sh (func_mode_execute): Replace only
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Tue, 4 Mar 2008 21:25:48 +0000 (21:25 +0000)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Tue, 4 Mar 2008 21:25:48 +0000 (21:25 +0000)
arguments we have identified as shell or C wrappers.
(func_emit_wrapper): Output error message on stderr.
* tests/execute-mode.at: New file, with --mode=execute tests.
* Makefile.am: Adjust.
* NEWS: Update.
Fixes 2.2 regression.  Report by Roberto Bagnara.

ChangeLog
Makefile.am
NEWS
libltdl/config/ltmain.m4sh
tests/execute-mode.at [new file with mode: 0644]

index a391da60908b0dc35dc27b1d5c5259e43326af49..f37276e21e2c27b179b3ba65204629da6916d1f4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2008-03-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
+       * libltdl/config/ltmain.m4sh (func_mode_execute): Replace only
+       arguments we have identified as shell or C wrappers.
+       (func_emit_wrapper): Output error message on stderr.
+       * tests/execute-mode.at: New file, with --mode=execute tests.
+       * Makefile.am: Adjust.
+       * NEWS: Update.
+       Fixes 2.2 regression.  Report by Roberto Bagnara.
+
        * libltdl/m4/libtool.m4 (_LT_CONFIG): Drop misleading `GNU'
        prefix before the host package name in the "Generated by" line
        for the libtool script.
index ae82e2367348aceffb26a666ec5d42b2b7dd86e9..771c8efe3550411f466556280eee743f054537d9 100644 (file)
@@ -447,6 +447,7 @@ TESTSUITE_AT        = tests/testsuite.at \
                  tests/search-path.at \
                  tests/indirect_deps.at \
                  tests/archive-in-archive.at \
+                 tests/execute-mode.at \
                  tests/destdir.at \
                  tests/old-m4-iface.at \
                  tests/am-subdir.at \
diff --git a/NEWS b/NEWS
index 8d490f7f9a970de54c272b7b223daac5f08cf5dd..80c4ebda2c7b37fed1fe1dd174598ed08970ac8a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,9 @@ New in 2.3b: 2008-??-??: CVS version 2.3a, Libtool team:
 
   - Fix 2.2 regression in libltdl that causes memory corruption upon
     repeated `lt_dlinit(); lt_dlexit()'.
+  - Fix 2.2 regression in that `libtool --mode=execute CMD ARGS' does not
+    transform ARGS that do not look like shell or C wrappers of libtool
+    programs.
 
 New in 2.2: 2008-03-01; CVS version 2.1c, Libtool team:
 
index 1fc5a3bca65f59f1901fa7cf00708452256e77b2..0d0d8a6f5b3ca4f848d5b0110b12060a4bd4fb87 100644 (file)
@@ -1694,12 +1694,14 @@ func_mode_execute ()
        # Do a test to see if this is really a libtool program.
        if func_ltwrapper_script_p "$file"; then
          func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
        elif func_ltwrapper_executable_p "$file"; then
          func_ltwrapper_scriptname "$file"
          func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
        fi
-       # Transform arg to wrapped name.
-       file="$progdir/$program"
        ;;
       esac
       # Quote arguments (to preserve shell metacharacters).
@@ -2468,7 +2470,7 @@ else
          ;;
        esac
        $ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\"
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
       exit 1
     fi
   else
diff --git a/tests/execute-mode.at b/tests/execute-mode.at
new file mode 100644 (file)
index 0000000..257e9d3
--- /dev/null
@@ -0,0 +1,92 @@
+# execute-mode.at -- libtool --mode=execute             -*- Autotest -*-
+#
+#   Copyright (C) 2008 Free Software Foundation, Inc.
+#   Written by Ralf Wildenhues, 2008
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from  http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+####
+
+AT_SETUP([execute mode])
+AT_KEYWORDS([libtool])
+
+AT_DATA([foo],
+[[#! /bin/sh
+if test $# -gt 0; then
+  echo "$@"
+else
+  :
+fi
+]])
+
+AT_DATA([lt-wrapper],
+[[#! /bin/sh
+# Generated by GNU libtool.
+# fake wrapper script.
+program=lt-real
+progdir=.
+if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+  # Run the actual program with our arguments.
+  exec "$progdir/$program" ${1+"$@"}
+  echo "$0: cannot exec $program $*" >&2
+  exit 1
+fi
+]])
+
+AT_DATA([lt-real],
+[[#! /bin/sh
+echo "$@"
+]])
+
+mkdir sub
+cp foo sub/foo
+chmod +x foo sub/foo lt-wrapper lt-real
+
+AT_CHECK([$LIBTOOL --mode=execute ./foo])
+AT_CHECK([$LIBTOOL --mode=execute sub/foo])
+AT_CHECK([$LIBTOOL --mode=execute ./foo foo], [], [foo
+])
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo], [], [foo
+])
+AT_CHECK([cd sub && $LIBTOOL --mode=execute ./foo ../foo], [], [../foo
+])
+# suppose that ./foo is gdb, and lt-wrapper is the wrapper script.
+AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper bar baz], [],
+        [./lt-real bar baz
+])
+
+# Check that a missing real program causes an error.
+# The error message and code are likely to be 126,
+# "No such file or directory" but system-dependent.
+mv -f lt-real lt-backup
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo || exit 1],
+        [1], [ignore], [ignore])
+mv -f lt-backup lt-real
+
+# Now use arguments that require decent quoting.
+AT_CHECK([$LIBTOOL --mode=execute ./foo "arg  with special chars: \$!&*\`'()"],
+        [], [arg  with special chars: $!&*`'()
+])
+AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper "arg  with special chars: \$!&*\`'()"],
+        [], [arg  with special chars: $!&*`'()
+])
+AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper "arg  with special chars: \$!&*\`'()"],
+        [], [./lt-real arg  with special chars: $!&*`'()
+])
+
+AT_CLEANUP