## automake - create Makefile.in from Makefile.am
## Copyright (C) 1994-2014 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.
## Use cp + mv so that the update of %VTEXI% is atomic even if
## the source directory is on a different file system.
?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$$$$ && \
	(cmp -s %VTI%.tmp$$$$ %VTEXI% \
	  || (echo "Updating %VTEXI%" && \
	      cp %VTI%.tmp$$$$ %VTEXI%.tmp$$$$ && \
	      mv %VTEXI%.tmp$$$$ %VTEXI%)) && \
	rm -f %VTI%.tmp$$$$ %VTEXI%.$$$$
	@cp %VTEXI% $@

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

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

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