# 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).
;;
esac
$ECHO "\
- \$ECHO \"\$0: cannot exec \$program \$*\"
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
exit 1
fi
else
--- /dev/null
+# 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