# Makefile zur Erzeugung eines LaTeX-Dokuments
# (weitere Informationen siehe Target "help")

#
# Variablen/Makros definieren
#

# Dateinamen und Verzeichnisse
MAIN = main
BIBS_DIR = bibs
CHAPTERS_DIR = chapters
IMAGES_DIR = images
LISTINGS_DIR = listings
HTML_DIR = html
TMP_DIR = /tmp
NONPDFLATEX_POSTFIX = -nolinks

# verwendete Befehle und Parameter
ECHO = /bin/echo
CAT = /bin/cat
RM = /bin/rm --verbose
RM_RECURSIVE = $(RM) --recursive --force
MV = /bin/mv --verbose
TAR_CREATE = /bin/tar --verify --dereference --hard-dereference --check-links --exclude='.' --exclude='..' --exclude='archiv' --exclude='material' --exclude-vcs -cvf
GZIP_CREATE = /bin/gzip -9
LATEX = /usr/bin/latex -output-format=dvi
PDFLATEX = /usr/bin/pdflatex -shell-escape
LATEX2HTML = /usr/bin/latex2html
LATEX2RTF = /usr/bin/latex2rtf
BIBTEX = /usr/bin/bibtex
MAKEINDEX = /usr/bin/makeindex
DVIPS = /usr/bin/dvips
PS2PDF = /usr/bin/ps2pdf
PDFTIME = ./pdftime.sh
THUMBPDF_LATEX = /usr/bin/thumbpdf --modes dvips
THUMBPDF_PDFLATEX = /usr/bin/thumbpdf --modes pdftex
PDFBOOKMARKRESET = ./pdfbookmarkreset.sh
ASPELL = /usr/bin/aspell -t -x -c
PSSELECT = /usr/bin/psselect

# aktuelles Datum/aktuelle Uhrzeit fuer Dateinamen (z.B. bei der Archiverstellung)
DATE := date +"%Y-%m-%d_%H%M"
START_DATE := $(shell $(DATE))
CURRENT_DATE := `$(DATE)`

#
# (Pseudo-)Targets des Makefiles definieren
#

# Ausgabe des Hilfetextes
help:
	@$(ECHO) "Makefile zur Erzeugung eines LaTeX-Dokuments"
	@$(ECHO) "Version: 2011-04-04"
	@$(ECHO) "Autor: Wolfgang Runte (woru@informatik.uni-osnabrueck.de)"
	@$(ECHO) ""
	@$(ECHO) "Beispiele fuer den Aufruf des Makefiles:"
	@$(ECHO) "1. make dvi       Projekt komplett aktualisieren und DVI-Datei erzeugen"
	@$(ECHO) "2. make ps        Postscript-Datei aus der DVI-Datei erzeugen"
	@$(ECHO) "3. make prepdf    Vorstufe zum Erzeugen eines vollst. PDF durch LaTeX"
	@$(ECHO) "4. make pdf       vollst. PDF mit LaTeX erzeugen (inkl. thumbpdf)"
	@$(ECHO) "5. make pdflatex  vollst. PDF mit pdfLaTeX erzeugen (inkl. thumbpdf)"
	@$(ECHO) "6. make html      HTML-Fassung mittels LaTeX2HTML erzeugen"
	@$(ECHO) "7. make rtf       RTF-Datei aus dem LaTeX-Dokument erzeugen"
	@$(ECHO) "8. make clean     temporaer erzeugte Dateien loeschen"
	@$(ECHO) "9. make cleanall  Loeschen der temporaeren Dateien und der DVI-, PS- und"
	@$(ECHO) "                  PDF-Dateien sowie des Ordners fuer die HTML-Fassung"
	@$(ECHO) "10 make all       erzeugt alle relevanten Ausgabeformate und raeumt auf"
	@$(ECHO) "11. make spell    wendet aspell auf allen .tex-Dateien an, ausser auf der"
	@$(ECHO) "                  zentralen .tex-Datei, da dort hauptsaechlich LaTeX-Befehle"
	@$(ECHO) "                  enthalten sind und aspell nur viele Falschwarnungen produziert"
	@$(ECHO) "12. make backup   Aufraeumen und ein .tar.gz erstellen (Backup)"
	@$(ECHO) "13. make select   PDF-Datei der Seiten von-bis erstellen, Aufruf z.B. durch:"
	@$(ECHO) "                  make select S=10 E=20"

