#
# Makefile for the doc directory
#

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

@MCONFIG@

DVI=texi2dvi --clean
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) "	MKDIR_P $(infodir)"
	$(Q) $(MKDIR_P) $(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 -9n $(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

