# execute-mode.at -- libtool --mode=execute             -*- Autotest -*-
#
#   Copyright (C) 2008-2019, 2021-2025 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.  If not, see <https://www.gnu.org/licenses/>.
####

AT_SETUP([execute mode])
AT_KEYWORDS([libtool])

eval `$LIBTOOL --config | $EGREP '^(FGREP)='`

AT_DATA([foo],
[[#! /bin/sh
if test $# -gt 0; then
  for arg
  do
    printf %s\\n "$arg"
  done
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
for arg
do
  printf %s\\n "$arg"
done
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
cp foo sub/foo
chmod +x foo sub/foo lt-wrapper lt-real

AT_DATA([liba.c],
[[int a () { return 0; }
]])

AT_DATA([main.c],
[[#include <stdio.h>
extern int a ();
int main (int argc, char **argv)
{
  int i;
  for (i=1; i<argc; ++i)
    {
      if (i != 1)
	fputc ('\n', stdout);
      fputs (argv[i], stdout);
    }
  fputc ('\n', stdout);
  return a ();
}
]])

LDFLAGS="$LDFLAGS -no-undefined"
instdir=`pwd`/inst
libdir=$instdir/lib

AT_CHECK([$LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c liba.c],
	 [], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o liba.la -rpath $libdir liba.lo],
	 [], [ignore], [ignore])
AT_CHECK([$CC $CPPFLAGS $CFLAGS -c main.c],
	 [], [ignore], [ignore])
AT_CHECK([$LIBTOOL --mode=link $CC $CFLAGS $LDFLAGS -o main$EXEEXT main.$OBJEXT liba.la],
	 [], [ignore], [ignore])

# end of preparatory blurb.
# Now, when doing the tests, we both try the fake wrappers plus the real one
# (only the latter exposes the C wrappers used for w32 systems).
# With the latter, however, we need to ignore additional output; esp. wine
# may be rather noisy.

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 </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 </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 </dev/null || 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: \$!&*'\`()" </dev/null],
	 [], [arg  with special chars: $!&*'`()
])
AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper "arg  with special chars: \$!&*'\`()"],
	 [], [./lt-real
arg  with special chars: $!&*'`()
])
LT_AT_NOINST_EXEC_CHECK([./main], [], [], [stdout], [ignore],
			["arg  with special chars: \$!&*'\`()"])
AT_CHECK([$FGREP 'arg  with special chars: $!&*'\''`()' stdout], [], [ignore])

# OpenBSD cwrapper has issues parsing '<' and '>' in execute mode without other
# characters, so the symbols are escaped during testing in OpenBSD.
escape=
case $host_os in openbsd*)
  escape='\' ;;
esac

# We always pair two args.  The first one is never the empty string.
arg1=
for arg2 in \
   'def ghi' '' \
   'd"e' 'f"g' \
   'd\"e' 'f\"g' \
   'd\\"e' 'f\\"g' \
   'd\\\"e' 'f\\\"g' \
   'd\' '' \
   'd\\' '' \
   'd\\\' '' \
   'd\\\\' '' \
   "$escape<" "$escape>" \
   '<def>' ''
do
  if test -z "$arg1"; then
    arg1=$arg2; continue
  fi
  AT_CHECK([$LIBTOOL --mode=execute ./foo abc "$arg1" "$arg2" xyz], [], [stdout], [ignore])
  AT_CHECK([$FGREP "$arg1" stdout], [], [ignore])
  AT_CHECK([test -z "$arg2" || $FGREP "$arg2" stdout], [], [ignore])
  AT_CHECK([test `$SED -n '/^abc$/,/^xyz$/p' stdout | wc -l` -eq 4])
  AT_CHECK([$LIBTOOL --mode=execute ./lt-wrapper abc "$arg1" "$arg2" xyz </dev/null], [], [stdout])
  AT_CHECK([$FGREP "$arg1" stdout], [], [ignore])
  AT_CHECK([test -z "$arg2" || $FGREP "$arg2" stdout], [], [ignore])
  AT_CHECK([test `$SED -n '/^abc$/,/^xyz$/p' stdout | wc -l` -eq 4])
  AT_CHECK([$LIBTOOL --mode=execute ./foo lt-wrapper abc "$arg1" "$arg2" xyz], [], [stdout])
  AT_CHECK([$FGREP "$arg1" stdout], [], [ignore])
  AT_CHECK([test -z "$arg2" || $FGREP "$arg2" stdout], [], [ignore])
  AT_CHECK([test `$SED -n '/^abc$/,/^xyz$/p' stdout | wc -l` -eq 4])
  AT_CHECK([$LIBTOOL --mode=execute ./main$EXEEXT abc "$arg1" "$arg2" xyz], [], [stdout])
  AT_CHECK([$FGREP "$arg1" stdout], [], [ignore])
  AT_CHECK([test -z "$arg2" || $FGREP "$arg2" stdout], [], [ignore])
  # Do not match EOL here, cross setups may have an extra \r here.
  AT_CHECK([test `$SED -n '/^abc/,/^xyz/p' stdout | wc -l` -eq 4])
  arg1=
done

# Check that .la files are not transformed by the wrapper searching loop.
AT_CHECK([$LIBTOOL --mode=execute echo ./main$EXEEXT liba.lo libfakelib.la], [], [stdout])
# This could be .libs/lt-main or similar (or just plain 'main').
AT_CHECK([$GREP main stdout], [], [ignore])
AT_CHECK([$GREP liba.lo stdout], [], [ignore])
AT_CHECK([$GREP libfakelib.la stdout], [], [ignore])

AT_CLEANUP
