* 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 -0000 1.98 +++ libltdl/config/ltmain.m4sh 5 Mar 2008 20:12:28 -0000 @@ -648,7 +648,7 @@ func_lalib_unsafe_p () { lalib_p=no - if test -r "$1" && exec 5<&1 <"$1"; then + if test -r "$1" && exec 5<&0 <"$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 1<&5 5<&- + exec 0<&5 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 -0000 1.1 +++ tests/execute-mode.at 5 Mar 2008 20:12:28 -0000 @@ -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: \$!&*\`'()"],