| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | #! /bin/sh# Copyright (C) 2011-2017 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.. test-init.shcat > configure.ac <<ENDAC_INIT([$me], [1.0])AM_INIT_AUTOMAKE([foreign -Wall -Werror])AC_CONFIG_FILES([Makefile sub/Makefile])AC_SUBST([MAGIC], [magic])AC_OUTPUTENDecho SUBDIRS = sub > Makefile.ammkdir 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 bincat > bin/automake <<END#!/bin/shset -ePATH='$PATH'; export PATHsentinel='$ocwd/automake-has-run'if test -f "\$sentinel"; then  echo "Automake has been run more than one time" >&2  exit 1else  echo automake has run > "\$sentinel"fi$sleep; $sleep;exec $AUTOMAKE \${1+"\$@"}ENDchmod a+x bin/automakecat > bin/aclocal <<END#!/bin/shset -ePATH='$PATH'; export PATHsentinel='$ocwd/aclocal-has-run'if test -f "\$sentinel"; then  echo "Aclocal has been run more than one time" >&2  exit 1else  echo aclocal has run > "\$sentinel"fi$sleep; $sleep;exec $ACLOCAL \${1+"\$@"}ENDchmod a+x bin/aclocal# Just to be sure.cp bin/automake bin/automake-$APIVERSIONcp bin/aclocal bin/aclocal-$APIVERSIONPATH=$ocwd/bin$PATH_SEPARATOR$PATH; export PATHAUTOMAKE=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-runtest -f aclocal-has-runrm -f automake-has-run aclocal-has-run./configure# Sanity check: Makefile doesn't get updated uselessly.run_make ACLOCAL=false AUTOMAKE=false AUTOCONF=false$sleepsed "s|magic|magic2|" configure.ac > tmv -f t configure.accd subrun_make Makefile AUTOMAKE="$AUTOMAKE" ACLOCAL="$ACLOCAL"cd ..# For debugging.ls -l . subgrep -i magic configure Makefile.in Makefile sub/Makefile.in sub/Makefile# Sanity checks.$FGREP magic2 configure$FGREP magic2 Makefile$FGREP magic2 sub/Makefile:
 |