#-*-Makefile-*-
#
# ${R_HOME}/doc/manual/Makefile.win

ECHO = echo

include ../../src/gnuwin32/MkRules

ifeq "$(MIKTEX)" "TRUE"
R_TEXOPTS = --include-directory=../../share/texmf/tex/latex
# TEXI2DVI = texi2dvi
else
R_TEXOPTS =
# TEXI2DVI =
endif

R_EXE = ../../$(BINDIR)/Rterm

include ../../share/make/vars.mk

srcdir = .
top_srcdir = ../..
subdir = doc/manual

SOURCES_TEXI = R-FAQ.texi R-admin.texi R-data.texi R-exts.texi \
  R-intro.texi R-ints.texi R-lang.texi

OBJECTS_HTML = $(SOURCES_TEXI:.texi=.html)
OBJECTS_INFO = $(SOURCES_TEXI:.texi=.info)
OBJECTS_PDF = $(SOURCES_TEXI:.texi=.pdf)

## Now set in MkRules
PDFLATEX = pdflatex $(R_TEXOPTS)
PDFTEX = pdftex $(R_TEXOPTS)
BATCHPDFLATEX = $(PDFLATEX) -interaction=nonstopmode

MAKEINDEX = LC_ALL=C makeindex
TEXINDEX = LC_ALL=C texindex

TEXI2ANY_HTML_OPTS = --html --no-split --css-include=$(srcdir)/Rman.css
TEXI2ANY_TEXT_OPTS = --number-sections --fill-column=76 --no-split --no-headers
TEXI2HTML = LC_ALL=C $(TEXI2ANY) $(TEXI2ANY_HTML_OPTS)
TEXI2TEXT = LC_ALL=C $(TEXI2ANY) $(TEXI2ANY_TEXT_OPTS)

R_PAPERSIZE = a4
# omit 'hyper' to omit the hyperlinks
R_RD4PDF = times,inconsolata,hyper

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) $(texinputs_RECOMMENDED)
SVN_REV = $(top_srcdir)/SVN-REVISION

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

.SUFFIXES:
.SUFFIXES: .html .info .texi .pdf

all: pdf

ifneq "$(TEXI2ANY)" "missing"
.texi.html:
	@$(ECHO) "creating doc/manual/$@"
	@$(TEXI2HTML) -D UseExternalXrefs -I$(srcdir) $< -o $@.tmp || touch $@
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > $@
	@rm -f $@.tmp

R-admin.html: $(srcdir)/R-admin.texi
	@$(ECHO) "creating doc/manual/$@"
	@$(TEXI2HTML) -I$(srcdir) $(srcdir)/R-admin.texi -o $@.tmp || touch $@
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > $@
	@rm -f $@.tmp

R-FAQ.html: R-FAQ.texi
	@$(ECHO) "creating doc/manual/$@"
	@LC_ALL=C $(TEXI2ANY) --html --no-split --css-include=Rfaq.css -D UseExternalXrefs -I$(srcdir) $< -o $@.tmp || touch $@
	@$(SED) -f $(srcdir)/quot.sed $@.tmp > $@
	@rm -f $@.tmp

.texi.info:
	LC_ALL=C $(TEXI2ANY) --enable-encoding -D UseExternalXrefs -I$(srcdir) $<
else
.texi.html:
	@$(ECHO) "texi2any is not available"

R-admin.html: $(srcdir)/R-admin.texi
	@$(ECHO) "texi2any is not available"

R-FAQ.html: R-FAQ.texi
	@$(ECHO) "texi2any is not available"

.texi.info:
	@$(ECHO) "texi2any is not available"
endif

ifeq ($(strip $(TEXI2DVI)),)
.texi.pdf:
	$(PDFTEX) $<
	$(TEXINDEX) $*.cp $*.fn $*.vr
	$(PDFTEX) $<
	$(PDFTEX) $<
else
.texi.pdf:
	$(TEXI2DVI) --pdf --texinfo="@set UseExternalXrefs " $<
endif


html: $(OBJECTS_HTML)
$(OBJECTS_HTML): $(texiincludes) Rman.css

info: $(OBJECTS_INFO)
$(OBJECTS_INFO): $(texiincludes)

