#
# manual.env file is a local file to define specific values if any
# manual.env.dist is a template for it.
MANUALENVFILE=manual.env
ENVFILE=$(shell [ -e ./$(MANUALENVFILE) ] && echo "OK")
ifeq ($(ENVFILE),OK)
  include $(MANUALENVFILE)
  REALMANUALENV=$(realpath ./$(MANUALENVFILE))
else
  $(error No environment file "$(MANUALENVFILE)" found. You can copy "$(MANUALENVFILE).dist" to "$(MANUALENVFILE)" and adjust some definitions.)
endif

AT=@
#
# WARNING !!! The following works *ONLY* when using MAKE with $(MAKE) -C subdir invocation.
LICENCE_FILES=$(wildcard $(LICENCE_DIR)/*.tex)
WWW_DIR=./www-$(DOC)
HTML_DIR=$(abspath ./html)
export HTML_DIR
TEX_FILES=$(wildcard *tex)
WEB_FILES_TO_LINK=$(TRANSLATEIMGS) $(LATEX2HTMLINIT)
#
# pdflatex commands and/or compilation directives
PDFLATEX=$(COMPILER)
PDFLATEXSILENT=batchmode
PDFLATEXVERBOSE=errorstopmode
PDFLATEXOPTIONS=-halt-on-error -interaction=$(PDFLATEXSILENT) # $(PDFLATEXVERBOSE) # 
PDFOUTPUT="> $(DOC).out 2>&1"
#
# Makefile used to produce HTML documentation
EXTSEDFILES=html-external-references.sed
INTSEDFILE=html-internal-references.sed

first_rule: all

# special option for pdflatex to find custom shared tex libraries
TEXINPUTS=.:$(LATEX_DIR)://:
export TEXINPUTS

ifeq ($(DOC),main)
  TLS=extract-tls
  CLEANTLS=cleantls
else
  TLS=
  CLEANTLS=
endif

all: $(TLS) pdflatex web mini-clean

extract-tls: tls.tex
	$(TOOLS_DIR)/extract.pl TLS FileDaemon:FileDaemon tls.tex > FileDaemonFileDaemonTls.tex
	$(TOOLS_DIR)/extract.pl TLS FileDaemon:Director tls.tex > FileDaemonDirectorTls.tex
	$(TOOLS_DIR)/extract.pl TLS Storage:Storage tls.tex > StorageStorageTls.tex
	$(TOOLS_DIR)/extract.pl TLS Storage:Director tls.tex > StorageDirectorTls.tex
	$(TOOLS_DIR)/extract.pl TLS Console:Console tls.tex > ConsoleConsoleTls.tex
	$(TOOLS_DIR)/extract.pl TLS Console:Director tls.tex > ConsoleDirectorTls.tex
	$(TOOLS_DIR)/extract.pl TLS Director:Client tls.tex > DirectorClientTls.tex
	$(TOOLS_DIR)/extract.pl TLS Director:Console tls.tex > DirectorConsoleTls.tex
	$(TOOLS_DIR)/extract.pl TLS Director:Storage tls.tex > DirectorStorageTls.tex
	$(TOOLS_DIR)/extract.pl TLS Director:Director tls.tex > DirectorDirectorTls.tex
	touch extract-tls




.SUFFIXES:     .tex .html
.PHONY:
.DONTCARE:

verbose:
	$(AT)echo "SVG Covers dir:" $(SVGCOVERS_DIR)
	$(AT)echo "PDF Covers dir:" $(PDFCOVERS_DIR)
	$(AT)echo "Coverpage name:" $(COVERPAGE_NAME)
	$(AT)echo "LaTeX dir:" $(LATEX_DIR)
	$(AT)echo "Bmanual name:" $(BMANUAL_NAME)
	$(AT)echo "TEXINPUTS: " $(TEXINPUTS)
	$(AT)echo "WWW_DIR:" $(WWW_DIR)
	$(AT)echo "TeX files: " $(TEX_FILES)
	$(AT)echo "Makefile for the web:" $(WEB_MAKEFILE)
	$(AT)echo "Web files to link: " $(WEB_FILES_TO_LINK)
	$(AT)echo "HTML files: " $(HTML_FILES)

pdfcovers:
	$(AT)echo -n "Linking coverpage and background PDF format..."
	$(AT)(if [ -e $(SVGCOVERS_DIR) ]; then $(MAKE) -C $(SVGCOVERS_DIR) pdf; fi)
	$(AT)ln -sf $(PDFCOVERS_DIR)/$(COVERPAGE_NAME).pdf $(LATEX_DIR)/$(BMANUAL_NAME).pdf
	$(AT)echo "Done."

pdfimages: 
	$(AT)echo "Converting SVG to PDF images..."
	$(AT)(if [ -e $(IMAGES_DIR)/svg ]; then $(MAKE) -C $(IMAGES_DIR)/svg pdf; fi)
	$(AT)echo "Done."

pngimages:
	$(AT)echo "Converting SVG to PNG images..."
	$(AT)(if [ -e $(IMAGES_DIR)/svg ]; then $(MAKE) -C $(IMAGES_DIR) png; fi)
	$(AT)echo "Done."

pdflatex: external-references PDF.figlet
	$(AT)echo " "
	$(AT)cat PDF.figlet
	$(AT)makeindex -s $(DOC).ist ${DOC}.idx -o ${DOC}.ind 2>/dev/null
	$(AT)$(PDFLATEX) $(PDFLATEXOPTIONS) ${DOC}.tex $(PDFOUTPUT)
	$(AT)$(PDFLATEX) $(PDFLATEXOPTIONS) ${DOC}.tex $(PDFOUTPUT)
	$(AT)echo "$(DOC).pdf generated."
	$(AT)mkdir -p pdf
	$(AT)cp $(DOC).pdf pdf/

external-references: $(TLS) REF.figlet pdfcovers pdfimages
	$(AT)echo " "
	$(AT)cat REF.figlet
	$(AT)$(PDFLATEX) $(PDFLATEXOPTIONS) ${DOC}.tex $(PDFOUTPUT)
	$(AT)echo "$(DOC) external references done."

web: mini-clean HTML.figlet
	$(AT)echo ""
	$(AT)cat HTML.figlet
	$(AT)rm -rf $(WWW_DIR)
	$(AT)mkdir -p $(WWW_DIR)
	$(AT)(for F in $(TEX_FILES) ;\
	do \
	cat $$F | sed -f ../bpattern > $(WWW_DIR)/$$F ; \
	done)
	$(AT)cat $(LATEX_DIR)/bcoverpage.tex | sed -f ../bpattern > $(WWW_DIR)/bcoverpage.tex
	$(AT)ln -sf $(WEB_MAKEFILE) $(WWW_DIR)/Makefile
	$(AT)(if [ -e $(REALMANUALENV) ]; then ln -sf $(REALMANUALENV) $(WWW_DIR)/$(MANUALENVFILE); fi)
	$(AT)(for F in $(WEB_FILES_TO_LINK);\
	do \
	ln -sf $$F $(WWW_DIR)/;\
	done)
	$(AT)mkdir -p html
	$(AT)$(MAKE) -C $(WWW_DIR)
	$(AT)(for F in $(HTML_DIR)/*.html; do sed -i -f ../afterhtml $$F ; for H in ../*/$(EXTSEDFILES) ./$(INTSEDFILE) ; do sed -i -f $$H $$F ; done ; done)
	$(AT)echo "HTML $(DOC) done."

references:
	$(AT)(for F in $(HTML_DIR)/*.html ; do for H in ../*/$(EXTSEDFILES) ./$(INTSEDFILE); do sed -i -f $$H $$F ; done ; done)

show:
	xdvi $(DOC)

texcheck:
	./check_tex.pl $(DOC).tex

main_configs:
	pic2graph -density 100 <main_configs.pic >main_configs.png

mini-clean:
	$(AT)rm -f 1 2 3 *~
	$(AT)rm -f *.gif *.jpg
	$(AT)rm -f *.cp *.fn *.ky *.log *.pg
	$(AT)rm -f *.backup *.ilg *.lof *.lot
	$(AT)rm -f *.cdx *.cnd *.ddx *.ddn *.fdx *.fnd *.ind *.sdx *.snd
	$(AT)rm -f *.dnd *.old *.out 
	$(AT)rm -f $(DOC)/*.gif $(DOC)/*.jpg
	$(AT)rm -f $(DOC)/*.aux $(DOC)/*.cp $(DOC)/*.fn $(DOC)/*.ky $(DOC)/*.log $(DOC)/*.pg
	$(AT)rm -f $(DOC)/*.backup $(DOC)/*.ilg $(DOC)/*.lof $(DOC)/*.lot
	$(AT)rm -f $(DOC)/*.cdx $(DOC)/*.cnd $(DOC)/*.ddx $(DOC)/*.ddn $(DOC)/*.fdx $(DOC)/*.fnd $(DOC)/*.ind $(DOC)/*.sdx $(DOC)/*.snd
	$(AT)rm -f $(DOC)/*.dnd $(DOC)/*.old $(DOC)/*.out
	$(AT)rm -f $(DOC)/WARNINGS
	$(AT)rm -rf html


clean: mini-clean
	$(AT)find . -type f -name "$(DOC).mtc*" -exec rm {} \;
	$(AT)find . -type l -name "*.tex" -exec rm {} \;
	$(AT)rm -f 1 2 3 *.tex~
	$(AT)rm -f *.png *.gif *.jpg
	$(AT)rm -f *.pdf *.aux *.cp *.fn *.ky *.log *.pg
	$(AT)rm -f *.html *.backup *.ps *.dvi *.ilg *.lof *.lot
	$(AT)rm -f *.cdx *.cnd *.ddx *.ddn *.fdx *.fnd *.ind *.sdx *.snd *.maf *.mst *.mw
	$(AT)rm -f *.dnd imagename_translations
	$(AT)rm -f *.old WARNINGS *.out *.toc *.idx
	$(AT)rm -f $(DOC)i-*.tex
	$(AT)rm -rf $(DOC)
	$(AT)rm -f $(INTSEDFILE) $(EXTSEDFILES) html-external-references

webclean:
	$(AT)rm -rf $(WWW_DIR)
	$(AT)rm -f bcoverpage.tex
	$(AT)rm -rf ../images

distclean: webclean clean $(CLEANTLS)
	$(AT)rm -f images.pl labels.pl internals.pl
	$(AT)rm -f version.tex
	$(AT)rm -rf html
	$(AT)rm -rf pdf
	$(AT)rm -f *.figlet *~
	$(AT)$(MAKE) -C $(SVGCOVERS_DIR) $@
	$(AT)rm -f $(LATEX_DIR)/$(BMANUAL_NAME).pdf

cleantls:
	$(info Cleaning TLS files)
	$(AT)rm -f *Tls.tex extract-tls

# The following is not called but explains how the files were generated.
REF.figlet:
	$(AT)figlet "$(BACULAVERSION) $(DOC) cross-references" > REF.figlet

PDF.figlet:
	$(AT)figlet "$(BACULAVERSION) $(DOC) PDF" > PDF.figlet

HTML.figlet:
	$(AT)figlet "$(BACULAVERSION) $(DOC) HTML" > HTML.figlet

figlet: REF.figlet PDF.figlet HTML.figlet
