# Makefile zum Erzeugen von html-Dateien ohne Sitemap-html-Dateien
# Mit !! versehene Definitionen bitte anpassen!

# Encoding der Dateien
encoding = UTF-8

# dir = Directory unterhalb von base (siehe unten), in das der Stamm der
# Dateihierarchie geschrieben werden soll. Normalerweise leer. Andere Werte
# nur sinnvoll zum Testen einer Hierarchie bevor diese an die richtige Stelle
# geschrieben wird.
# dir = franz/test4/
dir =

# !! subdir = Directory unterhalb von base, in das die generierten Dateien
# geschrieben werden sollen (ohne Erweiterung wie in base - siehe unten).
# Beginnt immer mit $(dir).
# subdir = $(dir)franz/
subdir = $(dir)

# !! prefix = Prefix, der vor generierte Dateinamen aus "sitemap" gestellt wird
# (vor allem im linken Menue). Sollte leer sein, wenn "sitemap" im selben
# Directory wie "Makefile" und gen-Dateien steht. Steht "sitemap" weiter
# aussen in der Hierarchie, sollte hier ein relativer Pfad stehen (mit
# absoluten URIs nicht getestet).
prefix = ../

# !! base = Basis des Dateisystems mit den Web-Seiten erweitert um $(subdir)
# und moeglicherweise weiteren Pfad. $(base)$(prefix) sollte jenen Teil von
# $(base) ergeben, der mit $(subdir) endet.
base = /usr/ftp/pub/$(subdir)lehre/

# !! me = Name in "sitemap", der als aktueller Name der generierten Datei im
# linken Menue aufscheint. Kann, aber muss nicht mit der Erweiterung von
# $(base) nach $(subdir) ident sein.
me = lehre/

# !! activeme = Flag, das besagt, ob aktueller Name im linken Menue ein Link
# (activeme = 1) oder ein einfacher (fetter) Text (activeme = 0) sein soll.
activeme = 0

# home = absolute URI des Directories mit den generierten Seiten.
# Sollte nicht geaendert werden.
home = http://www.complang.tuwien.ac.at/$(subdir)

# site = absolute URI der Basis der Webseiten. Hier werden allgemeine
# Resourcen wie css-Dateien gesucht. Sollte nicht geaendert werden.
site = http://www.complang.tuwien.ac.at/$(dir)

# !! gsign = Verantwortlicher fuer deutschsprachige Seiten. Verwendet in
# <ADDRESS> ... letzte Aenderung: <date> (<gsign>) ...
gsign = <A href=\"$(home)franz/\" title=\"Verantwortlich f&uuml;r letzte &Auml;nderung\">Puntigam</A>

# !! esign = wie gsign, aber fuer englischsprachige Seiten
esign = <A href=\"$(home)franz/english\" title=\"Responsible for Last Change\">Puntigam</A>

# date = Datum der letzten Aenderung. Format sollte nicht geaendert werden,
# damit bis auf Datum unveraenderte Seiten richtig als solche erkannt werden.
date = `date +%Y-%m-%d`

# map = Pfad und Name der Datei mit Sitemap-Informationen wie im linken Menue.
map = $(prefix)sitemap

# iflag = Flag fuer "install". Kann "-n" enthalten, wenn geaenderte Seiten
# nicht tatsaechlich an die richtige Stelle kopiert werden sondern nur
# entsprechende Informationen ausgegeben werden sollen. Aenderung im
# Makefile wenig sinnvoll. Verwendung: "make install iflag=-n". Auch
# sinnvoll: "make install iflag=-f" (forced installation).
iflag =

# !! subsys = Liste von Namen von Directories, die gen-Dateien fuer zu
# generierende Seiten und Makefiles enthalten. Make wird rekursiv in diesen
# Directories aufgerufen.
subsys =

# subinst = Liste von Directories, in denen die in $(subsys) erzeugten Dateien
# installiert werden sollen. Sollte nicht geaendert werden.
subinst = $(subsys:%=$(base)%)

# gens = Liste der gen-Dateien aus denen html-Dateien erzeugt werden sollen.
# Braucht nicht geaendert werden.
gens = $(wildcard *.gen)

# locals = Liste der aus gen-Dateien erzeugten noch nicht installierten
# html-Dateien. Sollte nicht geaendert werden.
locals = $(gens:%.gen=%.html)

# installed = Liste der zu installierenden html-Dateien.
#Sollte nicht geaendert werden.
installed = $(locals:%=$(base)%)

# genpage = awk-Script zum Erzeugen einer html-Datei aus "sitemap" und einer
# gen-Datei.
genpage = /usr/ftp/pub/franz/genhtml/genpage.awk

# stdflags = Flags fuer den Aufruf von awk mit $(genindex) bzw. $(genpage)
# (vor der ersten zu verarbeitenden Datei)
stdflags = -v date=$(date) -v "gsign=$(gsign)" -v "esign=$(esign)" -v "prefix=$(prefix)"

# stdfiles = Dateien (und "hintere" Flags) zur Bearbeitung mittels $(genindex)
# bzw. $(genpage) durch awk
stdfiles = "home=$(home)" "site=$(site)" $(map)

# awk = Aufruf von awk mit $(stdflags)
awk = gawk $(stdflags)

# inst = Aufruf eines Scripts zum Installieren einer erzeugten html-Datei
inst = /usr/ftp/pub/franz/genhtml/install $(iflag) $(base)

# "make [all]" generiert alle html-Dateien, aber ohne automatische Installation
.PHONY: all
all: $(locals) $(subsys)

# "make install" generiert und installiert alle html-Dateien 
.PHONY: install
install: $(installed) $(subinst)

# "make clean" loescht lokal generierte html-Dateien, aber keine installierten
.PHONY: clean
clean:
	rm $(locals)
	for i in $(subsys); do $(MAKE) -C $$i clean; done

# Erzeugung einer html-Datei aus gen-Datei
%.html: %.gen $(map) $(genpage)
	@echo generating: $@
	@$(awk) -v "encoding=$(encoding)" -v "me=$(me)" -f $(genpage) "activeme=$(activeme)" $(stdfiles) $< >$@

genrss = $(genhtmlbase)/genrss.awk

# Erzeugung einer rss-Datei aus gen-Datei
%.xml: %.gen $(map) $(genrss)
	@echo generating: $@
	@$(awk) -v "encoding=$(encoding)" -v "me=$*" -f $(genrss) $(stdfiles) $< >$@

# Installation einer html-Datei
$(base)%.html: %.html
	@$(inst) $<

# rekursiver Aufruf von "make install" fuer Untersysteme
.PHONY: $(subinst)
$(subinst):
	$(MAKE) -C $(patsubst $(base)%,%,$@) "iflag=$(iflag)" install

# rekursiver Aufruf von "make" fuer Untersysteme
.PHONY: $(subsys)
$(subsys):
	$(MAKE) -C $@
