# 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 ?= $(JWBDIR)/tmpl/tex 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 ?= $(PROJECTS_DIR)/jw-build/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.janware.com 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 $(JWBDIR)/make/tag-defs.mk include $(JWBDIR)/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 = "\ " WD = $(shell $(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 ifneq ($(BEAMER_HANDOUT),true) BEAMER_ANIMATION_FRAMES ?= 36 else BEAMER_ANIMATION_FRAMES ?= 1 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 $(JWBDIR)/make/upload.mk