DIAS:= \
	chat-bind.dia \
	chat-search.dia \
	chat-search-pipeline.dia \
	chat-unbind.dia \
	ldapfilter-as-tree.dia \
	ldap-is-a-tree.dia

DIAPNG:=$(DIAS:%.dia=%.dia.png)

DOCBOOK:=ldap-intro.xml
SLIDES:=addressbook-slides.xml

GENERATED:=\
	$(DOCBOOK:%.xml=%.html) \
	$(SLIDES:%.xml=%/index.html) \
	$(DIAPNG)

XMLIFY:=sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g'

all:: $(GENERATED)

install: api $(GENERATED)
	@[ -n '$(DESTDIR)' ] || { echo 'Please provide variable DESTDIR pointing to desired location of documents.' 1>&2; exit 1; }
	install -d -m0755 '$(DESTDIR)'
	cp -ar api addressbook-slides '$(DESTDIR)/'
	install -d -m0755 '$(DESTDIR)/ldap-intro'
	install -m0644 ldap-intro.html '$(DESTDIR)/ldap-intro/index.html'
	install -m0644 $(DIAPNG) '$(DESTDIR)/ldap-intro'
	find examples -name SCCS -prune -o -type f -exec \
		install -D -m0644 '{}' '$(DESTDIR)/{}' \;

install-%:
	@[ -n '$(DESTDIR)' ] || { echo 'Please provide variable DESTDIR pointing to desired location of documents.' 1>&2; exit 1; }
	install -d -m0755 '$(DESTDIR)'
	set -e; if [ -d 'examples.$*' ]; then \
		find 'examples.$*' -name SCCS -prune -o -type f -printf '%P\0' \
		| xargs -0 --replace -- \
			install -D -m0644 'examples.$*/{}' '$(DESTDIR)/examples/{}' ;\
	fi

clean:
	rm -f $(GENERATED)

rsync: $(GENERATED)
	rsync -a $(DOCBOOK:%.xml=%.html) $(SLIDES:%.xml=%) $(DIAPNG) pyramid.twistedmatrix.com:public_html/ldap-intro/
	rsync -a --exclude '*.pyc' --exclude SCCS --exclude '*~' examples/addressbook/{[0-9]*,README.txt,server}  pyramid.twistedmatrix.com:public_html/ldap-intro/addressbook/

$(DOCBOOK:%.xml=%.html): %.html: %.xml
	xsltproc  --nonet \
		/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/xhtml/docbook.xsl \
		$< \
		>$@.tmp
	mv $@.tmp $@

addressbook-ldif/%.xml: examples/addressbook/server/%.ldif
	install -d -m0755 '$(@D)'
	$(XMLIFY) <$< >$@.tmp
	mv $@.tmp $@

addressbook-session/session-%.xml: examples/addressbook/01_repl/session-%
	install -d -m0755 '$(@D)'
	$(XMLIFY) <$< >$@.tmp
	mv $@.tmp $@

addressbook-slides/addressbookpy-02_script.html: \
	examples/addressbook/02_script/addressbook.py tags.j2h
	install -d -m0755 '$(@D)'
	( echo '<font size="+1">' && source-highlight --out-format=xhtml --src-lang=python && echo '</font>' ) <$< >$@.tmp
	mv $@.tmp $@

addressbook-slides/index.html: \
	ldapentry-vs-oo.xml search-inputs.xml

ldap-intro.html: \
	ldapentry-vs-oo.xml search-inputs.xml

$(SLIDES:%.xml=%/index.html): %/index.html: %.xml \
	slides-driver.xsl \
	Makefile $(DIAPNG) \
	addressbook-ldif/doe.xml \
	addressbook-ldif/smith.xml \
	addressbook-session/session-01.xml \
	addressbook-session/session-02.xml \
	addressbook-session/session-03.xml \
	addressbook-session/session-04.xml \
	addressbook-session/session-05.xml \
	addressbook-session/session-06.xml \
	addressbook-session/session-07.xml \
	addressbook-session/session-08.xml \
	addressbook-session/session-09.xml \
	slide-style.css \
	addressbook-slides/addressbookpy-02_script.html
	install -d -m0755 '$(@D)'
	cp -ar /usr/share/sgml/docbook/custom/slides/3.2.0/graphics '$(@D)'
	cp -ar /usr/share/sgml/docbook/custom/slides/3.2.0/browser '$(@D)'
	patch '$(@D)/browser/overlay.js' <overlay.js.patch
	cp $(DIAPNG) '$(@D)'
	cp slide-style.css '$(@D)'
	# TODO --nonet
	cd '$(@D)' && xsltproc \
		--stringparam keyboard.nav 1 \
		--stringparam overlay 1 \
		--stringparam output.indent yes \
		--stringparam graphics.dir graphics \
		--stringparam script.dir browser \
		../slides-driver.xsl \
		'$(addprefix ../,$<)'
	perl -pi -e '\
		s{<a href="(.*?)" target="_top">Click me!</a>}{<iframe width=900 height=600 src="$$1" />}g; \
		s{(Please examine the differences between (.*?) and (.*?)\.)}{<object type="text/plain" data="/diff/$$2/$$3">$$1</object>}g; \
		s{class="speaker-instructions"}{class="speaker-instructions-done"}; \
		' \
		'$(@D)'/foil*.html

%.dia.png: %.dia
	dia --export-to-format=png --export=$@.tmp $<
	mv $@.tmp $@

api:
	epydoc \
	        -o api \
		-n Ldaptor \
	        -u http://tv.debian.net/software/ldaptor/ \
		$$(find ../ldaptor \( -name SCCS -prune \) -o -name '*.py' -print)

.PHONY: api
