Re: mode=execute argument munging bug

2008-03-07 Thread Roberto Bagnara

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

2008-03-05 Thread Ralf Wildenhues
* 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)

2008-03-04 Thread Ralf Wildenhues
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