#
# Makefile for the doc directory
#

srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
top_builddir = ..
my_dir = doc
INSTALL = @INSTALL@

@MCONFIG@

DVI=texi2dvi
DVIPS=dvips -o "$@"
INFO=@MAKEINFO@
HTML=makeinfo --html --no-split
PS2PDF=ps2pdf

all:: libext2fs.info libext2fs.dvi libext2fs.html

install-doc-libs: libext2fs.info libext2fs.dvi
	$(Q) $(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*
	$(E) "	MKINSTALLDIRS $(infodir)"
	$(Q) $(MKINSTALLDIRS) $(DESTDIR)$(infodir)
	-$(Q) for i in libext2fs.info* ; do \
		echo "	INSTALL_DATA $(infodir)/$$i" ; \
		$(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i ; \
	done
	$(E) "	GZIP $(infodir)/libext2fs.info*"
	-$(Q) gzip -9 $(DESTDIR)$(infodir)/libext2fs.info*

uninstall-doc-libs:
	$(RM) -rf $(DESTDIR)$(infodir)/libext2fs.info*

libext2fs.info: $(srcdir)/libext2fs.texinfo
	$(E) "	MAKEINFO $@"
	-$(Q) $(INFO) $(srcdir)/libext2fs.texinfo

libext2fs.dvi: $(srcdir)/libext2fs.texinfo
	$(E) "	TEXI2DVI $@"
	-$(Q) $(DVI) $(srcdir)/libext2fs.texinfo

libext2fs.ps: libext2fs.dvi
	$(E) "	DVIPS $@"
	-$(Q) $(DVIPS) libext2fs.dvi

libext2fs.pdf: libext2fs.ps
	$(E) "	PS2PDF $@"
	-$(Q) $(PS2PDF) libext2fs.ps

libext2fs.html: $(srcdir)/libext2fs.texinfo
	$(E) "	TEXI2HTML $@"
	-$(Q) $(HTML) $(srcdir)/libext2fs.texinfo

.PHONY: distclean
distclean:: clean
	$(RM) -f Makefile

.PHONY: clean
clean:: clean-all

.PHONY: clean-all
clean-all:: clean-tex clean-backup clean-final clean-tarfiles clean-html

.PHONY: clean-final
clean-final::
	$(RM) -f *.ps *.info *.info-? *.html *.pdf

.PHONY: clean-tex
clean-tex::
	$(RM) -f *.aux *.cp *.dvi *.fn *.ky *.log *.pg *.toc *.tp *.vr *.fns

.PHONY: clean-backup
clean-backup::
	$(RM) -f *~ #*

.PHONY: clean-tarfiles
clean-tarfiles::
	$(RM) -f *.tar *.tar.gz *.tgz

clean-html::
	$(RM) -f *.html

