
include ./Makefile.DEF

#=========================================================================================
#
# Sources
#
#=========================================================================================

#
# Master sources the document depends on
#
MASTER_SRC = Makefile Makefile.DEF

#-----------------------------------------------------------------------------------------
# Local sources the document depends on
#

FIG_SRC   = $(wildcard $(ABB_DIR)/*.fig)
PNG_SRC   = $(wildcard $(ABB_DIR)/*.png)
GIF_SRC   = $(wildcard $(ABB_DIR)/*.gif)
JPG_SRC   = $(wildcard $(ABB_DIR)/*.jpg)
TIF_SRC   = $(wildcard $(ABB_DIR)/*.tif)
EPS_SRC   = $(wildcard $(ABB_DIR)/*.eps)
ABB_SRC   = $(FIG_SRC) $(PNG_SRC) $(GIF_SRC) $(JPG_SRC) $(TIF_SRC) $(EPS_SRC)

FROM_FIG_EPS      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.fig,%.eps,$(notdir $(FIG_SRC))))
FROM_PNG_EPS      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.png,%.eps,$(notdir $(PNG_SRC))))
FROM_GIF_EPS      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.gif,%.eps,$(notdir $(GIF_SRC))))
FROM_JPG_EPS      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.jpg,%.eps,$(notdir $(JPG_SRC))))
FROM_TIF_EPS      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.tif,%.eps,$(notdir $(TIF_SRC))))
CONVERT_TO_EPS    = $(FROM_FIG_EPS) $(FROM_PNG_EPS) $(FROM_GIF_EPS) $(FROM_JPG_EPS) $(FROM_TIF_EPS)

FROM_FIG_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.fig,%.pdf,$(notdir $(FIG_SRC))))
FROM_PNG_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.png,%.pdf,$(notdir $(PNG_SRC))))
FROM_GIF_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.gif,%.pdf,$(notdir $(GIF_SRC))))
FROM_JPG_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.jpg,%.pdf,$(notdir $(JPG_SRC))))
FROM_TIF_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.tif,%.pdf,$(notdir $(TIF_SRC))))
FROM_EPS_PDF      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.eps,%.pdf,$(notdir $(EPS_SRC))))
CONVERT_TO_PDF    = $(FROM_FIG_PDF) $(FROM_PNG_PDF) $(FROM_GIF_PDF) $(FROM_JPG_PDF) $(FROM_TIF_PDF) $(FROM_EPS_PDF)

FROM_FIG_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.fig,%_small.gif,$(notdir $(FIG_SRC))))
FROM_PNG_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.png,%_small.gif,$(notdir $(PNG_SRC))))
FROM_GIF_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.gif,%_small.gif,$(notdir $(GIF_SRC))))
FROM_JPG_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.jpg,%_small.gif,$(notdir $(JPG_SRC))))
FROM_TIF_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.tif,%_small.gif,$(notdir $(TIF_SRC))))
FROM_EPS_SMALLGIF   = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.eps,%_small.gif,$(notdir $(EPS_SRC))))
CONVERT_TO_SMALLGIF = $(FROM_FIG_SMALLGIF) $(FROM_PNG_SMALLGIF) $(FROM_GIF_SMALLGIF) $(FROM_JPG_SMALLGIF) $(FROM_TIF_SMALLGIF) $(FROM_EPS_SMALLGIF)

FROM_FIG_JPG      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.fig,%.jpg,$(notdir $(FIG_SRC))))
FROM_PNG_JPG      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.png,%.jpg,$(notdir $(PNG_SRC))))
FROM_GIF_JPG      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.gif,%.jpg,$(notdir $(GIF_SRC))))
FROM_TIF_JPG      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.tif,%.jpg,$(notdir $(TIF_SRC))))
FROM_EPS_JPG      = $(addprefix $(TMP_DIR_PICS)/,$(patsubst %.eps,%.jpg,$(notdir $(EPS_SRC))))
CONVERT_TO_JPG    = $(FROM_FIG_JPG) $(FROM_PNG_JPG) $(FROM_GIF_JPG) $(FROM_TIF_JPG) $(FROM_EPS_JPG)

BIB_SRC   = $(wildcard $(BIB_DIR)/*.bib)

TEX_SRC   = $(wildcard ./*.tex)

SOURCES   = $(ABB_SRC) $(BIB_SRC) $(TEX_SRC) $(MASTER_SRC)


#=========================================================================================
#
# Multi target definitions
#
#=========================================================================================

BASE_TARGETS = main

DVI_TARGETS  = $(addsuffix .dvi, $(BASE_TARGETS))
PS_TARGETS   = $(addsuffix .ps, $(BASE_TARGETS))
PSGZ_TARGETS = $(addsuffix .ps.gz, $(BASE_TARGETS))
PDF_TARGETS  = $(addsuffix .pdf, $(BASE_TARGETS))
HTML_TARGETS = $(addsuffix .html, $(BASE_TARGETS))

ALL_TARGETS  = $(DVI_TARGETS) $(PS_TARGETS) $(PSGZ_TARGETS) $(PDF_TARGETS) $(HTML_TARGETS)


#=========================================================================================
#
# Rules for main targets
#
#=========================================================================================


#
# Default: all targets
#
all: $(ALL_TARGETS)


#
# Target for DVI file using simple latex
#
$(DVI_TARGETS): %.dvi: $(SOURCES)
	$(MAKE) -C . eps_pics
	@rm -f $@
	$(MAKE) -C . tmpclean
	$(MAKE) -C . tmpdir
	$(MAKE) -C . $*.single_latex
	$(MAKE) -C . $*.single_latex
	$(MAKE) -C . $*.single_bibtex
	$(MAKE) -C . $*.single_latex
	$(MAKE) -C . $*.single_latex
	$(MAKE) -C . $*.single_latex
	mv $(TMP_DIR)/$*.dvi .

 
#
# Target for PS file out of DVI file
#
$(PS_TARGETS): %.ps: %.dvi
	@rm -f $@
	$(DVIPS_CMD) -o $*.ps $*.dvi

	
#
# Target for PS.GZ file out of PS file
#
$(PSGZ_TARGETS): %.ps.gz: %.ps
	$(GZIP_CMD) -f -9 $*.ps


#
# Target for PDF file using pdflatex
#
$(PDF_TARGETS): %.pdf: $(SOURCES)
	$(MAKE) -C . pdf_pics
	@rm -f $@
	$(MAKE) -C . tmpclean
	$(MAKE) -C . tmpdir
	$(MAKE) -C . $*.single_pdflatex
	$(MAKE) -C . $*.single_pdflatex
	$(MAKE) -C . $*.single_bibtex
	$(MAKE) -C . $*.single_pdflatex
	$(MAKE) -C . $*.single_pdflatex
	$(MAKE) -C . $*.single_pdflatex
	cd $(TMP_DIR) ; $(THUMBPDF_CMD) $*.pdf
	cd $(TMP_DIR) ; $(PDFTEX_CMD) thumbpdf.tex
	$(MAKE) -C . $*.single_pdflatex
	mv $(TMP_DIR)/$*.pdf .


#
# Target for HTML version
#
$(HTML_TARGETS): %.html: $(SOURCES)
	$(MAKE) -C . smallgif_pics
	$(MAKE) -C . jpg_pics
	@rm -rf $@
	@rm -f $*.dvi
	$(MAKE) -C . $*.dvi
	$(MAKE) -C . $*.single_tth
	mkdir $*.html
	cp $(TMP_DIR)/*_small.gif ./$*.html/
	cp $(TMP_DIR)/*.jpg ./$*.html/
	mv $(TMP_DIR)/$*.html ./$*.html/index.html


#=========================================================================================
#
# Targets for picture conversion
#
#=========================================================================================

eps_pics:      tmpdir_pics $(CONVERT_TO_EPS)
pdf_pics:      tmpdir_pics $(CONVERT_TO_PDF)
smallgif_pics: tmpdir_pics $(CONVERT_TO_SMALLGIF)
jpg_pics:      tmpdir_pics $(CONVERT_TO_JPG)

$(FROM_FIG_EPS): %.eps: %.fig
	$(FIGTODEV_CMD) -L eps $*.fig $*.eps

$(FROM_PNG_EPS): %.eps: %.png
	$(MOGRIFY_CMD) -format eps $*.png

$(FROM_GIF_EPS): %.eps: %.gif
	$(MOGRIFY_CMD) -format eps $*.gif

$(FROM_JPG_EPS): %.eps: %.jpg
	$(MOGRIFY_CMD) -format eps $*.jpg

$(FROM_TIF_EPS): %.eps: %.tif
	$(MOGRIFY_CMD) -format eps $*.tif

#$(FROM_FIG_PDF) $(FROM_EPS_PDF): %.pdf: %.eps
$(CONVERT_TO_PDF): %.pdf: %.eps
	@# Hack for pictures generated on MacOS (i.e. wrong CR/LF format)
	if [ "`grep -c -e ^ $*.eps`" = "1" ]; then \
		$(AWK_CMD) --source 'BEGIN{RS="\r";}{print $0;}' $*.eps | $(EPSTOPDF_CMD) -nocompress --filter --outfile=$*.pdf ; \
	else \
		$(EPSTOPDF_CMD) -nocompress $*.eps --outfile=$*.pdf ; \
	fi

$(FROM_FIG_SMALLGIF) $(FROM_EPS_SMALLGIF): %_small.gif: %.eps
	@# Hack for pictures generated on MacOS (i.e. wrong CR/LF format)
	if [ "`grep -c -e ^ $*.eps`" = "1" ]; then \
		$(AWK_CMD) --source 'BEGIN{RS="\r";}{print $0;}' $*.eps | $(EPSTOPIC_CMD) --device=png256 --width_scale=400 --height_scale=400 --filter --outfile=$*_small.png ; \
	else \
		$(EPSTOPIC_CMD) --device=png256 --width_scale=400 --height_scale=400 $*.eps --outfile=$*_small.png ; \
	fi
	$(MOGRIFY_CMD) -format gif -antialias -geometry "50%x50%" $*_small.png

$(FROM_PNG_SMALLGIF): %_small.gif: %.png
	cp $*.png $*_small.png
	$(MOGRIFY_CMD) -format gif -geometry "200x200>" $*_small.png
	rm $*_small.png

$(FROM_GIF_SMALLGIF): %_small.gif: %.gif
	cp $*.gif $*_small.gif
	$(MOGRIFY_CMD) -format gif -geometry "200x200>" $*_small.gif

$(FROM_JPG_SMALLGIF): %_small.gif: %.jpg
	cp $*.jpg $*_small.jpg
	$(MOGRIFY_CMD) -format gif -geometry "200x200>" $*_small.jpg
	rm $*_small.jpg

$(FROM_TIF_SMALLGIF): %_small.gif: %.tif
	cp $*.tif $*_small.tif
	$(MOGRIFY_CMD) -format gif -geometry "200x200>" $*_small.tif
	rm $*_small.tif


$(FROM_FIG_JPG) $(FROM_EPS_JPG): %.jpg: %.eps
	@# Hack for pictures generated on MacOS (i.e. wrong CR/LF format)
	if [ "`grep -c -e ^ $*.eps`" = "1" ]; then \
		$(AWK_CMD) --source 'BEGIN{RS="\r";}{print $0;}' $*.eps | $(EPSTOPIC_CMD) --device=jpeg --width_scale=1600 --height_scale=1200 --filter --outfile=$*.jpg ; \
	else \
		$(EPSTOPIC_CMD) --device=jpeg --width_scale=1600 --height_scale=1200 $*.eps --outfile=$*.jpg ; \
	fi
	$(MOGRIFY_CMD) -format jpg -antialias -geometry "50%x50%" $*.jpg

$(FROM_PNG_JPG): %.jpg: %.png
	$(MOGRIFY_CMD) -format jpg $*.png

$(FROM_GIF_JPG): %.jpg: %.gif
	$(MOGRIFY_CMD) -format jpg $*.gif

$(FROM_TIF_JPG): %.jpg: %.tif
	$(MOGRIFY_CMD) -format jpg $*.tif



#=========================================================================================
#
# Cleaning and tmp dir targets
#
#=========================================================================================

tmpclean:
	rm -rf $(TMP_DIR)/*
	rm -f $(TMP_DIR)/.dummy

clean: tmpclean
	rm -rf $(ALL_TARGETS)

distclean: clean
	rm -rf $(TMP_DIR)
	rm -rf $(TMP_DIR_PICS)


#
# creates latex tmp directory and symlinks sources without pictures in it
#
tmpdir:
	@if [ ! -d "$(TMP_DIR)" ]; then mkdir $(TMP_DIR) ; fi
	@for THE_FILE in $(TEX_SRC) $(BIB_SRC); do \
	  ln -s "../$$THE_FILE" $(TMP_DIR)/ ; \
	done
	@for THE_FILE in `$(FIND_CMD) $(TMP_DIR_PICS) -maxdepth 1`; do \
	  ln -s "../$$THE_FILE" $(TMP_DIR)/ ; \
	done


#
# creates picture tmp directory and symlinks source pictures in it
#
tmpdir_pics:
	@if [ ! -d "$(TMP_DIR_PICS)" ]; then mkdir $(TMP_DIR_PICS) ; fi
	@for THE_FILE in .dummy $(ABB_SRC); do \
	  ln -sf "../$$THE_FILE" $(TMP_DIR_PICS)/ ;  \
	done
	



#=========================================================================================
#
# single run targets
#
#=========================================================================================


#
# single run of latex
#
%.single_latex:
	cd $(TMP_DIR) ; $(LATEX_CMD) $*.tex


#
# single run of pdftex
#
%.single_pdftex:
	cd $(TMP_DIR) ; $(PDFTEX_CMD) $*.tex


#
# single run of pdflatex
#  includes correction of LOFs, where no cites are allowed in PDF mode
#
%.single_pdflatex:
	cd $(TMP_DIR) ; $(PDFLATEX_CMD) $*.tex
	@if [ -f $(TMP_DIR)/$*.lof ]; then \
	  mv $(TMP_DIR)/$*.lof $(TMP_DIR)/$*.lof.tmp ; \
	  $(SED_CMD) -e "s/(.*\\cite.*)//" $(TMP_DIR)/$*.lof.tmp > $(TMP_DIR)/$*.lof ; \
	  rm -f $(TMP_DIR)/$*.lof.tmp ; \
	fi


#
# single run of bibtex
#
%.single_bibtex:
	#cd $(TMP_DIR) ; $(BIBTEX_CMD) $*
	true


#
# single run of tth
#
%.single_tth:
	@cd $(TMP_DIR) ; \
	 mv $*.aux $*.tmp ; \
	 $(AWK_CMD) --source '!/\catcode/{ print $0; }' $*.tmp > $*.aux ; \
	 rm -f $*.tmp
	cd $(TMP_DIR) ; $(TTH_CMD) -p$(TEXINPUTS) \
	                           $*.tex
	@cd $(TMP_DIR) ; \
	 mv $*.html $*.tmp ; \
	 $(AWK_CMD) --source '//{ print gensub( "^.*&nbsp;&nbsp;", "</a>", 1 $0); } !//{ print $0; }' $*.tmp > $*.html ; \
	 rm -f $*.tmp


#
# just for convenience
#
xdvi: $(WORK_NAME).dvi
	$(XDVI_CMD) $(WORK_NAME).dvi

