#! /bin/sh
# Copyright (C) 2002-2024 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 derivations work with .lo too.
# (related to PR/37)

required='cc libtoolize yacc'
. test-init.sh

plan_ 7

cat >>configure.ac <<EOF
AC_PROG_CC
AC_PROG_YACC
AM_PROG_AR
AC_PROG_LIBTOOL
AC_OUTPUT
EOF

cat >Makefile.am << 'END'
AM_LFLAGS = --never-interactive

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.x_
.x_.y:
	rm -f $@ $@-t
## The leading ':;' works around a bug in bash <= 3.2.
	:; { echo '/* autogenerated */' \
	  && echo '%{' \
	  && echo 'int yylex () {return 0;}' \
	  && echo 'void yyerror (const char *s) {}' \
	  && echo '%}' \
	  && echo '%%' \
	  && echo "foobar : 'f' 'o' 'o' 'b' 'a' 'r' {};" \
	  && echo '%%' \
## Account for VPATH issues on weaker make implementations.
	  && cat `test -f '$<' || echo $(srcdir)/`$<; \
	} > $@-t
	mv -f $@-t $@
.PHONY: test
test:
	echo $(libfoo_la_OBJECTS) | grep '^foo\.lo$$'
END

cat > foo.x_ << 'END'
int foo (void) { return yyparse(); }
END

# We must protect the TAP driver from the output of configure, since
# that might output a stray "ok" on a line of its own (due to a
# libtool bug on Mac OS X), thus causing a spurious test result to
# be seen.  See automake bug#11897.
run_configure ()
{
  st=0; ./configure >output 2>&1 || st=1
  sed 's/^/  /' output
  test $st -eq 0
}

command_ok_ "libtoolize" libtoolize --force
command_ok_ "aclocal"    $ACLOCAL
command_ok_ "autoconf"   $AUTOCONF
command_ok_ "automake"   $AUTOMAKE --add-missing
command_ok_ "configure"  run_configure
command_ok_ "make test"  $MAKE test

directive=''; make_can_chain_suffix_rules || directive=TODO
command_ok_ "make all" -D "$directive" -r "suffix rules not chained" \
            $MAKE all

:
