#
# ${R_HOME}/doc/manual/Makefile

VPATH = @srcdir@
srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = ../..
subdir = doc/manual

include $(top_builddir)/Makeconf

SORT = sort # to match Windows

distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
SOURCES_TEXI = R-FAQ.texi R-admin.texi R-data.texi R-exts.texi \
  R-intro.texi R-ints.texi R-lang.texi
DISTFILES = \
	README \
	Makefile.in Makefile.win \
	R-defs.texi dir epsf.tex pdfcolor.tex \
	$(SOURCES_TEXI) rw-FAQ.texi \
	resources.texi \
	R-exts.R R-exts.c R-intro.R \
	refman.top refman.bot \
	ISBN Rman.css Rfaq.css quot.sed
SUBDIRS_WITH_NO_BUILD = images

OBJECTS_HTML = $(SOURCES_TEXI:.texi=.html)
OBJECTS_INFO = $(SOURCES_TEXI:.texi=.info)
OBJECTS_PDF = $(SOURCES_TEXI:.texi=.pdf)
OBJECTS_EPUB = $(SOURCES_TEXI:.texi=.epub)
OBJECTS_MOBI = $(SOURCES_TEXI:.texi=.mobi)

MAKEINDEX = @MAKEINDEX@
TEXI2ANY = @TEXI2ANY@
TEXI2ANY_HTML_OPTS = --html --no-split --css-include=$(srcdir)/Rman.css
TEXI2ANY_TEXT_OPTS = --number-sections --fill-column=76 --no-split --no-headers
TEXI2HTML = $(TEXI2ANY) $(TEXI2ANY_HTML_OPTS)
TEXI2TEXT = $(TEXI2ANY) $(TEXI2ANY_TEXT_OPTS)
## some broken versions of texi2dvi need C collation.
TEXI2DVI = LC_COLLATE=C @TEXI2DVI@ --texinfo="@set UseExternalXrefs "
TEXI2PDF = $(TEXI2DVI) --pdf
PDFLATEX = @PDFLATEX@
## These are used to check if there is a non-empty path to the
## texi2dvi script, and as it uses pdftex if that was detected.
TEXI2DVI0 = @TEXI2DVI@
PDFTEX = @PDFTEX@

BATCHPDFLATEX = $(PDFLATEX) -interaction=nonstopmode

## support for ebook conversion.
## ebook-convert is part of 'calibre'
## (http://calibre-ebook.com/download, or Debian/Fedora/... packages)
EBOOK = ebook-convert
## or on OS X
## EBOOK = /Applications/calibre.app/Contents/MacOS/ebook-convert
EBOOK_OPTS = --language en --publisher "R Core Team"

datarootdir = @datarootdir@
infodir = @infodir@
INSTALL_INFO = @INSTALL_INFO@

R_PAPERSIZE = @R_PAPERSIZE@
R_RD4PDF = @R_RD4PDF@

texinputs_BASE = $(R_PKGS_BASE:=-pkg.tex)
texinputs_RECOMMENDED = $(R_PKGS_RECOMMENDED:=-pkg.tex)
refman_DEPENDENCIES = version.tex $(top_srcdir)/share/texmf/tex/latex/Rd.sty
fullrefman_TEXINPUTS = $(texinputs_BASE) @USE_RECOMMENDED_PACKAGES_TRUE@ $(texinputs_RECOMMENDED)
SVN_REV = $(top_builddir)/SVN-REVISION

texiincludes = version.texi $(srcdir)/R-defs.texi

.SUFFIXES:
.SUFFIXES: .html .info .texi .pdf .epub .mobi

all: Makefile R docs

Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@

R: Makefile

docs: html

.texi.html:
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "'texi2any' v5.1 or later needed to make HTML docs but missing on your system." ; \
	  $(ECHO) "file $@ will be missing and linked from CRAN"; \
	else \
	  $(ECHO) "creating doc/manual/$@"; \
	  $(TEXI2HTML) -D UseExternalXrefs -I$(srcdir) $< -o $@.tmp || touch $@; \
	  droptitle68=`"$(TEXI2ANY)" --version | grep -q -F "6.8" && $(ECHO) '/<h1 class="settitle"/d'`; \
	  $(SED) -f $(srcdir)/quot.sed -e "$${droptitle68}" $@.tmp > $@; \
	  rm -f $@.tmp; \
	fi

.texi.info:
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "ERROR: 'texi2any' v5.1 or later needed but missing on your system."; \
	  exit 1; \
	fi
	$(TEXI2ANY) --enable-encoding -D UseExternalXrefs -I$(srcdir) $<

.texi.pdf:
	@if test -z "$(TEXI2DVI0)"; then \
	  $(ECHO) "ERROR: 'texi2dvi' needed but missing on your system."; \
	  exit 1; \
	fi
	@if test -z "$(PDFTEX)"; then \
	  $(ECHO) "ERROR: 'pdftex' needed but missing on your system."; \
	  exit 1; \
	fi
	TEXINPUTS="$(srcdir):$$TEXINPUTS" $(TEXI2PDF) $<

## It seems ebook-convert converts the directory, 
## so we populate a temporary dir.
.texi.epub:
	@mkdir -p tmp
	@$(TEXI2HTML) --no-headers -I$(srcdir) $< -o $@.tmp
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > tmp/$*.html
	@rm -f $@.tmp
	$(EBOOK) tmp/$*.html $@ $(EBOOK_OPTS) --authors "R Core Team"
	@rm -R tmp

.texi.mobi:
	@mkdir -p tmp
	@$(TEXI2HTML) --no-headers -I$(srcdir) $< -o $@.tmp
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > tmp/$*.html
	@rm -f $@.tmp
	$(EBOOK) tmp/$*.html $@ $(EBOOK_OPTS) --authors "R Core Team"
	@rm -R tmp

R-intro.epub: R-intro.texi
	@mkdir -p tmp
	@cp -R images tmp
	@$(TEXI2HTML) --no-headers -I$(srcdir) $< -o $@.tmp
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > tmp/$*.html
	@rm -f $@.tmp
	$(EBOOK) tmp/$*.html $@ $(EBOOK_OPTS) --authors \
  "W.N. Venables, D.M. Smith, R Core Team"
	@rm -R tmp

R-intro.mobi: R-intro.texi
	@mkdir -p tmp
	@cp -r images tmp
	@$(TEXI2HTML) --no-headers -I$(srcdir) $< -o $@.tmp
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > tmp/$*.html
	@rm -f $@.tmp
	$(EBOOK) tmp/$*.html $@ $(EBOOK_OPTS) --authors \
  "W.N. Venables, D.M. Smith, R Core Team"
	@rm -R tmp

version.tex: Makefile $(top_srcdir)/VERSION $(SVN_REV)
	@$(ECHO) "creating $(subdir)/$@"
	@(v=`cat $(top_srcdir)/VERSION`; \
	  v="$${v} (`sed -e 1d -e 's/^Last Changed Date: //' $(SVN_REV)`)"; \
	  $(ECHO) "$${v}") > $@

R_EXE = $(top_builddir)/bin/R --vanilla --no-echo

$(texinputs_BASE): FORCE
	@(pkg=`basename $@ -pkg.tex`; \
	if $(R_EXE) -e \
	  "tools:::.Rdnewer(\"$(top_srcdir)/src/library/$${pkg}\", \"$@\")"; then \
	  $(ECHO) "collecting LaTeX docs for package '$${pkg}' ..."; \
	  $(ECHO) "tools:::.pkg2tex(\"$(top_builddir)/library/$${pkg}\")" \
	    | LC_ALL=C $(R_EXE) ; \
	fi)
FORCE:

$(texinputs_RECOMMENDED): FORCE
	@(pkg=`basename $@ -pkg.tex`; \
	if find $@ -newer $(top_builddir)/library/$${pkg}/DESCRIPTION \
	    -print 2> /dev/null | grep $@ > /dev/null; then :; else \
	  $(ECHO) "collecting LaTeX docs for package '$${pkg}' ..."; \
	  $(ECHO) "tools:::.pkg2tex(\"$(top_builddir)/library/$${pkg}\")" \
	    | LC_ALL=C $(R_EXE) ; \
	fi)

version.texi: Makefile $(top_srcdir)/VERSION $(SVN_REV)
	@$(ECHO) "creating $(subdir)/$@"
	@(vv=`sed 's/ *(.*//' $(top_srcdir)/VERSION`;v=`echo $${vv}| sed 's/\([^ ]*\).*/\1/'`; \
	  $(ECHO) "@set VERSIONno $${v}" > $@; \
	  v="$${vv} (`sed -e 1d -e 's/^Last Changed Date: //' $(SVN_REV)`)"; \
	  $(ECHO) "@set VERSION $${v}" >> $@; \
	  rwv=`$(R_EXE) -f $(top_srcdir)/src/gnuwin32/fixed/rwver.R`; \
	  $(ECHO) "@set RWVERSION $${rwv}" >> $@ )
	@if test "$(R_PAPERSIZE)" = "a4"; then \
	  $(ECHO) "@afourpaper" >> $@ ; \
	fi

