Hello Roberto, * Roberto Bagnara wrote on Mon, Mar 03, 2008 at 09:14:48PM CET: > > $ cat mycommand > #!/bin/sh > echo "mycommand invoked with argument '$1'" > $ mycommand ciao > mycommand invoked with argument 'ciao' > $ ./libtool --mode=execute mycommand ciao > mycommand invoked with argument '/home/roberto/tppl/' > $ > > Note that /home/roberto/tppl/ is the directory where the libtool > script is located. I can also do > > $ cd interfaces/ > $ ../libtool --mode=execute ../mycommand ciao > mycommand invoked with argument '/home/roberto/tppl/' > > Is this behavior normal?
No. Thank you for the bug report. I've applied the fix below. FWIW, the ordering of the tests in execute-mode.at is such that the first set still passes for 1.5.26. > ./libtool is what has been created at configure time and a bzipped > version of it is attached to this file. It wasn't attached to the message, but that's not a problem. :-) Cheers, Ralf * 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. Index: Makefile.am =================================================================== RCS file: /cvsroot/libtool/libtool/Makefile.am,v retrieving revision 1.229 diff -u -r1.229 Makefile.am --- Makefile.am 18 Jan 2008 10:49:40 -0000 1.229 +++ Makefile.am 4 Mar 2008 21:16:26 -0000 @@ -447,6 +447,7 @@ 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 \ Index: NEWS =================================================================== RCS file: /cvsroot/libtool/libtool/NEWS,v retrieving revision 1.220 diff -u -r1.220 NEWS --- NEWS 4 Mar 2008 21:00:18 -0000 1.220 +++ NEWS 4 Mar 2008 21:16:27 -0000 @@ -6,6 +6,9 @@ - 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: libltdl/config/ltmain.m4sh =================================================================== RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v retrieving revision 1.97 diff -u -r1.97 ltmain.m4sh --- libltdl/config/ltmain.m4sh 28 Jan 2008 15:49:46 -0000 1.97 +++ libltdl/config/ltmain.m4sh 4 Mar 2008 21:16:29 -0000 @@ -1694,12 +1694,14 @@ # 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 @@ ;; esac $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else --- /dev/null 2008-03-02 10:33:19.200041011 +0100 +++ tests/execute-mode.at 2008-03-04 22:15:22.000000000 +0100 @@ -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 _______________________________________________ Bug-libtool mailing list Bug-libtool@gnu.org http://lists.gnu.org/mailman/listinfo/bug-libtool