## automake - create Makefile.in from Makefile.am
## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2003, 2004, 2005,
## 2008, 2009 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/>.

## Explicitly look in srcdir for benefit of non-GNU makes.


%CONFIG_H%: %STAMP%
## Recover from removal of CONFIG_HEADER
	@if test ! -f $@; then \
	  rm -f %STAMP%; \
	  $(MAKE) $(AM_MAKEFLAGS) %STAMP%; \
	else :; fi


%STAMP%: %CONFIG_H_DEPS% $(top_builddir)/config.status
	@rm -f %STAMP%
	cd $(top_builddir) && $(SHELL) ./config.status %CONFIG_H_PATH%


## Only the first file of AC_CONFIG_HEADERS is assumed to be generated
## by autoheader.
if %?FIRST%
%CONFIG_HIN%: %MAINTAINER-MODE% $(am__configure_deps) %FILES%
## Cater to parallel BSD make.
	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
## 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 this.
##
## 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 an
## out-of-date config.h without knowing it).  One situation where this
## can occur is the following:
## 1. the user updates some configure dependency (let's say foo.m4)
##    and runs `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
##    discovers 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
## config.hin.
	touch $@
endif %?FIRST%
