jw-pkg/make/tex.mk
Jan Lindemann f2c3f8bf90 tex.mk: Fix document class options replacement
- Fix document class options replacement
  - Use -draftmode on first compilation runs

Signed-off-by: Jan Lindemann <jan@janware.com>
2016-06-16 15:13:59 +00:00

428 lines
13 KiB
Makefile

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
# -- project data
CUSTOMER ?= jannet
PROJECT ?= legal
TOPIC ?= $(notdir $(shell pwd))
VERSION ?= $(shell sed "s/-dev$$//" VERSION)
AUTHORS ?=
#TITLE ?= Allgemeine Bedingungen für
#SUBTITLE ?= Dienstgüte-Vereinbarungen
DATE ?= $(shell date +'%Y/%m/%d')
#CONFIDENTIAL_REMARK ?= Vertraulich
BEAMER_HANDOUT ?= false
BEAMER_ASPECTRATIO ?= 169
# -- files
MAIN ?= main
HEADER ?= header
FRONTPAGE ?= frontpage
OUTPUT ?= $(patsubst %-dev,%,$(TOPIC)-$(VERSION))
DISTDIR ?= dist
# -- dependencies
LOCAL_PREREQ ?= Makefile cfg.mk main.tex.tmpl \
$(wildcard *.tex)
# -- formatting
#DOCUMENT_CLASS ?= book
ifneq ($(MAKECMDGOALS),html)
DOCUMENT_CLASS ?= article
else
DOCUMENT_CLASS ?= article
endif
TEX_TMPL_BASE_DIR ?= $(MODDIR)/texdoc
TEX_TMPL_STYLE ?= de_technical
TEX_TMPL_DIR ?= $(TEX_TMPL_BASE_DIR)/$(TEX_TMPL_STYLE)
IMPORTED_TEMPLATES ?= $(shell ls $(TEX_TMPL_DIR)/*.tmpl)
WWW_IMAGEDIR ?= $(CVS_PROJ_DIR)/ytools/htdocs/images/logo-janware/
FRONTLOGO_PDF ?= logo-janware.pdf
FRONTLOGO_EPS ?= janware-frontpage-top-right.png
FRONTLOGO_WEB ?= janware-frontpage-top-right.png
ICON_UP ?= up.png
ICON_PREV ?= prev.png
ICON_NEXT ?= next.png
ICON_INDEX ?= index.png
ICON_CONTENTS ?= contents.png
# -- web publishing
HTMLDIR ?= $(TOPIC)
TARGET_HOST ?= cvs.jannet.de
TARGET_DIR ?= /home/wwwrun/dat/htdocs/jannet.de_443/upload/$(CUSTOMER)/projects/$(PROJECT)/doc/$(TOPIC)
TARGET_DIR_MODE ?= 755
TARGET_FILE_MODE ?= 644
TARGET_USER ?= root
UPLOAD_MODULE ?= doc/$(TOPIC)
UPLOAD_FILE_MODE ?= 644
UPLOAD_DIR_MODE ?= 755
include $(MODDIR)/make/tag-defs.mk
include $(MODDIR)/make/tag-rules.mk
ifeq ($(TEX_TMPL_DIR), "")
TEX_TMPL_DIR = thisisnotadirectory
endif
latex = latex
PDFLATEX ?= pdflatex
PDF_VIEWER ?= $(firstword $(shell which okular kpdf acroread))
CAT ?= cat
SED ?= sed
COMPILATION_RUN_NAMES ?= 1 2 3
# this is what is there already
PRE_FIG_LOCAL = $(wildcard *.fig)
PRE_TEX_LOCAL = $(wildcard *.tex)
PRE_TMPL_LOCAL = $(wildcard *.tmpl *.ger)
PRE_HTML_LOCAL = $(wildcard *.html)
PRE_FIG_REMOTE = $(foreach dir,$(TEX_TMPL_DIR),$(wildcard $(dir)/*.fig))
PRE_TEX_REMOTE = $(foreach dir,$(TEX_TMPL_DIR),$(wildcard $(dir)/*.tex))
PRE_TMPL_REMOTE = $(foreach dir,$(TEX_TMPL_DIR),$(wildcard $(dir)/*.tmpl $(dir)/*.ger))
PRE_HTML_REMOTE = $(foreach dir,$(TEX_TMPL_DIR),$(wildcard $(dir)/*.html))
# this is what should be there
FILES_FROM_TMPL = $(notdir $(patsubst %.ger,%.tex,$(patsubst %.tmpl,%,$(PRE_TMPL_REMOTE) $(PRE_TMPL_LOCAL))))
EPS_FROM_FIG = $(notdir $(patsubst %.fig,%.png,$(PRE_FIG_REMOTE) $(PRE_FIG_LOCAL)))
FILES_COPIED = $(notdir $(wildcard $(TEX_TMPL_DIR)/*.html $(TEX_TMPL_DIR)/*.tex))
GENERATED += $(FILES_FROM_TMPL) $(EPS_FROM_FIG) $(FILES_COPIED) $(FRONTLOGO_PDF)
GENERATED_TEX = $(filter %.tex,$(GENERATED))
GENERATED_EPS = $(filter %.png,$(GENERATED))
GENERATED_HTML = $(filter %.html,$(GENERATED))
CMD_PARSE_GRAPHICS = $(SED) '/includegraphics/ !d; s/[^{]*{\([^}]*\).*/\1/; /^\.\./ d; s/^.\///' *.tex *.tmpl | sort -u
CONTACT_EMAIL ?= contact@janware.com
ifeq ($(DIST_VERSION),)
DIST_VERSION = $(VERSION)
endif
# all
TEX = $(PRE_TEX_LOCAL) $(GENERATED_TEX)
EPS = $(GENERATED_EPS)
HTML = $(PRE_HTML_LOCAL) $(GENERATED_HTML)
LATEX_INPUT = $(TEX) $(EPS)
HTML_INPUT = $(HTML) $(IMAGES)
# this comes in handy
DATE_FORMAT ?= '%b, %d, %Y'
DATE := $(if $(DATE),$(shell date +$(DATE_FORMAT) --date $(DATE)),$(shell date +$(DATE_FORMAT)))
TEX_WARN_DONT_EDIT = "\
%+---------------------------------------------------+\n\
%| DO NOT EDIT THIS FILE! |\n\
%| It was automatically created during the build |\n\
%| process! |\n\
%+---------------------------------------------------+\n"
HTML_WARN_DONT_EDIT = "\
<!--\n\
+---------------------------------------------------+\n\
| DO NOT EDIT THIS FILE! |\n\
| It was automatically created during the build |\n\
| process! |\n\
+---------------------------------------------------+\n\
-->"
WD = `pwd`
IMAGES = $(patsubst %,$(IMAGEDIR)/%,$(FRONTLOGO_EPS) $(FRONTLOGO_WEB) $(FRONTLOGO_PDF) \
$(ICON_UP) $(ICON_PREV) $(ICON_NEXT) $(ICON_INDEX) $(ICON_CONTENTS)) \
#LOCAL_IMPORTED_TEMPLATES = $(notdir $(IMPORTED_TEMPLATES))
#FMT_OFFLINE = tex dvi ps pdf txt
FMT_OFFLINE = tex pdf # txt
FMT = $(FMT_OFFLINE) html
OUT = $(DISTDIR)/$(OUTPUT)
FMT_OUT = $(patsubst %,$(OUT).%.zip,$(FMT))
FMT_OFFLINE_OUT = $(patsubst %,$(OUT).%.zip,$(FMT_OFFLINE))
ALL = $(FMT_OUT) html_install
#PRE_HTML = $(patsubst %.tmpl,%,$(wildcard *.html.tmpl))
#LINETMPL=$(wildcard *.linetmpl)
#TEXFROMGER=$(patsubst %.ger,%.tex,$(wildcard *.ger))
#TMPL=$(wildcard *.tmpl)
#FILEFROMTMPL = $(patsubst %.tmpl,%,$(TMPL))
#GERFROMLINETMPL=$(patsubst %.linetmpl,%,$(wildcard *.linetmpl))
#PRE_TEX = $(patsubst %.ger,%.tex,\
# $(patsubst %.tmpl,%,$(wildcard *.tex.tmpl *.ger.tmpl) $(LOCAL_IMPORTED_TEMPLATES)) \
# $(GERFROMLINETMPL)) $(TEXFROMGER)
NEWDIRS = $(DISTDIR) $(HTMLDIR) $(DVIDIR)
ifeq ($(DOCUMENT_CLASS),)
DOCUMENT_CLASS = article
endif
ifeq ($(BEAMER_HANDOUT),true)
DOCUMENT_CLASS_OPTIONS += ,handout
endif
ifneq ($(BEAMER_ASPECTRATIO),)
DOCUMENT_CLASS_OPTIONS += ,aspectratio=$(BEAMER_ASPECTRATIO)
endif
define mangle_tmpl
@echo "+ generating $< -> $@"
@if [ $(suffix $@) = tex ]; then echo -e $(TEX_WARN_DONT_EDIT) > $@; fi
@if [ $(suffix $@) = html ]; then echo -e $(HTML_WARN_DONT_EDIT) > $@; fi
$(CAT) $< | $(SED) -e "\
s%__DATE__%$(DATE)%g; \
s%__AUTHORS__%$(AUTHORS)%g; \
s%__CONTACT_EMAIL__%$(CONTACT_EMAIL)%g; \
s%__TITLE__%$(TITLE)%g; \
s%__VERSION__%$(DIST_VERSION)%g; \
s%__CUSTOMER__%$(CUSTOMER)%g; \
s%__TOPIC__%$(TOPIC)%g; \
s%__SUBTITLE__%$(SUBTITLE)%g; \
s%__CONFIDENTIAL_REMARK__%$(CONFIDENTIAL_REMARK)%g; \
s%__HEADER__%$(HEADER)%g; \
s%__FRONTPAGE__%$(FRONTPAGE)%g; \
s%__FRONTLOGO_EPS__%$(IMAGEDIR)/$(FRONTLOGO_EPS)%g; \
s%__FRONTLOGO_PDF__%$(FRONTLOGO_PDF)%g; \
s%__FRONTLOGO_WEB__%$(FRONTLOGO_WEB)%g; \
s%__ICON_UP__%$(ICON_UP)%g; \
s%__ICON_INDEX__%$(ICON_INDEX)%g; \
s%__ICON_CONTENTS__%$(ICON_CONTENTS)%g; \
s%__ICON_PREV__%$(ICON_PREV)%g; \
s%__ICON_NEXT__%$(ICON_NEXT)%g; \
s%__DOCUMENT_CLASS__%$(DOCUMENT_CLASS)%g; \
s%__UPLOAD_MODULE_PATH__%$(UPLOAD_MODULE_PATH)%g; \
s%__UPLOAD_TEST_PREFIX__%$(UPLOAD_TEST_PREFIX)%g; \
s%__DOCUMENT_CLASS_OPTIONS__%$(DOCUMENT_CLASS_OPTIONS)%g; \
s%__ANIMATION_FRAMES__%$(BEAMER_ANIMATION_FRAMES)%g; \
s%ä%\\\\\"a%g; \
s%Ä%\\\\\"A%g; \
s%ö%\\\\\"o%g; \
s%Ö%\\\\\"O%g; \
s%ü%\\\\\"u%g; \
s%Ü%\\\\\"U%g; \
s%ß%\\\"s%g; \
s%\xc3\xa4%\\\\\"a%g; \
s%\xc3\x84%\\\\\"A%g; \
s%\xc3\xb6%\\\\\"o%g; \
s%\xc3\x96%\\\\\"O%g; \
s%\xc3\xbc%\\\\\"u%g; \
s%\xc3\x9c%\\\\\"U%g; \
s%\xc3\x9f%\\\"s%g; \
" | awk ' \
BEGIN { FS=":" } { \
if ($$0 ~ /SUBST_LINE_NUM/) { \
start=$$1; patt=$$2; file=$$3; \
regex=$$4; offset=$$5; rest=$$6; \
grepcmd="grep -n \042" regex "\042 " file; \
grepcmd | getline; \
linenum=$$1; \
print start linenum rest \
} else { print $$0 } } \
' >> $@.tmp
@mv $@.tmp $@
endef
first_target: dirs $(ALL)
tex: dirs $(OUT).tex.zip
dvi: dirs $(OUT).dvi.zip
ps: dirs $(OUT).ps.zip
txt: dirs $(OUT).txt.zip
html: dirs $(OUT).html.zip
pdf: dirs $(OUT).pdf.zip
odt: dirs $(OUT).odt
texsrc: $(GENERATED)
# generate from remote rules
%.png: $(TEX_TMPL_DIR)/%.fig
fig2dev -L png $< $@
%.html: $(TEX_TMPL_DIR)/%.html
cp $< $@
%.tex: $(TEX_TMPL_DIR)/%.tex
cp $< $@
%.tex: %.tex.tmpl
$(mangle_tmpl)
%.tex: $(TEX_TMPL_DIR)/%.tex.tmpl
$(mangle_tmpl)
%.html: $(TEX_TMPL_DIR)/%.html.tmpl
$(mangle_tmpl)
# generate from local rules
%.png: %.fig
fig2dev -L png $< $@
%.tex: %.ger
$(mangle_tmpl)
%: %.tmpl
$(mangle_tmpl)
$(FRONTLOGO_PDF): $(WWW_IMAGEDIR)/$(patsubst %.pdf,%.svg,$(FRONTLOGO_PDF))
inkscape -w 30mm --export-pdf=$@ $<
%.pdf: %.svg
inkscape --export-pdf=$@ $<
$(WWW_IMAGEDIR)/%.svg: %.svg
cp $< $@
$(CVS_IMAGEDIR)/%.svg: %.svg
cp $< $@
$(CVS_IMAGEDIR)/%.png: %.png
cp $< $@
cfgtest.done:
test -n "$(OUTPUT)" # OUTPUT
test -n "$(DISTDIR)" # DISTDIR
test -n "$(HTMLDIR)" # HTMLDIR
test -n "$(TARGET_HOST)" # TARGET_HOST
test -n "$(TARGET_DIR)" # TARGET_DIR
test -n "$(TARGET_DIR_MODE)" # TARGET_DIR_MODE
test -n "$(TARGET_FILE_MODE)" # TARGET_FILE_MODE
test -n "$(TARGET_USER)" # TARGET_USER
test -n "$(MAIN)" # MAIN
test -n "$(FRONTPAGE)" # FRONTPAGE
test -n "$(IMAGES)" # IMAGES
test -n "$(AUTHORS)" # AUTHORS
test -n "$(TITLE)" # TITLE
test -n "$(SUBTITLE)" # SUBTITLE
test -d $(WWW_IMAGEDIR) # IMAGEDIR
@for IMG in $(IMAGES); do if [ ! -f $$IMG ]; then echo "$$IMG is missing"; exit 1; fi; done
test -n "$(VERSION)" # VERSION
touch $@
test:
@echo TEX_TMPL_DIR = $(TEX_TMPL_DIR)
@echo GENERATED = $(GENERATED)
@echo FILES_FROM_TMPL = $(FILES_FROM_TMPL)
@echo EPS_FROM_FIG = $(EPS_FROM_FIG)
cfgtest: cfgtest.done
#%.clean:
# rm -rf $(OUT).%.zip
dirs.done:
mkdir -p $(NEWDIRS)
touch dirs.done
dirs: dirs.done
arch:
test $(shell uname -s) = Linux
xdvi: $(LATEX_INPUT)
@echo "-- running latex just once ..."
$(latex) $(MAIN).tex
xdvi $(MAIN).dvi
xpdf: $(LATEX_INPUT)
@echo "-- running latex just once ..."
$(PDFLATEX) $(MAIN).tex
$(PDF_VIEWER) $(MAIN).pdf
$(OUT).tex.zip: cfgtest $(LATEX_INPUT)
@echo "-- creating zipfile with tex source files"
zip $@ $(LATEX_INPUT) 2>/dev/null
#$(OUTPUT).dvi: $(LATEX_INPUT)
# @echo "-- creating dvi file"
# $(latex) $(MAIN).tex; $(latex) $(MAIN).tex; $(latex) $(MAIN).tex;
# cp $(MAIN).dvi $@
#$(OUT).dvi.zip: $(OUTPUT).dvi
# zip $@ $^
#$(OUTPUT).txt: $(OUTPUT).dvi
# @echo "-- creating plain ascii file"
# dvi2tty $< -w100 -o $@
#$(OUT).txt.zip: $(OUTPUT).txt
# zip $@ $<
TEX4HT_FIRST_LATEX_LINE = \
'\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"\#\#1"{\Link\#\#1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link\#1.a.b.c.{\g@addto@macro\@documentclasshook{\RequirePackage[\#1,html,3,sections+]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname tex4ht\endcsname{\#1,html,3}\def\HCode\#\#\#\#1{\documentstyle[tex4ht,3}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode .a.b.c.\input'
$(HTMLDIR): $(LATEX_INPUT) $(HTML_INPUT)
test $(MAIN) != index
rm -rf $@
mkdir -p $@
latex $(TEX4HT_FIRST_LATEX_LINE) $(MAIN)
latex $(TEX4HT_FIRST_LATEX_LINE) $(MAIN)
latex $(TEX4HT_FIRST_LATEX_LINE) $(MAIN)
tex4ht $(MAIN)
t4ht -d$(HTMLDIR) $(MAIN)
#$(CAT) index_head.html $(MAIN.html) index_tail.html > index.html
$(CAT) $(MAIN.html) > index.html
mv *.html *.css $(HTMLDIR)
mkdir -p $(addprefix $(HTMLDIR)/,$(sort $(dir $(shell $(CMD_PARSE_GRAPHICS)))))
for g in $(sort $(shell $(CMD_PARSE_GRAPHICS))); do cp $$g $(HTMLDIR)/$$g; done
#cp -p $(IMAGES) $(HTMLDIR)
touch $@
$(OUT).html.zip: $(HTMLDIR)
@echo "-- creating zipfile with html source files"
zip -r $@ $(HTMLDIR)
#$(OUTPUT).ps: $(OUTPUT).dvi
# @echo "-- creating postscript file"
# dvips -f $< > $(OUTPUT).ps
#$(OUT).ps.zip: $(OUTPUT).ps
# zip $@ $<
$(OUTPUT).pdf: $(GENERATED)
@echo "-- creating pdf file"
@for i in $(COMPILATION_RUN_NAMES) ; do \
if [ $$i != $(lastword $(COMPILATION_RUN_NAMES)) ]; then dm="-draftmode"; else dm=""; fi ;\
echo ================================================================== pass $$i: running $(PDFLATEX) $$dm $(MAIN).tex ;\
$(PDFLATEX) $$dm $(MAIN).tex || exit 1 ;\
done
@mv $(MAIN).pdf $(OUTPUT).pdf
$(OUT).pdf.zip: $(OUTPUT).pdf
zip $@ $<
$(OUTPUT).odt: $(GENERATED)
@echo "-- creating odt file"
mk4ht oolatex $(MAIN).tex
mv $(MAIN).odt $(OUTPUT).odt
html_install: $(HTMLDIR)
@echo "-- installing html to $(TARGET_HOST):$(TARGET_DIR) as user $(TARGET_USER)"
$(CVS_RSH) -l $(TARGET_USER) $(TARGET_HOST) -C "\
mkdir -p $(TARGET_DIR); chmod $(TARGET_DIR_MODE) $(TARGET_DIR)"
/usr/bin/rsync -az --delete -v --links -e $(CVS_RSH) $(HTMLDIR)/* $(TARGET_USER)@$(TARGET_HOST):$(TARGET_DIR)
$(CVS_RSH) -l $(TARGET_USER) $(TARGET_HOST) -C "\
cd $(TARGET_DIR); find . -type d | xargs chmod $(TARGET_DIR_MODE); find . -type f | xargs chmod $(TARGET_FILE_MODE)"
clean:
@echo "-- cleaning up ..."
rm -rf *.maf *.mtc *.mtc0 *.ptc1 \
*.aux *.toc *.dvi *.pdf *.ps *~ *.log *.done *.rep *.nav *.snm *.tdo \
*.4ct *.4tc *.4of *.4oo *.4os *.4og */*.4og *.css *.html *.idv *.lg *.xref *.odt \
*.lol *.bak *.idx *.ilg *.ind *.out *.brf .\#* \#* *.vrb \
$(NEWDIRS) $(OUTPUT).txt \
$(GENERATED) \
$(CLEAN)
priceclean: clean
for f in `grep -i euro *.tmpl | cut -d: -f1 | sort -u`; do \
grep -vi euro $$f > $$f.new ;\
mv $$f.new $$f ;\
done
view: pdf
$(PDF_VIEWER) $(OUTPUT).pdf
unzip:
unzip *.zip
%-handout:
BEAMER_HANDOUT=true make $*
UPLOAD_FILES = $(OUTPUT).pdf
include $(MODDIR)/make/upload.mk