#!/bin/sh
# Copyright (C) 2009-2025 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/>.

# Check user extensibility of silent-rules mode.

. test-init.sh

cat >>configure.ac <<'EOF'
AC_CONFIG_FILES([sub/Makefile])
AC_OUTPUT
EOF

# We delegate all the work to the subdir makefile.  This is done
# to ensure any command-line setting of $(V) gets correctly passed
# down to recursive make invocations.
echo SUBDIRS = sub > Makefile.am

mkdir sub
cat > sub/Makefile.am <<'EOF'
AUTOMAKE_OPTIONS = -Wno-portability-recursive
my_verbose = $(my_verbose_$(V))
my_verbose_ = $(my_verbose_$(AM_DEFAULT_VERBOSITY))
my_verbose_0 = @echo " XGEN    $@";

all-local: foo gen-headers

list = 0 1 2
.PHONY: gen-headers
gen-headers:
	@headers=`for i in $(list); do echo sub/$$i.h; done`; \
	if $(AM_V_P); then set -x; else \
	  echo " GEN     [headers]"; \
	fi; \
	rm -f $$headers || exit 1; \
## Only fake header generation.
	: generate-header --flags $$headers

foo: foo.in
	$(my_verbose)cp $(srcdir)/foo.in $@
EXTRA_DIST = foo.in
CLEANFILES = foo
EOF

: > sub/foo.in

$ACLOCAL
$AUTOMAKE --add-missing
$AUTOCONF

do_check ()
{
  case ${1-} in
    --silent) silent=:;;
    --verbose) silent=false;;
    *) fatal_ "do_check(): incorrect usage";;
  esac
  shift
  $MAKE clean
  run_make -M -- ${1+"$@"}
  if $silent; then
    $FGREP 'cp ' output && exit 1
    $FGREP 'generate-header' output && exit 1
    $FGREP 'rm -f' output && exit 1
    grep '\bsub/[012]\.h\b' output && exit 1
    grep '^ XGEN    foo$' output
    grep '^ GEN     \[headers\]$' output
  else
    $FGREP 'GEN ' output && exit 1
    $FGREP 'cp ./foo.in foo' output
    # Be prepared to handle "creative quoting" in the shell traces.
    # See automake bug#14760.
    ok=false
    for q in '' \' \"; do
      files="${q}sub/0.h${q} ${q}sub/1.h${q} ${q}sub/2.h${q}"
      $FGREP "rm -f $files" output || continue
      $FGREP "generate-header --flags $files" output || continue
      ok=:
      break
    done
    $ok || exit 1
    unset ok
  fi
}

./configure --enable-silent-rules
do_check --silent
do_check --verbose V=1

$MAKE distclean

./configure --disable-silent-rules
do_check --verbose
do_check --silent V=0

$MAKE distclean

:
