|
|
|
# eingebaute Variablen und Regeln werden nicht gebraucht
|
|
|
|
MAKEFLAGS += -rR
|
|
|
|
|
|
|
|
### Programme ###
|
|
|
|
# XSLT-Prozessor:
|
|
|
|
PROCESSOR=xsltproc
|
|
|
|
PFLAGS=--novalid --catalogs --stringparam baseurl $(BASEURL)
|
|
|
|
BASEURL=""
|
|
|
|
# XML-Validator
|
|
|
|
VALIDATOR=xmllint
|
|
|
|
VFLAGS=--noout --nonet
|
|
|
|
# VALIDATOR-Flags für Eingabe-XML (meist c3d2web)
|
|
|
|
VFLAGS_IN=$(VFLAGS) --schema xsd/c3d2web.xsd
|
|
|
|
# VALIDATOR-Flags für Ausgabe-XML (xhtml, rss, atom, ...)
|
|
|
|
VFLAGS_OUT=$(VFLAGS)
|
|
|
|
SGML_CATALOG_FILES=$(XML_CATALOG)
|
|
|
|
export SGML_CATALOG_FILES
|
|
|
|
# Downloadmanager (Alternativ: curl, fetch):
|
|
|
|
WGET=wget
|
|
|
|
# rsync
|
|
|
|
RSYNC=rsync
|
|
|
|
RSYNC_FLAGS=--verbose --recursive --delete --delete-after --delete-excluded --checksum --chmod=ugo=rX
|
|
|
|
# Editor
|
|
|
|
EDITOR?=vim
|
|
|
|
# Browser
|
|
|
|
BROWSER?=links
|
|
|
|
|
|
|
|
# Verzeichnis, in das exportiert werden soll
|
|
|
|
DESTDIR?=www-export
|
|
|
|
|
|
|
|
### Ressourcen ###
|
|
|
|
# XSLT-Stylesheets:
|
|
|
|
STYLE=xsl/html5.xsl
|
|
|
|
DS_STYLE=xsl/datenspuren/html5.xsl
|
|
|
|
# Document-Type-Definition:
|
|
|
|
DTD:=dtd/c3d2web.dtd
|
|
|
|
# XML-Katalog (Pfad zu den DTDs) - wird benötigt vom Validator
|
|
|
|
XML_CATALOG:=dtd/catalog.xml
|
|
|
|
# Navigationsleiste:
|
|
|
|
NAVIGATION=content/navigation.xml
|
|
|
|
# Chaosupdates:
|
|
|
|
WWW_CCC_DE_UPDATES=chaosupdates.xml
|
|
|
|
# Calendar summary::
|
|
|
|
CALENDAR_SUMMARY=calendar-summary.xml
|
|
|
|
# Datenspuren Fahrplan
|
|
|
|
DS_SCHEDULE=$(wildcard content/static/datenspuren/fahrplan/day/*.html)
|
|
|
|
|
|
|
|
### Ziele ###
|
|
|
|
# Mindestens 1x täglich neubauen wegen Chaosupdates & Kalender
|
|
|
|
DATESTAMP=build/.stamp-$(shell date +%Y-%m-%d)
|
|
|
|
|
|
|
|
# Dateinamen der zu erzeugenden html-Dateien:
|
|
|
|
CONTENT=$(PAGES) $(NEWS_PAGES) $(DS_PAGES) $(NEWSFILES) $(SEARCH_TMPL) build/calendar.html
|
|
|
|
|
|
|
|
# 'normale' Seiten:
|
|
|
|
PAGES:=$(patsubst content/pages/%.xml, build/%.html, $(wildcard content/pages/*.xml))
|
|
|
|
# Seiten zu einzelnen News-Items:
|
|
|
|
NEWS_PAGES:=$(patsubst content/news/%.xml, build/news/%.html, $(wildcard content/news/*.xml))
|
|
|
|
# News-Index und Feeds:
|
|
|
|
NEWSFILES:=build/news.html build/news-rss.xml build/news-atom.xml \
|
|
|
|
build/podcast.xml build/pentaradio.xml build/pentacast.xml build/pentamusic.xml \
|
|
|
|
build/ical.ics build/xcal.xml build/reminders build/datenspuren/news-rss.xml build/datenspuren/news-atom.xml
|
|
|
|
PLAYLISTS:=$(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.xspf, $(wildcard content/news/pentaradio*.xml)) \
|
|
|
|
$(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.pls, $(wildcard content/news/pentaradio*.xml)) \
|
|
|
|
$(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.m3u, $(wildcard content/news/pentaradio*.xml))
|
|
|
|
# Datenspuren-Seiten:
|
|
|
|
DS_PAGES:=$(patsubst content/datenspuren/%.xml, build/datenspuren/%.html, $(wildcard content/datenspuren/*.xml))
|
|
|
|
# Suchseiten-Template
|
|
|
|
SEARCH_TMPL:=build/cgi-bin/search.html
|
|
|
|
|
|
|
|
# Quellen
|
|
|
|
NEWSITEMS:=$(wildcard content/news/*.xml)
|
|
|
|
CLEAN=$(CONTENT) $(NEWSFILES) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DS_PAGES)
|
|
|
|
|
|
|
|
NOVALID:=false
|
|
|
|
|
|
|
|
define xml_process
|
|
|
|
$(VALIDATOR) $(VFLAGS_IN) $<
|
|
|
|
$(PROCESSOR) $(PFLAGS) -o $@ $(STYLE) $<
|
|
|
|
$(NOVALID) || $(VALIDATOR) $(VFLAGS_OUT) $@ || \
|
|
|
|
{ touch -m -t 197001010000 Makefile $@ ; exit 1 ; }
|
|
|
|
endef
|
|
|
|
|
|
|
|
### Defaults ###
|
|
|
|
|
|
|
|
.PHONY: www
|
|
|
|
www: $(XML_CATALOG) $(CONTENT)
|
|
|
|
$(RSYNC) $(RSYNC_FLAGS) --exclude=".stamp-*" content/static/ content/old-site/ build/ $@
|
|
|
|
|
|
|
|
.PHONY: export
|
|
|
|
export: www
|
|
|
|
$(RSYNC) $(RSYNC_FLAGS) --exclude=".svn/" www/ $(DESTDIR)/
|
|
|
|
|
|
|
|
$(DATESTAMP):
|
|
|
|
$(RM) $(wildcard build/.stamp-*)
|
|
|
|
touch $@
|
|
|
|
|
|
|
|
.PHONY: html5-validate
|
|
|
|
html5-validate: www
|
|
|
|
for file in `find $< -name *.html`; do \
|
|
|
|
curl -d @$file< -H "Content-Type: text/html; charset=UTF-8" 'http://validator.nu/?out=text&preset=http://s.validator.nu/xhtml5-aria-rdf-svg-mathml.rnc+http://s.validator.nu/html5/assertions.sch+http://c.validator.nu/all/' \
|
|
|
|
done
|
|
|
|
|
|
|
|
### Regeln für den XSLT-Prozess ###
|
|
|
|
|
|
|
|
build/%.html : NOVALID:=true
|
|
|
|
build/news.html: $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP)
|
|
|
|
build/news-rss.xml : STYLE=xsl/rss.xsl
|
|
|
|
build/news-rss.xml : NOVALID:=true
|
|
|
|
build/news-rss.xml : PFLAGS+=--stringparam prefix ""
|
|
|
|
build/news-rss.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/news-atom.xml : STYLE=xsl/atom.xsl
|
|
|
|
build/news-atom.xml : NOVALID:=true
|
|
|
|
build/news-atom.xml : PFLAGS+=--stringparam prefix ""
|
|
|
|
build/news-atom.xml : VFLAGS_OUT=$(VFLAGS) --relaxng xsd/atom.rng
|
|
|
|
build/podcast.xml : STYLE=xsl/podcast.xsl
|
|
|
|
build/podcast.xml : NOVALID:=true
|
|
|
|
build/podcast.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/podcast.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
|
|
|
|
build/pentaradio.xml : STYLE=xsl/podcast.xsl
|
|
|
|
build/pentaradio.xml : NOVALID:=true
|
|
|
|
build/pentaradio.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/pentaradio.xml : PFLAGS+=--stringparam selection pentaradio
|
|
|
|
build/pentaradio.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
|
|
|
|
build/pentacast.xml : STYLE=xsl/podcast.xsl
|
|
|
|
build/pentacast.xml : NOVALID:=true
|
|
|
|
build/pentacast.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/pentacast.xml : PFLAGS+=--stringparam selection pentacast
|
|
|
|
build/pentacast.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
|
|
|
|
build/pentamusic.xml : STYLE=xsl/podcast.xsl
|
|
|
|
build/pentamusic.xml : NOVALID:=true
|
|
|
|
build/pentamusic.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/pentamusic.xml : PFLAGS+=--stringparam selection pentamusic
|
|
|
|
build/pentamusic.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
|
|
|
|
|
|
|
|
#.INTERMEDIATE: news.xml
|
|
|
|
news.xml: $(NEWSITEMS)
|
|
|
|
sh scripts/gen_news.xml.sh $^ > $@
|
|
|
|
|
|
|
|
$(NEWSFILES): news.xml $(NAVIGATION) $(STYLE)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# Calendar
|
|
|
|
$(CALENDAR_SUMMARY) : STYLE=xsl/calendar-summary.xsl
|
|
|
|
$(CALENDAR_SUMMARY) : NOVALID:=true
|
|
|
|
$(CALENDAR_SUMMARY) : VFLAGS_IN=$(VFLAGS)
|
|
|
|
$(CALENDAR_SUMMARY): content/events.xml news.xml
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
build/calendar.html : VFLAGS_IN=$(VFLAGS)
|
|
|
|
build/calendar.html: $(CALENDAR_SUMMARY) $(STYLE) $(NAVIGATION) $(WWW_CCC_DE_UPDATES) $(DATESTAMP)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# XCal
|
|
|
|
build/xcal.xml : STYLE=xsl/xcal.xsl
|
|
|
|
build/xcal.xml : VFLAGS_IN=$(VFLAGS)
|
|
|
|
build/xcal.xml: $(CALENDAR_SUMMARY) $(STYLE)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# iCal
|
|
|
|
build/ical.ics : STYLE=xsl/ical.xsl
|
|
|
|
build/ical.ics : NOVALID:=true
|
|
|
|
build/ical.ics : VFLAGS_IN=$(VFLAGS)
|
|
|
|
build/ical.ics : VFLAGS_OUT=$(VFLAGS)
|
|
|
|
build/ical.ics: $(CALENDAR_SUMMARY) $(STYLE)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# Remind
|
|
|
|
build/reminders : STYLE=xsl/remind.xsl
|
|
|
|
build/reminders : NOVALID:=true
|
|
|
|
build/reminders : VFLAGS_IN=$(VFLAGS)
|
|
|
|
build/reminders : VFLAGS_OUT=$(VFLAGS)
|
|
|
|
build/reminders: $(CALENDAR_SUMMARY) $(STYLE)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# Playlists
|
|
|
|
build/%.xspf : VFLAGS_OUT=$(VFLAGS) --relaxng xsd/xspf-1_0.5.rng
|
|
|
|
build/%.m3u : NOVALID:=true
|
|
|
|
build/%.pls : NOVALID:=true
|
|
|
|
|
|
|
|
# Pages:
|
|
|
|
build/%.html: content/pages/%.xml $(STYLE) $(NAVIGATION) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP) news.xml
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# News:
|
|
|
|
build/news/%.html : BASEURL="../"
|
|
|
|
build/news/%.html: content/news/%.xml $(STYLE) $(NAVIGATION) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
# Suche:
|
|
|
|
build/cgi-bin/search.html : BASEURL="../"
|
|
|
|
build/cgi-bin/search.html: content/cgi-bin/search.xml $(STYLE) $(NAVIGATION) $(DATESTAMP)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
build/datenspuren/%html : STYLE=$(DS_STYLE)
|
|
|
|
build/datenspuren/%.html: content/datenspuren/%.xml $(DS_STYLE) news.xml $(DS_SCHEDULE)
|
|
|
|
$(call xml_process)
|
|
|
|
|
|
|
|
build/datenspuren/schedule.html : content/static/datenspuren/fahrplan/index.de.html
|
|
|
|
|
|
|
|
build/datenspuren/news-rss.xml : STYLE=xsl/rss.xsl
|
|
|
|
build/datenspuren/news-rss.xml : NOVALID:=true
|
|
|
|
build/datenspuren/news-rss.xml : PFLAGS+=--stringparam prefix ds09-
|
|
|
|
build/datenspuren/news-rss.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
|
|
|
|
build/datenspuren/news-atom.xml : STYLE=xsl/atom.xsl
|
|
|
|
build/datenspuren/news-atom.xml : NOVALID:=true
|
|
|
|
build/datenspuren/news-atom.xml : PFLAGS+=--stringparam prefix ds09-
|
|
|
|
build/datenspuren/news-atom.xml : VFLAGS_OUT=$(VFLAGS) --relaxng xsd/atom.rng
|
|
|
|
|
|
|
|
### Die neuesten Chaosupdates holen ###
|
|
|
|
$(WWW_CCC_DE_UPDATES).orig: $(DATESTAMP)
|
|
|
|
$(RM) $@
|
|
|
|
$(WGET) -O $@ http://www.ccc.de/en/rss/updates
|
|
|
|
|
|
|
|
$(WWW_CCC_DE_UPDATES): $(WWW_CCC_DE_UPDATES).orig
|
|
|
|
$(VALIDATOR) --recover $< > $@
|
|
|
|
|
|
|
|
### Mr. Propper ###
|
|
|
|
.PHONY: clean
|
|
|
|
clean:
|
|
|
|
$(RM) $(CLEAN) news.xml
|