# Projekt komplett aktualisieren und DVI-Datei erzeugen
# (weil sich einige Index-Marken im Dokument hinter dem
# Index-Verzeichnis befinden, muss makeindex wiederholt
# aufgerufen werden werden)
dvi:
	$(RM) -f $(MAIN).out
	$(MAKE) tex
	$(MAKE) biblio
	$(MAKE) index
#	$(MAKE) glossar
	$(MAKE) tex
	$(MAKE) biblio  # (falls Verweise ausschl. im Lit.-verz. selbst)
	$(MAKE) tex
	$(MAKE) tex
	$(MAKE) index
	$(MAKE) pdfbookmarkreset
	$(MAKE) tex

# ein LaTeX-Lauf
tex:
	$(LATEX) $(MAIN)

# Literaturliste erstellen
biblio:
	$(BIBTEX) $(MAIN)

# Index/Stichwortverzeichnis erstellen
index:
#	$(MAKEINDEX) -l -c $(MAIN)
	$(MAKEINDEX) -l -c -g -s index.ist $(MAIN)

# Glossar erstellen
glossar:
	$(MAKEINDEX) index.glo -s nomencl.ist -o index.gls

# PS-Datei aus der DVI-Datei erzeugen
# (wird das Package \usepackage{times} verwendet, darf
# der Schalter -Ppdf bei dvips nicht verwendet werden,
# sonst werden einige Ligaturen falsch dargestellt)
ps:
#	$(DVIPS) -f -o $(MAIN).ps  $(MAIN).dvi
	$(DVIPS) -Ppdf -f -o $(MAIN).ps $(MAIN).dvi
	$(PDFTIME) $(MAIN).ps

# Vorstufe zum Erzeugen eines PDF durch LaTeX
prepdf:
	$(MAKE) dvi
	$(MAKE) ps
	$(PS2PDF) $(MAIN).ps $(MAIN).pdf

# PDF mit LaTeX erzeugen
pdf:
	$(MAKE) prepdf
	$(THUMBPDF_LATEX) $(MAIN)
	$(MAKE) tex
	$(MAKE) ps
	$(PS2PDF) $(MAIN).ps $(MAIN).pdf
	$(MV) $(MAIN).pdf $(MAIN)$(NONPDFLATEX_POSTFIX).pdf

# PDF mit pdfLaTeX erzeugen
# (weil sich einige Index-Marken im Dokument hinter dem
# Index-Verzeichnis befinden, muss makeindex wiederholt
# aufgerufen werden werden)
pdflatex:
	$(RM) -f $(MAIN).out
	$(PDFLATEX) $(MAIN)
	$(MAKE) biblio
	$(MAKE) index
#	$(MAKE) glossar
	$(PDFLATEX) $(MAIN)
	$(MAKE) biblio  # (falls Verweise ausschl. im Lit.-verz. selbst)
	$(PDFLATEX) $(MAIN)
	$(PDFLATEX) $(MAIN)
	$(MAKE) index
	$(MAKE) pdfbookmarkreset
	$(PDFLATEX) $(MAIN)
	$(THUMBPDF_PDFLATEX) $(MAIN)
	$(PDFLATEX) $(MAIN)

# Korrigieren der PDF-Links, die sich _hinter_ dem Anhang
# eines mit LaTeX erzeugten PDF-Dokuments befinden (relevant,
# wenn ein Dokument mit \part unterteilt wird).
pdfbookmarkreset:
	$(PDFBOOKMARKRESET) $(MAIN) Literaturverzeichnis
	$(PDFBOOKMARKRESET) $(MAIN) Abk\\\\374rzungsverzeichnis
	$(PDFBOOKMARKRESET) $(MAIN) Stichwortverzeichnis

# HTML-Fassung mittels LaTeX2HTML erzeugen
# siehe auch: .latex2html-init(!)
html:
	$(LATEX2HTML) -html_version 3.2,unicode -image_type png -accent_images png -dir $(HTML_DIR) -mkdir -up_url ".." -up_title "Zur &Uuml;bersicht" -local_icons -show_section_numbers -antialias -antialias_text -white -transparent -bottom_navigation -nofootnode -noaddress $(MAIN).tex
