diff options
author | Alexandre Duret-Lutz <adl@gnu.org> | 2003-10-27 21:17:15 +0000 |
---|---|---|
committer | Alexandre Duret-Lutz <adl@gnu.org> | 2003-10-27 21:17:15 +0000 |
commit | adb20140a22852c86dd8cb2eff2bc3d88381db14 (patch) | |
tree | a0702a8e66cbbd5a25250cb8d1f895faf378dba7 | |
parent | 0768132f844f8b420765732b5c55472ed30940e9 (diff) | |
download | automake-adb20140a22852c86dd8cb2eff2bc3d88381db14.tar.gz |
* lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Erase %STAMP%.
* tests/Makefile.am (TESTS): Add autohdr3.test
* tests/autohdr3.test: New file.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | lib/am/remake-hdr.am | 33 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/Makefile.in | 1 | ||||
-rwxr-xr-x | tests/autohdr3.test | 52 |
5 files changed, 90 insertions, 1 deletions
@@ -1,5 +1,9 @@ 2003-10-27 Alexandre Duret-Lutz <adl@gnu.org> + * lib/am/remake-hdr.am ($(srcdir)/%CONFIG_HIN%): Erase %STAMP%. + * tests/Makefile.am (TESTS): Add autohdr3.test + * tests/autohdr3.test: New file. + * automake.in (handle_configure): Rename am__configure_deps as am__aclocal_m4_deps and include $(ACLOCAL_M4_SOURCES) and $configure_ac. Define am__configure_deps as am__aclocal_m4_deps diff --git a/lib/am/remake-hdr.am b/lib/am/remake-hdr.am index 1ae7c0f27..067c34844 100644 --- a/lib/am/remake-hdr.am +++ b/lib/am/remake-hdr.am @@ -38,7 +38,38 @@ if %?FIRST_CONFIG_HIN% $(srcdir)/%CONFIG_HIN%: %MAINTAINER-MODE% $(am__configure_deps) %FILES% cd $(top_srcdir) && $(AUTOHEADER) -## Autoheader has the bad habit of not changing the time stamp if +## Whenever $(AUTOHEADER) has run, we must make sure that +## ./config.status will rebuild config.h. The dependency from %STAMP% +## on %CONFIG_H_DEPS% (which contains config.hin) is not enough to +## express his. +## +## There are some tricky cases where this rule will build a +## config.hin which has the same timestamp as %STAMP%, in which case +## ./config.status will not be rerun (meaning that users will use in +## out-of-date config.h without knowing it). One situation where this +## can occurs is the following: +## 1. the user updates some configure dependency (let's say foo.m4) +## and run `make' +## 2. the rebuild rules detect that a foo.m4 has changed, +## run aclocal, autoconf, automake, and then run ./config.status. +## (Note that autoheader hasn't been called yet, so ./config.status +## outputs a config.h from an obsolete config.hin.) +## 3. Once Makefile has been regenerated, make continues, and +## discover that config.h is a dependency of the `all' rule. +## Because config.h depends on stamp-h1, stamp-h1 depends on +## config.hin, and config.hin depends on aclocal.m4, make runs +## autoheader to rebuild config.hin. +## Now make ought to call ./config.status once again to rebuild +## config.h from the new config.hin, but if you have a sufficiently +## fast box, steps 2 and 3 will occur within the same second: the +## config.h/stamp-h1 generated from the outdated config.hin will have +## the same mtime as the new config.hin. Hence make will think that +## config.h is up to date. +## +## A solution is to erase %STAMP% here so that the %STAMP% rule +## is always triggered after the this one. + rm -f %STAMP% +## Autoheader has the bad habit of not changing the timestamp if ## config.hin is unchanged, which breaks Make targets. Since what ## must not changed gratuitously is config.h, which is already handled ## by config.status, there is no reason to make things complex for diff --git a/tests/Makefile.am b/tests/Makefile.am index e6063031a..e5646c26e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -46,6 +46,7 @@ ar.test \ asm.test \ autohdr.test \ autohdr2.test \ +autohdr3.test \ autohdr4.test \ auxdir.test \ auxdir2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index f7e88e2c0..9dcff8f22 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -158,6 +158,7 @@ ar.test \ asm.test \ autohdr.test \ autohdr2.test \ +autohdr3.test \ autohdr4.test \ auxdir.test \ auxdir2.test \ diff --git a/tests/autohdr3.test b/tests/autohdr3.test new file mode 100755 index 000000000..fefc95744 --- /dev/null +++ b/tests/autohdr3.test @@ -0,0 +1,52 @@ +#!/bin/sh +# Copyright (C) 2003 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake 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. +# +# GNU Automake 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 Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Check rebuild rules for autoheader. + +required=GNUmake +. ./defs + +set -e + +cat >>configure.in <<EOF +m4_include([foo.m4]) +AC_CONFIG_HEADERS([config.h:config.hin]) +AC_OUTPUT +EOF + +: > Makefile.am +: > foo.m4 + +$ACLOCAL +$AUTOCONF +$AUTOHEADER +$AUTOMAKE + +./configure +$MAKE + +$sleep +echo 'AC_DEFINE([GREPME], 1, [Doc for GREPME])' > foo.m4 + +$MAKE +grep GREPME config.hin +grep GREPME config.h + +$MAKE distcheck |