[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] {maint} remake: behave better with non-GNU make in subdirect
From: |
Stefano Lattarini |
Subject: |
Re: [PATCH] {maint} remake: behave better with non-GNU make in subdirectories |
Date: |
Mon, 4 Jul 2011 11:43:57 +0200 |
User-agent: |
KMail/1.13.3 (Linux/2.6.30-2-686; KDE/4.4.4; i686; ; ) |
References:
<http://lists.gnu.org/archive/html/automake-patches/2011-05/msg00110.html>
<http://lists.gnu.org/archive/html/automake-patches/2011-06/msg00197.html>
On Tuesday 21 June 2011, Stefano Lattarini wrote:
> On Tuesday 21 June 2011, Ralf Wildenhues wrote:
> > What's more: have you tried this patch on a nontrivial source tree
> > (where regenerating takes more than a second or so) with a few non-GNU
> > makes and GNU make? I kinda fear that it can cause an endless regen loop.
> >
> It doesn't I think. See the attached test (which I'd like to commit in
> a follow-up patch, to be merged into maint). Works with Solaris make,
> GNU make, NetBSD make and FreeBSD make. If that tests doesn't cover the
> scenario you have in mind, could you please explain it in more detail, so
> that we can write a proper test case for it?
>
Attached is the test I've ended up applying at last; it is more complicated,
but also safer and more correct.
Regards,
Stefano
From 044035ce85d089a9bbdfd6fa99c31dd22b74e7db Mon Sep 17 00:00:00 2001
Message-Id: <address@hidden>
From: Stefano Lattarini <address@hidden>
Date: Mon, 4 Jul 2011 11:41:34 +0200
Subject: [PATCH] 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.
---
ChangeLog | 7 ++
tests/Makefile.am | 1 +
tests/Makefile.in | 1 +
tests/remake-subdir-long-time.test | 116 ++++++++++++++++++++++++++++++++++++
4 files changed, 125 insertions(+), 0 deletions(-)
create mode 100755 tests/remake-subdir-long-time.test
diff --git a/ChangeLog b/ChangeLog
index 80506a7..7108823 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2011-07-04 Stefano Lattarini <address@hidden>
+ 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 <address@hidden>
+
remake: fix outdated comment in configure.am
* lib/am/configure.am: Fix comment falsified by changes in
commit `v1.11-366-gbee9871'.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 33ae8bc..9c5c03f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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 \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index ad45cff..1b01757 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -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
index 0000000..18ba732
--- /dev/null
+++ b/tests/remake-subdir-long-time.test
@@ -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
+
+:
--
1.7.2.3