#-debug 2&> latex2html.log
#-html_version 3.2,4.0,latin1,unicode,math,frame,table
#-ldump (images.tex, speedup)
#-split +1
#-reuse 0 (Abb.)
#-numbered_footnotes
#-noinfo
#-font_size 10
#-address $(USER)@tzi.org
	$(RM) $(HTML_DIR)/*.pl
	$(RM) $(HTML_DIR)/images.*
	$(RM) -rf $(HTML_DIR)/TMP
#	$(RM) $(HTML_DIR)/WARNINGS
#	$(CAT) $(HTML_DIR)/index.html | sed -e "s/woru@informatik.uni-bremen.de/woru-AT-informatik.uni-bremen.de/" > $(HTML_DIR)/tmp
#	$(MV) $(HTML_DIR)/tmp $(HTML_DIR)/index.html
#falls manche Formeln unten einen schwarzen Balken aufweisen -> Eliminating Black Rules Under Equation Images: edit /usr/share/latex2html/l2hconf.pm (symbolic link to /etc/latex2html.conf) and change $DVIPSOPT = ' -Ppdf -E'; to $DVIPSOPT = ' -E'; and the next latex2html will not produce those lines.
#vgl. http://www.latex-community.org/forum/viewtopic.php?p=6123#p6123
#alternativ ausprobieren: Image-Typ von .png auf .gif wechseln

# RTF-Datei aus dem LaTeX-Dokument erzeugen
rtf:
	$(MAKE) dvi
	$(LATEX2RTF) $(MAIN)

# temporaer erzeugte Dateien loeschen
clean:
	@# temporaere Dateien loeschen (je nach Bedarf ergaenzen bzw. anpassen)
	$(RM) -f *.aux $(CHAPTERS_DIR)/*.aux *.toc *.lof *.lot *.log *.bbl *.brf *.blg *.idx *.ilg *.ind *.out *.tpm *.tpt *.flc *.bak *.tmp semantic.cache
	$(RM) -f *~ $(BIBS_DIR)/*~ $(CHAPTERS_DIR)/*~ $(IMAGES_DIR)/*~ $(LISTINGS_DIR)/*~
	$(RM) -f $(IMAGES_DIR)/*.bak $(IMAGES_DIR)/*.pdf $(IMAGES_DIR)/*.autosave

# Loeschen der temporaeren Dateien und der DVI-, PS- und
# PDF-Dateien sowie des Ordners fuer die HTML-Fassung
cleanall: clean
	@# erzeugte Dokumente/Verzeichnisse loeschen (je nach Bedarf ein- oder auskommentieren)
	$(RM) -f $(MAIN).dvi \
	         $(MAIN).ps \
	         $(MAIN).pdf \
	         $(MAIN)$(NONPDFLATEX_POSTFIX).pdf \
	         $(MAIN).rtf
	$(RM_RECURSIVE) $(HTML_DIR)

# erzeugt alle relevanten Ausgabeformate und raeumt auf
all:
	$(MAKE) cleanall
	$(MAKE) pdf
	$(MAKE) pdflatex
	$(MAKE) html
	$(MAKE) clean

# wendet aspell auf allen .tex-Dateien an, ausser auf der zentralen
# .tex-Datei, da dort hauptsaechlich LaTeX-Befehle enthalten sind und
# aspell nur viele Falschwarnungen produziert
spell:
	@liste=`ls *.tex`; \
	for tex in $$liste;  \
	do  \
		if [ $$tex != "$(MAIN).tex" ]; then  \
			@$(ECHO) "aspell -t -x -c $$tex" ;  \
			$(ASPELL) $$tex ; \
		fi ; \
	done
#--tex-command=vref,fullref,newref,citep,citet,citetext,citealp,htmlimage

# Aufraeumen und ein .tar.gz erstellen (Backup)
backup: clean
	@echo "Creating archive..."
	$(TAR_CREATE) $(TMP_DIR)/$(MAIN)_$(START_DATE).tar .* *
	$(GZIP_CREATE) $(TMP_DIR)/$(MAIN)_$(START_DATE).tar
	$(MV) $(TMP_DIR)/$(MAIN)_$(START_DATE).tar.gz ./$(MAIN)_$(START_DATE).tar.gz
	@echo "Archive ready."

# PDF-Datei der Seiten von-bis erstellen, Aufruf z.B. durch:
# make select S=10 E=20
select:
	$(MAKE) dvi
#	$(MAKE) ps
#	$(PSSELECT) -p$(PAGES) $(MAIN).ps $(MAIN)_Seite_$(PAGES).ps
	$(DVIPS) -Ppdf -f -p$(S) -l$(E) < $(MAIN).dvi > $(MAIN)_$(START_DATE)_Seite_$(S)-$(E).ps
	$(PS2PDF) $(MAIN)_$(START_DATE)_Seite_$(S)-$(E).ps $(MAIN)_$(START_DATE)_Seite_$(S)-$(E).pdf