pdf: fullrefman.pdf $(OBJECTS_PDF)
$(OBJECTS_PDF): $(texiincludes)

refman.pdf: $(refman_DEPENDENCIES) $(texinputs_BASE) refman.top refman.bot
	@$(ECHO) " PDF/LaTeX documentation: reference index ..."
	@(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
	@$(RM) -f *.aux refman.toc refman.ind
	@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: $(fullrefman_TEXINPUTS) $(refman_DEPENDENCIES) \
   refman.top refman.bot
	@$(ECHO) " PDF/LaTeX documentation: full reference index ..."
	@(opt="$(R_PAPERSIZE)paper"; \
	  $(ECHO) "\\documentclass[$${opt}]{book}"; \
	  opt="$(R_RD4PDF)"; \
	  $(ECHO) "\\usepackage[$${opt}]{Rd}"; \
	  $(ECHO) "\\usepackage[utf8]{inputenc}"; \
	  cat $(srcdir)/refman.top; \
	  $(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; \
	  cat $(srcdir)/refman.bot) > fullrefman.tex
	@$(RM) -f *.aux fullrefman.toc fullrefman.ind
	@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

version.tex: $(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}") > $@

## Unlike Unix, we don't check dates
%-pkg.tex: FORCE
	@$(ECHO) "collecting LaTeX docs for package \`$*' ..."
	@$(ECHO) "tools:::.pkg2tex(\"$(top_srcdir)/library/$*\")" \
	    | LC_ALL=C $(R_EXE) --slave --vanilla
FORCE:

version.texi: Makefile.win $(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=$(shell ../../bin$(R_ARCH)/Rscript ../../src/gnuwin32/fixed/rwver.R); \
	  $(ECHO) "@set RWVERSION $${rwv}" >> $@ )
	@if test "$(R_PAPERSIZE)" = "a4"; then \
	  $(ECHO) "@afourpaper" >> $@ ; \
	fi


mostlyclean: clean
clean:
	@-rm -f *.aux *.toc *refman.i?? *.out *.log
	@-rm -f *.cp *.cps *.en *.ens *.fn *.fns *.ky *.kys \
	  *.out *.pg *.pgs *.tmp *.tp *.vr *.vrs \
	  version.tex version.texi refman.tex fullrefman.tex *-pkg.tex
distclean: clean
	@-rm -f *.pdf *.info* *.html
maintainer-clean: distclean

ifneq "$(TEXI2ANY)" "missing"
../FAQ: R-FAQ.texi
	@$(TEXI2TEXT) -o $@ $<
../RESOURCES: resources.texi
	@$(TEXI2TEXT) -o $@ $<
../html/resources.html: resources.texi
	@$(TEXI2ANY) --html --no-split --no-headers \
	  --css-include=$(top_srcdir)/doc/html/R.css -o $@ $<
else
../FAQ: R-FAQ.texi
	@$(ECHO) "texi2any is not available"
../RESOURCES: resources.texi
	@$(ECHO) "texi2any is not available"
../html/resources.html: resources.texi
	@$(ECHO) "texi2any is not available"
endif

## Run from src/gnuwin32/fixed/Makefile
svnonly: ../FAQ ../RESOURCES ../html/resources.html

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

FAQ: rw-FAQ ../html/rw-FAQ.html

ifneq "$(TEXI2ANY)" "missing"
../html/rw-FAQ.html: rw-FAQ.texi $(top_srcdir)/VERSION Rman.css
	@echo "making rw-FAQ.html"
	@$(SED) $(SEDVER) $< | \
	  $(TEXI2ANY) --no-split --html --no-headers --number-sections --css-include=Rman.css -o $@ 

rw-FAQ: rw-FAQ.texi $(top_srcdir)/VERSION
	@echo "making rw-FAQ"
	@$(SED) $(SEDVER) $< | \
	  $(TEXI2ANY) --no-headers --number-sections -o $@
else
../html/rw-FAQ.html: rw-FAQ.texi $(top_srcdir)/VERSION Rman.css
	@$(ECHO) "texi2any is not available"

rw-FAQ: rw-FAQ.texi $(top_srcdir)/VERSION
	@$(ECHO) "texi2any is not available"
endif

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