html: $(OBJECTS_HTML)
	@(cd ../html; $(MAKE) index.html)

R-admin.html: $(texiincludes) $(srcdir)/Rman.css
R-data.html: $(texiincludes) $(srcdir)/Rman.css
R-exts.html: $(texiincludes) $(srcdir)/Rman.css
R-intro.html: stamp-images-html $(texiincludes) $(srcdir)/Rman.css
R-ints.html: $(texiincludes) $(srcdir)/Rman.css
R-lang.html: $(texiincludes) $(srcdir)/Rman.css
R-FAQ.html: $(srcdir)/Rman.css

ebooks: epub mobi
epub: $(OBJECTS_EPUB)
mobi: $(OBJECTS_MOBI)

info: $(OBJECTS_INFO)
R-admin.info: $(texiincludes)
R-data.info: $(texiincludes)
R-exts.info: $(texiincludes)
R-intro.info: $(texiincludes)
R-ints.info: $(texiincludes)
R-lang.info: $(texiincludes)

pdf: fullrefman.pdf $(OBJECTS_PDF)
refman.pdf: $(refman_DEPENDENCIES) $(texinputs_BASE)
	@if test -z "$(PDFLATEX)"; then \
	  $(ECHO) "ERROR: 'pdflatex' needed but missing on your system."; \
	  exit 1; \
	fi
	@$(ECHO) "PDF/LaTeX documentation: reference index ..."
	@rm -f *.aux refman.toc refman.ind
## <NOTE>
## We do not make sure $(ECHO) does not interpret backslash escapes.
## Could be trouble ...
	@(opt="$(R_PAPERSIZE)paper"; \
	  $(ECHO) "\\documentclass[$${opt}]{book}"; \
	  opt="$(R_RD4PDF)"; \
	  $(ECHO) "\\usepackage[$${opt}]{Rd}"; \
	  $(ECHO) "\\usepackage[utf8]{inputenc}"; \
	  cat $(srcdir)/refman.top; \
	  texinputs=`(for f in $(texinputs_BASE); \
	    do $(ECHO) $${f}; done) | LC_COLLATE=C $(SORT)`; \
	  for f in $${texinputs}; do $(ECHO) "\\input{$${f}}"; done; \
	  cat $(srcdir)/refman.bot) > refman.tex
## </NOTE>
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) refman.tex
	@-$(MAKEINDEX) refman
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) refman.tex
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) refman.tex
fullrefman.pdf: $(refman_DEPENDENCIES) $(fullrefman_TEXINPUTS)
	@if test -z "$(PDFLATEX)"; then \
	  $(ECHO) "ERROR: 'pdflatex' needed but missing on your system."; \
	  exit 1; \
	fi
	@$(ECHO) "PDF/LaTeX documentation: full reference index ..."
	@rm -f *.aux fullrefman.toc fullrefman.ind
	@(opt="$(R_PAPERSIZE)paper"; \
	  $(ECHO) "\\documentclass[$${opt}]{book}"; \
	  opt="$(R_RD4PDF)"; \
	  $(ECHO) "\\usepackage[$${opt}]{Rd}"; \
	  $(ECHO) "\\usepackage[utf8]{inputenc}"; \
	  cat $(srcdir)/refman.top; \
	  if test -z "@USE_RECOMMENDED_PACKAGES_TRUE@"; then \
	    $(ECHO) "\\part{}"; \
	    texinputs=`(for f in $(texinputs_BASE); \
	      do $(ECHO) $${f}; done) | LC_COLLATE=C $(SORT)`; \
	    for f in $${texinputs}; do $(ECHO) "\\input{$${f}}"; done; \
	    $(ECHO) "\\part{}"; \
	    texinputs=`(for f in $(texinputs_RECOMMENDED); \
	      do $(ECHO) $${f}; done) | LC_COLLATE=C $(SORT)`; \
	    for f in $${texinputs}; do $(ECHO) "\\input{$${f}}"; done; \
	  else \
	    texinputs=`(for f in $(texinputs_BASE); \
	      do $(ECHO) $${f}; done) | LC_COLLATE=C $(SORT)`; \
	    for f in $${texinputs}; do $(ECHO) "\\input{$${f}}"; done; \
	  fi; \
	  cat $(srcdir)/refman.bot) > fullrefman.tex
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) fullrefman.tex
	@-$(MAKEINDEX) fullrefman
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) fullrefman.tex
	@TEXINPUTS="$(top_srcdir)/share/texmf/tex/latex:$$TEXINPUTS" \
	  $(BATCHPDFLATEX) fullrefman.tex

