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

# The info, html, pdf, ps and dvi targets shouldn't let clutter in the
# build directory.  Related to automake bug#11146.

required='makeinfo tex texi2dvi dvips'
. test-init.sh

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

cat > Makefile.am << 'END'
all-local: ps pdf dvi html # For "make distcheck".
info_TEXINFOS = foo.texi doc/bar.texi baz.texi
SUBDIRS = sub

# Tell GNU make not to parallelize these, because they
# have overlap between explicit and intermediate .dvi files.
.NOTPARALLEL:
END

mkdir sub doc

cat > sub/Makefile.am << 'END'
all-local: ps pdf dvi html # For "make distcheck".
info_TEXINFOS = baz.texi
END

cat > foo.texi << 'END'
\input texinfo
@setfilename foo.info
@settitle foo
@node Top
Hello walls.
@include version.texi
@bye
END

cat > doc/bar.texi << 'END'
\input texinfo
@setfilename bar.info
@settitle bar
@node Top
Hello walls.
@include version2.texi
@bye
END

cat > baz.texi << 'END'
\input texinfo
@setfilename baz.info
@settitle baz
@defindex au
@defindex sa
@defindex sb
@node Top
Hello walls.
@cindex foo
foo
@pindex bar
bar
@auindex baz
baz
@saindex sa
sa
@sbindex sb
sb
@bye
END

cp baz.texi sub

$ACLOCAL
$AUTOMAKE --add-missing
$AUTOCONF

./configure

# Try one by one, to ensure later targets don't involuntarily
# clean up potential cruft left by earlier ones.
for fmt in info pdf ps dvi html all; do
  $MAKE $fmt
  # For debugging.
  ls -l . doc sub
  # Sanity check.
  case $fmt in
    html)
      test -e foo.html
      test -e doc/bar.html
      test -e baz.html
      test -e sub/baz.html
      ;;
    all)
      for x in info pdf ps dvi; do
        test -f foo.$x
        test -f doc/bar.$x
        test -f baz.$x
        test -f sub/baz.$x
      done
      test -e foo.html
      test -e doc/bar.html
      test -e baz.html
      test -e sub/baz.html
      ;;
    *)
      test -f foo.$fmt
      test -f doc/bar.$fmt
      test -f baz.$fmt
      test -f sub/baz.$fmt
      ;;
  esac
  # Real test.
  ls -d foo* baz* sub/baz* doc/bar* > lst
  basename_rx='(foo|doc/bar|baz|sub/baz)'
  case $fmt in
    pdf) extension_rx="(texi|pdf|t2p)";;
    dvi) extension_rx="(texi|dvi|t2d)";;
     ps) extension_rx="(texi|ps|dvi|t2d)";;
   info) extension_rx="(texi|info)";;
   html) extension_rx="(texi|html)";;
    all) extension_rx="(texi|html|info|pdf|ps|dvi|t2[pd])";;
      *) fatal_ "unreachable code reached";;
  esac
  $EGREP -v "^$basename_rx\.$extension_rx$" lst && exit 1
  # Cleanup for checks on the next format.
  case $fmt in
    info) rm -f *.info doc/*.info sub/*.info;;
       *) $MAKE clean;;
  esac
done

$MAKE distcheck

:
