]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
remake: add test ensuring that slower remakes don't hang
authorStefano Lattarini <stefano.lattarini@gmail.com>
Mon, 4 Jul 2011 09:41:34 +0000 (11:41 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Mon, 4 Jul 2011 09:41:34 +0000 (11:41 +0200)
* tests/remake-subdir-long-time.test: New test.
* tests/Makefile.am (TESTS): Update.

Suggestion by Ralf Wildenhues.

ChangeLog
tests/Makefile.am
tests/Makefile.in
tests/remake-subdir-long-time.test [new file with mode: 0755]

index 80506a7f6960b4c0b66bda63e6ac1cf8a669a064..7108823ee087fd0628734dd86d329227e5252f23 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-07-04  Stefano Lattarini  <stefano.lattarini@gmail.com>
+
+       remake: add test ensuring that slower remakes don't hang
+       * tests/remake-subdir-long-time.test: New test.
+       * tests/Makefile.am (TESTS): Update.
+       Suggestion by Ralf Wildenhues.
+
 2011-07-04  Stefano Lattarini  <stefano.lattarini@gmail.com>
 
        remake: fix outdated comment in configure.am
index 33ae8bc6220270fa4b02b18630680a0c7debb7e3..9c5c03fb74f8253f528208fd33fd85ac4adadf7f 100644 (file)
@@ -658,6 +658,7 @@ remake-subdir-from-subdir.test \
 remake-subdir-gnu.test \
 remake-subdir.test \
 remake-subdir2.test \
+remake-subdir-long-time.test \
 pr8365-remake-timing.test \
 regex.test \
 req.test \
index ad45cffbdb4ea08a0680cca0a612a73525b9c77b..1b0175787ec1659e4827873b850bc9211e8ca269 100644 (file)
@@ -926,6 +926,7 @@ remake-subdir-from-subdir.test \
 remake-subdir-gnu.test \
 remake-subdir.test \
 remake-subdir2.test \
+remake-subdir-long-time.test \
 pr8365-remake-timing.test \
 regex.test \
 req.test \
diff --git a/tests/remake-subdir-long-time.test b/tests/remake-subdir-long-time.test
new file mode 100755 (executable)
index 0000000..18ba732
--- /dev/null
@@ -0,0 +1,116 @@
+#! /bin/sh
+# Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+
+# 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.
+
+. ./defs || Exit 1
+
+set -e
+
+cat > configure.in <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([foreign -Wall -Werror])
+AC_CONFIG_FILES([Makefile sub/Makefile])
+AC_SUBST([MAGIC], [magic])
+AC_OUTPUT
+END
+
+echo SUBDIRS = sub > 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 <<END
+#!/bin/sh
+set -e
+PATH='$PATH'; export PATH
+sentinel='$ocwd/automake-has-run'
+if test -f "\$sentinel"; then
+  echo "Automake has been run more than one time" >&2
+  exit 1
+else
+  echo automake has run > "\$sentinel"
+fi
+$sleep; $sleep;
+exec $AUTOMAKE \${1+"\$@"}
+END
+chmod a+x bin/automake
+
+cat > bin/aclocal <<END
+#!/bin/sh
+set -e
+PATH='$PATH'; export PATH
+sentinel='$ocwd/aclocal-has-run'
+if test -f "\$sentinel"; then
+  echo "Aclocal has been run more than one time" >&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.
+ACLOCAL=false AUTOMAKE=false AUTOCONF=false $MAKE -e
+
+$sleep
+sed "s|magic|magic2|" configure.in > t
+mv -f t configure.in
+
+cd sub
+AUTOMAKE="$AUTOMAKE" ACLOCAL="$ACLOCAL" $MAKE -e Makefile
+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
+
+: