#! /bin/sh
# Copyright (C) 2011-2021 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 .
# Check that remake rules from subdirectories do not hang or cycle
# endlessly, even with build systems that takes several seconds to
# rebuild the Makefiles.
# This test tries to ensure a long-enough rebuild time by introducing
# an explicit delay in the build process.
# Suggestion by Ralf Wildenhues.
. test-init.sh
cat > configure.ac < Makefile.am
mkdir sub
: > sub/Makefile.am
# Both aclocal and automake are expected to run one and just one time.
# Create and use wrappers that will verify that.
ocwd=$(pwd) || fatal_ "cannot get current working directory"
mkdir bin
cat > bin/automake <&2
exit 1
else
echo automake has run > "\$sentinel"
fi
$sleep; $sleep;
exec $AUTOMAKE \${1+"\$@"}
END
chmod a+x bin/automake
cat > bin/aclocal <&2
exit 1
else
echo aclocal has run > "\$sentinel"
fi
$sleep; $sleep;
exec $ACLOCAL \${1+"\$@"}
END
chmod a+x bin/aclocal
# Just to be sure.
cp bin/automake bin/automake-$APIVERSION
cp bin/aclocal bin/aclocal-$APIVERSION
PATH=$ocwd/bin$PATH_SEPARATOR$PATH; export PATH
AUTOMAKE=automake ACLOCAL=aclocal; export AUTOMAKE ACLOCAL
$ACLOCAL # Should use or just-defined wrapper.
$AUTOMAKE # Likewise.
$AUTOCONF
# Sanity check: the wrappers have been used.
test -f automake-has-run
test -f aclocal-has-run
rm -f automake-has-run aclocal-has-run
./configure
# Sanity check: Makefile doesn't get updated uselessly.
run_make ACLOCAL=false AUTOMAKE=false AUTOCONF=false
$sleep
sed "s|magic|magic2|" configure.ac > t
mv -f t configure.ac
cd sub
run_make Makefile AUTOMAKE="$AUTOMAKE" ACLOCAL="$ACLOCAL"
cd ..
# For debugging.
ls -l . sub
grep -i magic configure Makefile.in Makefile sub/Makefile.in sub/Makefile
# Sanity checks.
$FGREP magic2 configure
$FGREP magic2 Makefile
$FGREP magic2 sub/Makefile
: