#! /bin/sh
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
#
# This program 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, or (at your option)
# any later version.
#
# This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.

# Make sure that --program-transform works even when multiple files are
# collapsed.

required=cc
. test-init.sh

cat >>configure.ac <<'END'
AC_PROG_CC
AC_OUTPUT
END

cat >Makefile.am <<'EOF'
bin_PROGRAMS = p1 p2
bin_SCRIPTS = s1.sh s2.sh
man_MANS = m1.1 m2.1

test-install: install
	test -f inst/bin/p$(EXEEXT)
	test -f inst/bin/s.sh
	test -f inst/man/man1/m.1

test-install-foo: install
	test -f inst/bin/foo$(EXEEXT)
	test -f inst/bin/foo
	test -f inst/man/man1/foo.1
	test ! -f inst/bin/p1$(EXEEXT)
	test ! -f inst/bin/p2$(EXEEXT)
	test ! -f inst/bin/s1.sh
	test ! -f inst/bin/s2.sh
	test ! -f inst/man/man/m1.1
	test ! -f inst/man/man/m2.1
EOF

cat >p1.c <<'EOF'
int
main ()
{
  return 0;
}
EOF

cp p1.c p2.c

: > s1.sh
: > s2.sh
: > m1.1
: > m2.1

$ACLOCAL
$AUTOCONF
$AUTOMAKE

cwd=$(pwd) || fatal_ "getting current working directory"

./configure --program-transform-name='s/[12]//' --prefix "$cwd/inst" \
                                                --mandir "$cwd/inst/man"
$MAKE
$MAKE test-install
$MAKE uninstall
test $(find inst -type f -print | wc -l) -eq 0

# Also squash all file types in question.

# On newer Cygwin versions, that won't work, likely due to overly
# aggressive appending of '.exe' suffix when copying/renaming Windows
# executables.  So let's skip this part of the test if we detect the
# faulty heuristic is present.  See also:
# <https://lists.gnu.org/archive/html/automake-patches/2010-08/msg00153.html>
# <http://thread.gmane.org/gmane.os.cygwin/119380>
echo Foo > foo
echo Bar > bar.exe
chmod a+x foo bar.exe
cp foo bar && cmp foo bar \
  || skip_ "your Cygwin is too aggressive in tweaking '.exe' suffixes"

./configure --program-transform-name='s/.*/foo/' --prefix "$cwd/inst" \
                                                 --mandir "$cwd/inst/man"
$MAKE
$MAKE test-install-foo
$MAKE uninstall
test $(find inst -type f -print | wc -l) -eq 0

:
