Re: mode=execute argument munging bug
Ralf Wildenhues wrote: * Roberto Bagnara wrote on Wed, Mar 05, 2008 at 07:37:58AM CET: It is better now, but there is still the problem that, apparently, libtool redirects stdin for the program it is running. Gosh. How embarrassing. I've applied this patch. Dear Ralf, everything seems to work for us now. Thanks! Roberto P.S. I will look at the testsuite failure during the weekend. -- Prof. Roberto Bagnara Computer Science Group Department of Mathematics, University of Parma, Italy http://www.cs.unipr.it/~bagnara/ mailto:[EMAIL PROTECTED]
Re: mode=execute argument munging bug
* Roberto Bagnara wrote on Wed, Mar 05, 2008 at 07:37:58AM CET: It is better now, but there is still the problem that, apparently, libtool redirects stdin for the program it is running. Gosh. How embarrassing. I've applied this patch. Thanks for testing! Ralf 2008-03-05 Ralf Wildenhues [EMAIL PROTECTED] * libltdl/config/ltmain.m4sh (func_lalib_unsafe_p): redirect and restore from stdin, not stdout. * tests/execute-mode.at (execute mode): Adjust test to catch this. Report by Roberto Bagnara. Index: libltdl/config/ltmain.m4sh === RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v retrieving revision 1.98 diff -u -r1.98 ltmain.m4sh --- libltdl/config/ltmain.m4sh 4 Mar 2008 21:25:48 - 1.98 +++ libltdl/config/ltmain.m4sh 5 Mar 2008 20:12:28 - @@ -648,7 +648,7 @@ func_lalib_unsafe_p () { lalib_p=no -if test -r $1 exec 51 $1; then +if test -r $1 exec 50 $1; then for lalib_p_l in 1 2 3 4 do read lalib_p_line @@ -656,7 +656,7 @@ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done - exec 15 5- + exec 05 5- fi test $lalib_p = yes } Index: tests/execute-mode.at === RCS file: /cvsroot/libtool/libtool/tests/execute-mode.at,v retrieving revision 1.1 diff -u -r1.1 execute-mode.at --- tests/execute-mode.at 4 Mar 2008 21:25:48 - 1.1 +++ tests/execute-mode.at 5 Mar 2008 20:12:28 - @@ -51,6 +51,30 @@ AT_DATA([lt-real], [[#! /bin/sh echo $@ +cat +]]) + +AT_DATA([libfakelib.la], +[[# libfakelib.la - a libtool library file +# Generated by ltmain.sh (GNU libtool 1.2605 2008/03/04 22:31:32) 2.3a +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +dlname='' +library_names='' +old_library='libfakelib.a' +inherited_linker_flags='' +dependency_libs='' +weak_library_names='' +current= +age= +revision= +installed=no +shouldnotlink=yes +dlopen='' +dlpreopen='' +libdir='' ]]) mkdir sub @@ -61,20 +85,26 @@ 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([$LIBTOOL --mode=execute ./lt-wrapper foo /dev/null], [], [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], [], +AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper bar baz /dev/null], [], [./lt-real bar baz ]) +# check that stdin works even with -dlopen. +AT_CHECK([echo bar | $LIBTOOL --mode=execute -dlopen libfakelib.la ./lt-wrapper foo], +[], [foo +bar +]) + # 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], +AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper foo /dev/null || exit 1], [1], [ignore], [ignore]) mv -f lt-backup lt-real @@ -82,7 +112,7 @@ 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: \$!*\`'()], +AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper arg with special chars: \$!*\`'() /dev/null], [], [arg with special chars: $!*`'() ]) AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper arg with special chars: \$!*\`'()],
mode=execute argument munging bug (was: [libtool 2.2] testsuite: 34 failed)
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 - 1.229 +++ Makefile.am 4 Mar 2008 21:16:26 - @@ -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 --- NEWS4 Mar 2008 21:00:18 - 1.220 +++ NEWS4 Mar 2008 21:16:27 - @@ -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 - 1.97 +++ libltdl/config/ltmain.m4sh 4 Mar 2008 21:16:29 - @@ -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 \$*\ 12 exit 1 fi else --- /dev/null 2008-03-02 10:33:19.200041011 +0100 +++ tests/execute-mode.at 2008-03-04 22:15:22.0 +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