R-admin.pdf: $(texiincludes)
R-data.pdf: $(texiincludes)
R-exts.pdf: $(texiincludes)
R-intro.pdf: stamp-images-pdf $(texiincludes)
R-ints.pdf: $(texiincludes)
stamp-images-pdf:
	@if test "$(BUILDDIR_IS_SRCDIR)" = no ; then \
	  $(MAKE) rdocdir=$(top_builddir)/doc install-images-pdf; \
	fi
	@touch $@
R-lang.pdf: $(texiincludes)
## R-FAQ.pdf does not depend on anything

## compact whatever manuals have been built -- needs qpdf and ghostscript
compact-pdf:
	@echo 'compacting PDF manuals in doc/manual'
	@../../bin$(R_ARCH)/Rscript -e 'tools::compactPDF(".", gs_quality="ebook")'

install: install-message installdirs install-html install-images-html
install-message:
	@$(ECHO) "installing $(subdir) ..."
installdirs:
	@$(MKINSTALLDIRS) "$(DESTDIR)$(rdocdir)/manual"
install-strip: install
install-images-html: installdirs
	@$(MKINSTALLDIRS) "$(DESTDIR)$(rdocdir)/manual/images"
	@-for f in $(srcdir)/images/*.png; do \
	  $(INSTALL_DATA) $${f} "$(DESTDIR)$(rdocdir)/manual/images"; \
	done
stamp-images-html:
	@if test "$(BUILDDIR_IS_SRCDIR)" = no ; then \
	  $(MAKE) rdocdir=$(top_builddir)/doc install-images-html; \
	fi
	@touch $@
install-images-pdf: installdirs
	@$(MKINSTALLDIRS) "$(DESTDIR)$(rdocdir)/manual/images"
	@-for f in $(srcdir)/images/*.pdf; do \
	  $(INSTALL_DATA) $${f} "$(DESTDIR)$(rdocdir)/manual/images"; \
	done
## if there is no makeinfo >= 5.1 then there are no html pages
install-html: installdirs
	@for f in $(OBJECTS_HTML); do \
	  if test -f $${f} ; then \
	    $(INSTALL_DATA) $${f} "$(DESTDIR)$(rdocdir)/manual"; \
	  fi \
	done
install-info: info $(DESTDIR)$(infodir)/dir
	@$(ECHO) "installing R info pages ..."
	@for f in $(OBJECTS_INFO:.info=.info*); do \
	  $(INSTALL_DATA) $${f} "$(DESTDIR)$(infodir)"; \
	  $(R_GZIPCMD) -f "$(DESTDIR)$(infodir)/$${f}"; \
	done
	@$(ECHO) "updating '$(infodir)/dir' ..."
	@for f in $(OBJECTS_INFO); do \
	  $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$${f} \
	    || $(ECHO) "you need to adjust $(infodir)/dir manually"; \
	done
install-pdf: pdf installdirs
	@$(ECHO) "installing R manuals in PDF format ..."
	@for f in *.pdf; do \
	  $(INSTALL_DATA) $${f} "$(DESTDIR)$(rdocdir)/manual"; \
	done

$(DESTDIR)$(infodir)/dir:
	@$(MKINSTALLDIRS) "$(DESTDIR)$(infodir)"
	$(INSTALL_DATA) "$(srcdir)/dir" "$(DESTDIR)$(infodir)"

uninstall:
	@if test -f "$(DESTDIR)$(infodir)/R-data.info" \
	     || test -f "$(DESTDIR)$(infodir)/R-data.info.gz"; then \
	  $(MAKE) uninstall-info; \
	fi
	@$(ECHO) "uninstalling $(subdir) ..."
	@rm -Rf "$(DESTDIR)$(rdocdir)/manual"
uninstall-info:
	@$(ECHO) "uninstalling R info pages ..."
	@for f in $(OBJECTS_INFO); do \
	  $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) $${f} \
	    || $(ECHO) "you need to adjust $(infodir)/dir manually"; \
	done
	@for f in $(OBJECTS_INFO:.info=.info*); do \
	  rm -f "$(DESTDIR)$(infodir)/$${f}" "$(DESTDIR)$(infodir)/$${f}.gz" ; \
	done
uninstall-pdf:
	@$(ECHO) "uninstalling R manuals in PDF format ..."
	@-rm -f "$(DESTDIR)$(rdocdir)/manual"/*.pdf

mostlyclean: clean
clean:
	@if test "$(BUILDDIR_IS_SRCDIR)" = no ; then \
	  rm -Rf $(INSTFILES) images; \
	fi
	-@rm -f *.aux *.cp *.cps *.dvi *.en *.ens *.fn *.fns *.html *.info* \
	  *.ky *.kys *.log *.out *.pdf *.pg *.pgs *.ps *.ps-2 *.tmp \
	  *.toc *.tp *.vr *.vrs \
	  *-pkg.tex refman.i?? refman.tex fullrefman.i?? fullrefman.tex \
	  version.tex version.texi
	-@rm -f stamp-*
	-@rm -f *.epub *.mobi rw-FAQ rw-FAQ.html
distclean: clean
	-@rm -f Makefile
maintainer-clean: distclean

distdir: $(DISTFILES)
	@for f in $(DISTFILES); do \
	  test -f $(distdir)/$${f} \
	    || ln $(srcdir)/$${f} $(distdir)/$${f} 2>/dev/null \
	    || cp -p $(srcdir)/$${f} $(distdir)/$${f}; \
	done
	@for d in $(SUBDIRS_WITH_NO_BUILD); do \
	  ((cd $(srcdir); $(TAR) -c -f - $(DISTDIR_TAR_EXCLUDE) $${d}) \
	      | (cd $(distdir); $(TAR) -x -f -)) \
	    || exit 1; \
	done
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "ERROR: 'texi2any' v5.1 or later needed but missing on your system."; \
	  exit 1; \
	fi
#	$(distdir)/doc/html has already been created
	@$(TEXI2HTML) --no-headers --number-sections \
	  $(srcdir)/R-admin.texi -I$(srcdir) \
	  -o $(distdir)/../html/R-admin.html

front-matter: ${top_builddir}/doc/RESOURCES ${top_builddir}/doc/FAQ

${top_builddir}/doc/RESOURCES: $(srcdir)/resources.texi
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "'texi2any' v5.1 or later needed to make HTML docs but missing on your system." ; \
	  $(ECHO) "file doc/RESOURCES will be missing"; \
	else \
	  $(ECHO) "creating RESOURCES"; \
	  $(TEXI2TEXT) $(srcdir)/resources.texi -o $@; \
	fi

${top_builddir}/doc/FAQ: $(srcdir)/R-FAQ.texi
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "'texi2any' v5.1 or later needed to make HTML docs but missing on your system." ; \
	  $(ECHO) "file doc/FAQ will be missing"; \
	else \
	  $(ECHO) "creating FAQ"; \
	  $(TEXI2TEXT) $(srcdir)/R-FAQ.texi -o $@; \
	fi

html-non-svn: ../html/resources.html

../html/resources.html: $(srcdir)/resources.texi
	@if test -z "$(TEXI2ANY)"; then \
	  $(ECHO) "'texi2any' v5.1 or later needed to make HTML docs but missing on your system." ; \
	  $(ECHO) "file doc/html/resources.html will be missing"; \
	else \
	  $(ECHO) "creating doc/html/resources.html"; \
	  $(TEXI2ANY) --html --no-split --no-headers \
	    --css-include=$(top_srcdir)/doc/html/R.css $(srcdir)/resources.texi -o $@; \
	fi

## Added here to allow testing rw-FAQ changes on Unix.
Windows-FAQ: rw-FAQ rw-FAQ.html rw-FAQ.pdf

RVER = `cut -d' ' -f1 $(top_srcdir)/VERSION | $(SED) -n 1p`
RPREFIX = `../../bin$(R_ARCH)/Rscript $(top_srcdir)/src/gnuwin32/fixed/rwver.R`
SEDVER = -e s/@RVER@/$(RVER)/g -e s/@RWVER@/$(RPREFIX)/g

rw-FAQ.html: rw-FAQ.texi $(top_srcdir)/VERSION $(srcdir)/Rman.css
	@echo "making rw-FAQ.html"
	@$(SED) $(SEDVER) $< > tmp.texi
	@$(TEXI2ANY) --no-split --html --no-headers --number-sections --css-include=$(srcdir)/Rman.css -o $@ tmp.texi
	@rm -f tmp.texi

rw-FAQ: rw-FAQ.texi $(top_srcdir)/VERSION
	@echo "making rw-FAQ"
	@$(SED) $(SEDVER) $< > tmp.texi
	@$(TEXI2ANY) --no-headers --number-sections -o $@ tmp.texi
	@rm -f tmp.texi

rw-FAQ.pdf: rw-FAQ.texi $(top_srcdir)/VERSION
	@$(SED) $(SEDVER) $< > tmp.texi
	@$(TEXI2PDF) tmp.texi
	@mv tmp.pdf $@
	@rm tmp.*
