# Makefile for generating the HTML documentation

# List of languages to be processed (new langs added here - space between)
SUBDIRS = en pt ru

# Generated chunked HTML files go here.
HTML_CHUNKED = HTML

# Generated single HTML files go here.
HTML_SINGLE = HTML-single

# Zipfiles go here
ZIP = zip

# Generated PDF files go here
PDF = pdf

# The CSS stylesheet will be used for all the HTML outputs
HTML_STYLESHEET ?= stylesheets/default.css

# The 'profiling' XSL stylesheet which masks all but the desired language.
PROFILING_XSL = stylesheets/profile.xsl

# The stylesheet which puts all the content together in one big html file.
HTML_SINGLE_XSL := stylesheets/html-single.xsl
XSL_DEPS := $(HTML_SINGLE_XSL) stylesheets/html-common.xsl

# The stylesheet which breaks up the html into section chunks
HTML_CHUNK_XSL := stylesheets/html-chunk.xsl
CHUNK_XSL_DEPS := $(HTML_CHUNK_XSL) stylesheets/html-common.xsl

# Temporary intermediate xml files go here
TEMP_DIR = temp

.PHONY: all
all: html-chunked html-single

.PHONY: help
help:
	@echo "Targets:"
	@echo "********"
	@echo "all                   : Build everything (default)."
	@echo "html-single           : Build HTML documentation (single file)."
	@echo "html-single-LANG      : As above, but only one language."
	@echo "html-chunked          : Build HTML documentation (multiple files)."
	@echo "html-chunked-LANG     : As above, but only one language."
	@echo "zip-html-single       : Put HTML documentation into zip files."
	@echo "zip-html-single-LANG  : As above, but only one language."
	@echo "zip-html-chunked      : Put HTML documentation into zip files."
	@echo "zip-html-chunked-LANG : As above, but only one language."
	@echo "xmllint               : Check syntax of all xml files."
	@echo "clean-html-single     : Purge the 'HTML-single' directory."
	@echo "clean-html-chunked    : Purge the 'HTML' directory."
	@echo "clean                 : Remove all generated files."
	@echo "web                   : Make everything needed to update the website."
	@echo "Substitute LANG for one of $(SUBDIRS)"

.PHONY: html-chunked chunked-dir chunked-dir-$(1)
html-chunked: xsltproc.sh xmllint.sh chunked-dir $(addprefix html-chunked-,$(SUBDIRS))
chunked-dir:
	test -d $(HTML_CHUNKED) || mkdir $(HTML_CHUNKED)

temp-dir:
	test -d $(TEMP_DIR) || mkdir $(TEMP_DIR)

.PHONY: html-single single-dir
html-single: xsltproc.sh xmllint.sh single-dir $(addprefix html-single-,$(SUBDIRS))

web: html-single html-chunked $(addprefix zip-html-single-,$(SUBDIRS)) \
  $(addprefix zip-html-chunked-,$(SUBDIRS))

single-dir:
	test -d $(HTML_SINGLE) || mkdir $(HTML_SINGLE)

zip-dir:
	test -d $(ZIP) || mkdir $(ZIP)

pdf-dir:
	test -d $(PDF) || mkdir $(PDF)

.PHONY: xmllint
xmllint: xmllint.sh

.PHONY: clean-temp clean-html-chunked clean-html-single clean-zip
clean-temp:
	-rm -rf $(TEMP_DIR)

clean-html-chunked:
	-rm -rf $(HTML_CHUNKED)

clean-html-single:
	-rm -rf $(HTML_SINGLE)

clean-zip:
	-rm -rf $(ZIP)

.PHONY: releaseclean distclean clean
releaseclean: clean-temp $(addprefix releaseclean-,$(SUBDIRS))
	-rm -f html-chunk.xsl html-single.xsl xsltproc.sh xmllint.sh

distclean: clean releaseclean

xsltproc.sh xmllint.sh:
	sh configure

clean: clean-temp clean-html-chunked clean-html-single clean-zip

.PHONY: images-single images-chunked
images-single: single-dir
	test -d $(HTML_SINGLE)/images || mkdir $(HTML_SINGLE)/images
	cp images/*.png $(HTML_SINGLE)/images/

images-chunked: chunked-dir
	test -d $(HTML_CHUNKED)/images || mkdir $(HTML_CHUNKED)/images
	cp images/*.png $(HTML_CHUNKED)/images/

define lang-def
.PHONY: html-chunked-$(1) html-single-$(1) xmllint-$(1) \
  distclean-$(1) releaseclean-$(1) clean-$(1) single-dir-$(1) chunked-dir-$(1)

chunked-dir-$(1): chunked-dir
	test -d $(HTML_CHUNKED)/$(1) || mkdir $(HTML_CHUNKED)/$(1)

single-dir-$(1): single-dir
	test -d $(HTML_SINGLE)/$(1) || mkdir $(HTML_SINGLE)/$(1)

pdf-dir-$(1): pdf-dir
	test -d $(PDF)/$(1) || mkdir $(PDF)/$(1)

$(TEMP_DIR)/sms-$(1).xml: temp-dir xmllint.sh
	@echo validating xml source file...
	./xmllint.sh src/SMS.xml
	@echo profiling for language '$(1)'...
	./xsltproc.sh $(TEMP_DIR)/sms-$(1).xml $(PROFILING_XSL) src/SMS.xml $(1)
	@echo validating xml intermediate file...
	./xmllint.sh $(TEMP_DIR)/sms-$(1).xml

html-chunked-$(1): $(XSL_DEPS) xsltproc.sh xmllint.sh chunked-dir \
    chunked-dir-$(1) images-chunked $(TEMP_DIR)/sms-$(1).xml
	-rm -f $(HTML_CHUNKED)/$(1)/*
	@echo creating chunked html output...
	cp -f $(HTML_STYLESHEET) $(HTML_CHUNKED)/$(1)/
	./xsltproc.sh $(HTML_CHUNKED)/$(1)/ $(HTML_CHUNK_XSL) $(TEMP_DIR)/sms-$(1).xml $(1)

html-single-$(1): $(XSL_DEPS) xsltproc.sh xmllint.sh single-dir \
    single-dir-$(1) images-single $(TEMP_DIR)/sms-$(1).xml
	-rm -f $(HTML_SINGLE)/$(1)/SMS.html
	cp -f $(HTML_STYLESHEET) $(HTML_SINGLE)/$(1)
	@echo creating single html output...
	./xsltproc.sh $(HTML_SINGLE)/$(1)/SMS.html $(HTML_SINGLE_XSL) $(TEMP_DIR)/sms-$(1).xml $(1)

pdf-$(1): $(XSL_DEPS) xsltproc.sh xmllint.sh pdf-dir \
    pdf-dir-$(1) $(TEMP_DIR)/sms-$(1).xml
	@echo pdf is not yet supported by the makfile (sorry).
	#./xsltproc

zip-html-chunked-$(1): zip-dir html-chunked-$(1)
	zip -r $(ZIP)/sms-html-chunked-$(1).zip $(HTML_CHUNKED)/$(1) \
    $(HTML_CHUNKED)/images

zip-html-single-$(1): zip-dir html-single-$(1)
	zip -r $(ZIP)/sms-html-single-$(1).zip $(HTML_SINGLE)/$(1) \
    $(HTML_SINGLE)/images

endef

$(foreach lang, $(SUBDIRS),$(eval $(call lang-def,$(lang))))


stylesheets/html-chunk.xsl stylesheets/html-single.xsl:
	sh configure