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

DIST_COMMON += %VTEXI% %STAMPVTI%

## Don't give this rule a command (even `@:').
## %STAMPVTI% is always newer than %VTEXI%, so this rule is always
## triggered.  If you equip this rule with a command, GNU make will
## assume %VTEXI% has been rebuild in the current directory and
## discard any %VTEXI% file found in a VPATH search.
%VTEXI%: %MAINTAINER-MODE% %STAMPVTI%

## Depend on configure so that version number updates cause a rebuild.
## (Not configure.ac, because not all setups define the version number
## in this file.)
%STAMPVTI%: %TEXI% $(top_srcdir)/configure
## It is wrong to have %STAMPVTI% dependent on %DIRSTAMP%, because
## %STAMPVTI% is distributed and %DIRSTAMP% isn't: a distributed file
## should never be dependent upon a non-distributed built file.
## Therefore we ensure that %DIRSTAMP% exists in the rule.
?DIRSTAMP?	test -f %DIRSTAMP% || $(MAKE) $(AM_MAKEFLAGS) %DIRSTAMP%
	@(dir=.; test -f ./%TEXI% || dir=$(srcdir); \
	set `$(SHELL) %MDDIR%mdate-sh $$dir/%TEXI%`; \
	echo "@set UPDATED $$1 $$2 $$3"; \
	echo "@set UPDATED-MONTH $$2 $$3"; \
	echo "@set EDITION $(VERSION)"; \
	echo "@set VERSION $(VERSION)") > %VTI%.tmp
## Use cp and rm here because some older "mv"s can't move across
## filesystems.  Furthermore, GNU "mv" in the AmigaDOS environment
## can't handle this.
	@cmp -s %VTI%.tmp %VTEXI% \
	  || (echo "Updating %VTEXI%"; \
	      cp %VTI%.tmp %VTEXI%)
	-@rm -f %VTI%.tmp
	@cp %VTEXI% $@

mostlyclean-am: mostlyclean-%VTI%
mostlyclean-%VTI%:
	-rm -f %VTI%.tmp

maintainer-clean-am: maintainer-clean-%VTI%
maintainer-clean-%VTI%:
%MAINTAINER-MODE%	-rm -f %STAMPVTI% %VTEXI%

.PHONY: mostlyclean-%VTI% maintainer-clean-%VTI%
