diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-10-26 14:50:46 +0200 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-10-26 15:01:45 +0200 |
commit | 2990f48d423c92f8800f8f50368b6b6d1d1be788 (patch) | |
tree | 95aeb769895495364e089aba937b4631c7369e13 /t/remake-timing-bug-pr8365.sh | |
parent | 042a2279fe1d030b0deb559c6318213e3cea1f6f (diff) | |
download | automake-2990f48d423c92f8800f8f50368b6b6d1d1be788.tar.gz |
tests: rename some tests to more expressive names, again
* t/parallel-tests.sh: Rename ...
* t/parallel-tests-basics.sh: ... like this.
* t/parallel-tests3.sh: Rename ...
* t/parallel-tests-concurrency.sh: ... like this.
* t/parallel-tests5.sh: Rename ...
* t/parallel-tests-concurrency-2.sh: ... like this.
* t/parallel-tests6.sh: Rename ...
* t/parallel-tests-empty.sh: ... like this. Adjust comments.
* t/parallel-tests8.sh: Rename ...
* t/parallel-tests-generated-and-distributed.sh: ... like this.
* t/parallel-tests9.sh: Rename ...
* t/parallel-tests-recheck.sh: ... like this.
* t/parallel-tests10.sh: Rename ...
* t/parallel-tests-trailing-whitespace.sh: ... like this.
* t/remake3a.sh: Rename ...
* t/remake-subdir-no-makefile.sh: ... like this.
* t/remake4.sh: Rename ...
* t/remake-not-after-make-dist.sh: ... like this.
* t/remake5.sh: Rename ...
* t/remake-maintainer-mode.sh: ... like this.
* t/remake6.sh: Rename ...
* t/remake-subdir3.sh: ... like this.
* t/remake7.sh: Rename ...
* t/remake-fail.sh: ... like this.
* t/remake11.sh: Rename ...
* t/remake-deeply-nested.sh: ... like this
* t/remake12.sh: Rename ...
* t/remake-mild-stress.sh: ... like this
* t/pr8365-remake-timing.sh: Rename ...
* t/remake-timing-bug-pr8365.sh: ... like this.
* t/list-of-tests.mk: Adjust.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Diffstat (limited to 't/remake-timing-bug-pr8365.sh')
-rwxr-xr-x | t/remake-timing-bug-pr8365.sh | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/t/remake-timing-bug-pr8365.sh b/t/remake-timing-bug-pr8365.sh new file mode 100755 index 000000000..3e7f1e6e4 --- /dev/null +++ b/t/remake-timing-bug-pr8365.sh @@ -0,0 +1,107 @@ +#! /bin/sh +# Copyright (C) 2011-2012 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/>. + +# Test for automake bug#8365, related to Makefile remake rules. +# The bug is due to subtle timestamp issues and limitations in +# make's behaviour, and is very unlikely to be triggered (we have +# to resort to timestamp edit hacks to consistently expose it); in +# any account, it is nigh to impossible to trigger it by running +# make by hand. Thus, fixing it would not be worth the hassle, but +# we prefer to keep it exposed anyway. + +. ./defs || exit 1 + +# We'll use calls to stat to get debugging information. +if stat /dev/null; then stat=stat; else stat=:; fi + +cat >> configure.ac << 'END' +FOOBAR=zardoz +AC_OUTPUT +END + +: > Makefile.am + +$ACLOCAL +# Run automake *before* autoconf, because we want to ensure that +# Makefile.in is not newer than configure. +$AUTOMAKE +$AUTOCONF + +./configure +$MAKE Makefile +# Sanity check. +$EGREP 'FOOBAR|zardoz' Makefile && fatal_ 'unexpected AC_SUBST in Makefile' + +echo 'AC_SUBST([FOOBAR])' >> configure.ac + +# Modified configure dependencies must have the same timestamp of +# config.status and Makefile in order to trigger the bug. +# We also re-touch config.status, because "touch -r" can truncate +# timestamps on file systems with sub-second resolutions (see the +# autoconf manual). Finally, we also sleep before touching, to ensure +# that the (possibly truncated) timestamps of config.status etc. are +# strictly newer than the non-truncated configure timestamp. +$stat config.status Makefile configure.ac +$sleep +touch config.status +touch -r config.status config.status Makefile configure.ac +$stat config.status Makefile configure.ac + +# Also, the race condition is triggered only when aclocal, automake +# and aclocal run fast enough to keep the timestamp of the generated +# aclocal.m4, Makefile.in and configure equal to the timestamp of +# Makefile & config.status. To reproduce this race consistently, we +# need the following hackish wrappers. + +cat > aclocal-wrap <<END +#!/bin/sh +set -ex +# aclocal shouldn't use our autoconf wrapper when extracting +# the races from configure.ac. +AUTOCONF='$AUTOCONF'; export AUTOCONF +$ACLOCAL "\$@" +touch -r config.status aclocal.m4 +$stat aclocal.m4 +END + +cat > automake-wrap <<END +#!/bin/sh +set -ex +# automake shouldn't use our autoconf wrapper when extracting +# the races from configure.ac. +AUTOCONF='$AUTOCONF'; export AUTOCONF +$AUTOMAKE "\$@" +touch -r config.status Makefile.in +$stat Makefile.in +END + +cat > autoconf-wrap <<END +#!/bin/sh +set -ex +$AUTOCONF "\$@" +touch -r config.status configure +$stat configure +END + +chmod a+x aclocal-wrap automake-wrap autoconf-wrap + +env \ + ACLOCAL=./aclocal-wrap AUTOMAKE=./automake-wrap AUTOCONF=./autoconf-wrap \ + $MAKE -e Makefile +grep '^FOOBAR =' Makefile.in +grep '^FOOBAR *= *zardoz *$' Makefile + +: |