# 
# Makefile.in for etc
#

DESTDIR		=

prefix 		= @prefix@
exec_prefix 	= @exec_prefix@

srcdir  = @srcdir@
VPATH	= @srcdir@

bindir  = @bindir@
libdir  = @libdir@
tooldir = $(libdir)
datadir = @datadir@

mandir  = @mandir@
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
infodir = @infodir@

SHELL = /bin/sh

INSTALL 	= @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@

MAKEINFO = `if [ -f ../texinfo/makeinfo/makeinfo ]; \
	then echo ../texinfo/makeinfo/makeinfo; \
	else echo makeinfo; fi`
TEXI2DVI = `if [ -f ../texinfo/util/texi2dvi ]; \
	then echo ../texinfo/util/texi2dvi; \
	else echo texi2dvi; fi`
TEXI2HTML = texi2html
DVIPS = dvips

# Where to find texinfo.tex to format documentation with TeX.
TEXIDIR = $(srcdir)/../texinfo

#### Host, target, and site specific Makefile fragments come in here.
###

INFOFILES = standards.info configure.info
DVIFILES = standards.dvi configure.dvi

all: info
install: install-info

uninstall:

info:
	for f in $(INFOFILES); do \
	  if test -f $(srcdir)/`echo $$f | sed -e 's/.info$$/.texi/'`; then \
	    if $(MAKE) "MAKEINFO=$(MAKEINFO)" $$f; then \
	      true; \
	    else \
	      exit 1; \
	    fi; \
	  fi; \
	done

install-info: info
	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(infodir)
	if test ! -f standards.info; then cd $(srcdir); fi; \
	if test -f standards.info; then \
	  for i in standards.info*; do \
	    $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \
	  done; \
	fi
	if test ! -f configure.info; then cd $(srcdir); fi; \
	if test -f configure.info; then \
	  for i in configure.info*; do \
	    $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \
	  done; \
	fi

dvi:
	for f in $(DVIFILES); do \
	  if test -f $(srcdir)/`echo $$f | sed -e 's/.dvi$$/.texi/'`; then \
	    if $(MAKE) "TEXI2DVI=$(TEXI2DVI)" $$f; then \
	      true; \
	    else \
	      exit 1; \
	    fi; \
	  fi; \
	done

standards.info: $(srcdir)/standards.texi $(srcdir)/make-stds.texi
	$(MAKEINFO) --no-split -I$(srcdir) -o standards.info $(srcdir)/standards.texi

standards.dvi: $(srcdir)/standards.texi
	TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/standards.texi

standards.ps: standards.dvi
	$(DVIPS) standards.dvi -o standards.ps

# makeinfo requires images to be in the current directory.
configure.info: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin
	rm -f configdev.txt configbuild.txt
	cp $(srcdir)/configdev.tin configdev.txt
	cp $(srcdir)/configbuild.tin configbuild.txt
	$(MAKEINFO) -I$(srcdir) -o configure.info $(srcdir)/configure.texi
	rm -f configdev.txt configbuild.txt

# texi2dvi wants both the .txt and the .eps files.
configure.dvi: $(srcdir)/configure.texi $(srcdir)/configdev.tin $(srcdir)/configbuild.tin $(srcdir)/configdev.ein $(srcdir)/configbuild.ein
	rm -f configdev.txt configbuild.txt
	cp $(srcdir)/configdev.tin configdev.txt
	cp $(srcdir)/configbuild.tin configbuild.txt
	rm -f configdev.eps configbuild.eps
	cp $(srcdir)/configdev.ein configdev.eps
	cp $(srcdir)/configbuild.ein configbuild.eps
	TEXINPUTS=$(TEXIDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/configure.texi
	rm -f configdev.txt configbuild.txt
	rm -f configdev.eps configbuild.eps

# dvips requires images to be in the current directory
configure.ps: configure.dvi $(srcdir)/configdev.ein $(srcdir)/configbuild.ein
	rm -f configdev.eps configbuild.eps
	cp $(srcdir)/configdev.ein configdev.eps
	cp $(srcdir)/configbuild.ein configbuild.eps
	$(DVIPS) configure.dvi -o configure.ps
	rm -f configdev.eps configbuild.eps

configure.html: $(srcdir)/configure.texi
	$(TEXI2HTML) -split_chapter $(srcdir)/configure.texi

clean:
	rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.log
	rm -f *.pg *.pgs *.toc *.tp *.tps *.vr *.vrs
	rm -f configdev.txt configbuild.txt configdev.eps configbuild.eps
	rm -f configdev.jpg configbuild.jpg

mostlyclean: clean

distclean:   clean
	rm -f Makefile config.status config.cache

maintainer-clean realclean:   distclean
	rm -f *.info*

Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag)
	$(SHELL) ./config.status

## these last targets are for standards.texi conformance
dist:
check:
installcheck:
TAGS:
