ROOT := ../..
include $(ROOT)/Makefile.config

######################################################################

export LC_ALL = C

NULL :=

ASCIIDOC := asciidoc
ifeq (true, $(call HAVE_CMD,$(ASCIIDOC)))
ASCIIDOC_CONF_DIR := $(shell $(ASCIIDOC) -v /dev/null 2>&1 | head -n 1 | sed 's|.*reading: \(.*\)/asciidoc.conf|\1|')
else
ASCIIDOC_CONF_DIR :=
endif
ASCIIDOC_MLTON_FLAGS := $(shell cat conf/asciidoc-mlton.flags | sed 's|^\#.*||' | sed "s|MLTON_VERSION|$(MLTON_VERSION)|")
ASCIIDOC_MLTON_DEPS := bin/InclGitFile.py conf/asciidoc-mlton.flags $(shell cat conf/asciidoc-mlton.flags | sed -n 's|^.*\(conf/.*\)$$|\1|p')
ASCIIDOC_HTML5_FLAGS := $(ASCIIDOC_MLTON_FLAGS) $(shell cat conf/asciidoc-html5.flags | sed 's|^\#.*||')
ASCIIDOC_HTML5_DEPS := $(ASCIIDOC_MLTON_DEPS) conf/asciidoc-html5.flags $(shell cat conf/asciidoc-html5.flags | sed -n 's|^.*\(conf/.*\)$$|\1|p')
ASCIIDOC_DOCBOOK45_FLAGS := $(ASCIIDOC_MLTON_FLAGS) $(shell cat conf/asciidoc-docbook45.flags | sed 's|^\#.*||')
ASCIIDOC_DOCBOOK45_DEPS := $(ASCIIDOC_MLTON_DEPS) conf/asciidoc-docbook45.flags $(shell cat conf/asciidoc-docbook45.flags | sed -n 's|^.*\(conf/.*\)$$|\1|p')

DBLATEX := dblatex

GEN_PAGES := Index mlton-guide
GEN_ATTACHMENTS := $(foreach size,16 32 64 128 256 512 1024,Logo.attachments/mlton-$(size).png Logo.attachments/mlton-$(size).pdf)

SRC_PAGES := $(filter-out $(GEN_PAGES),$(patsubst ./%.adoc,%,$(shell cd src ; find . -type f -name '*.adoc')))
SRC_ATTACHMENTS := $(filter-out $(GEN_ATTACHMENTS),$(patsubst ./%,%,$(foreach dir,$(shell cd src ; find . -type d -name '*.attachments'),$(shell cd src ; find $(dir) -type f ! -name '.gitignore' ! -name '.gitattributes'))))

HTML5_XTRA := asciidoc.css asciidoc.js pygments.css mlton.css mlton-gcse.js index.html
HTML5_XTRA_PAGES := Index

MLTON_ORG_XTRA := $(HTML5_XTRA)
MLTON_ORG_XTRA_PAGES := $(HTML5_XTRA_PAGES)
MLTON_ORG_XTRA_ATTACHMENTS := $(foreach size,16 32 64 128 256 512 1024,Logo.attachments/mlton-$(size).png)
MLTON_ORG := $(addprefix www.mlton.org/, $(SRC_PAGES) $(SRC_ATTACHMENTS) $(MLTON_ORG_XTRA) $(MLTON_ORG_XTRA_PAGES) $(MLTON_ORG_XTRA_ATTACHMENTS))
MLTON_ORG_TORM := $(filter-out $(MLTON_ORG),$(shell if [ -d www.mlton.org ]; then find www.mlton.org -type f; fi))

LOCALHOST_XTRA := $(filter-out mlton-gcse.js,$(HTML5_XTRA))
LOCALHOST_XTRA_PAGES := $(HTML5_XTRA_PAGES)
LOCALHOST_XTRA_ATTACHMENTS := $(foreach size,16 32 64 128 256 512 1024,Logo.attachments/mlton-$(size).png)
LOCALHOST := $(addprefix localhost/, $(SRC_PAGES) $(SRC_ATTACHMENTS) $(LOCALHOST_XTRA) $(LOCALHOST_XTRA_PAGES) $(LOCALHOST_XTRA_ATTACHMENTS))
LOCALHOST_TORM := $(filter-out $(LOCALHOST),$(shell if [ -d localhost ]; then find localhost -type f; fi))


ALL :=
ifeq (true, $(call HAVE_CMD,$(ASCIIDOC)))
ifeq (true, $(call HAVE_CMD,pygmentize))
ALL += $(LOCALHOST) localhost-rm
endif
endif


all: $(ALL)


ifeq (true, $(call HAVE_CMD,gm))
CONVERT := gm convert
else
ifeq (true, $(call HAVE_CMD,convert))
CONVERT := convert
else
CONVERT := no-convert
endif
endif

%-16.png : %.svg
	$(CONVERT) $< -resize 16x16 $@
%-32.png : %.svg
	$(CONVERT) $< -resize 32x32 $@
%-64.png : %.svg
	$(CONVERT) $< -resize 64x64 $@
%-128.png : %.svg
	$(CONVERT) $< -resize 128x128 $@
%-256.png : %.svg
	$(CONVERT) $< -resize 256x256 $@
%-512.png : %.svg
	$(CONVERT) $< -resize 512x512 $@
%-1024.png : %.svg
	$(CONVERT) $< -resize 1024x1024 $@

%-16.pdf : %.svg
	$(CONVERT) $< -resize 16x16 $@
%-32.pdf : %.svg
	$(CONVERT) $< -resize 32x32 $@
%-64.pdf : %.svg
	$(CONVERT) $< -resize 64x64 $@
%-128.pdf : %.svg
	$(CONVERT) $< -resize 128x128 $@
%-256.pdf : %.svg
	$(CONVERT) $< -resize 256x256 $@
%-512.pdf : %.svg
	$(CONVERT) $< -resize 512x512 $@
%-1024.pdf : %.svg
	$(CONVERT) $< -resize 1024x1024 $@


conf/specialsections.conf : $(ASCIIDOC_CONF_DIR)/lang-en.conf bin/mk-specialsections-conf.sh
	./bin/mk-specialsections-conf.sh $< $@

conf/html5-header.conf : $(ASCIIDOC_CONF_DIR)/html5.conf bin/mk-html5-header-conf.sh
	./bin/mk-html5-header-conf.sh $< $@

conf/html5-footer.conf : $(ASCIIDOC_CONF_DIR)/html5.conf bin/mk-html5-footer-conf.sh
	./bin/mk-html5-footer-conf.sh $< $@


src/Index.adoc : bin/mk-index.sh $(foreach page,$(SRC_PAGES),src/$(page).adoc)
	./bin/mk-index.sh $(SRC_PAGES) > $@

src/mlton-guide.adoc : bin/mk-mlton-guide.sh $(foreach page,$(SRC_PAGES),src/$(page).adoc)
	./bin/mk-mlton-guide.sh $(SRC_PAGES) > $@


$(ASCIIDOC_CONF_DIR)/stylesheets/asciidoc.css: ;
%/asciidoc.css : $(ASCIIDOC_CONF_DIR)/stylesheets/asciidoc.css
	mkdir -p $(dir $@) ; cp $< $@

$(ASCIIDOC_CONF_DIR)/javascripts/asciidoc.js: ;
%/asciidoc.js : $(ASCIIDOC_CONF_DIR)/javascripts/asciidoc.js
	mkdir -p $(dir $@) ; cp $< $@

$(ASCIIDOC_CONF_DIR)/stylesheets/pygments.css: ;
%/pygments.css : $(ASCIIDOC_CONF_DIR)/stylesheets/pygments.css
	mkdir -p $(dir $@) ; cp $< $@

conf/mlton.css: ;
%/mlton.css : conf/mlton.css
	mkdir -p $(dir $@) ; cp $< $@

conf/mlton-gcse.js: ;
%/mlton-gcse.js : conf/mlton-gcse.js
	mkdir -p $(dir $@) ; cp $< $@

%/index.html : %/Home
	rm -f $@ ; mkdir -p $(dir $@) ; ln -s Home $@ ; touch $@


www.mlton.org/% : src/%.adoc $(ASCIIDOC_HTML5_DEPS) bin/mk-git-attribute-entity-flags.sh
	mkdir -p $(dir $@) ; $(ASCIIDOC) $(ASCIIDOC_HTML5_FLAGS) $(shell ./bin/mk-git-attribute-entity-flags.sh $<) -a mlton-guide-host=www.mlton.org -a mlton-guide-page=$(basename $(notdir $<)) -o $@ $<

www.mlton.org/% : src/%
	mkdir -p $(dir $@) ; cp -prf $< $@

.PHONY: www.mlton.org-rm
www.mlton.org-rm: $(MLTON_ORG)
	@rm -rf $(MLTON_ORG_TORM)

.PHONY: www.mlton.org
www.mlton.org: $(MLTON_ORG)

.PHONY: upload_www.mlton.org
upload_www.mlton.org: $(MLTON_ORG) www.mlton.org-rm
	rsync -avzP --delete -e ssh www.mlton.org/ fluet,mlton@web.sourceforge.net:htdocs/wiki


localhost/% : src/%.adoc $(ASCIIDOC_HTML5_DEPS)
	mkdir -p $(dir $@) ; $(ASCIIDOC) $(ASCIIDOC_HTML5_FLAGS) -a mlton-guide-host=localhost -a mlton-guide-page=$(basename $(notdir $<)) -o $@ $<

localhost/% : src/%
	mkdir -p $(dir $@) ; cp -prf $< $@

.PHONY: localhost-rm
localhost-rm: $(LOCALHOST)
	@rm -rf $(LOCALHOST_TORM)

.PHONY: localhost
localhost: $(LOCALHOST) localhost-rm

src/mlton-guide.xml : src/mlton-guide.adoc conf/asciidoc-docbook45.flags $(ASCIIDOC_DOCBOOK45_DEPS)
	mkdir -p $(dir $@) ; $(ASCIIDOC) $(ASCIIDOC_DOCBOOK45_FLAGS) -o $@ $<
	@true || xmllint --nonet --noout --valid $@ || true
mlton-guide.pdf : src/mlton-guide.xml src/Logo.attachments/mlton-128.pdf conf/mlton-dblatex.xsl conf/mlton-dblatex.sty
	$(DBLATEX) -t pdf -p conf/mlton-dblatex.xsl -s conf/mlton-dblatex.sty -o $@ $<


.PHONY: check-git-links
check-git-links:
	@./bin/check-git-links.sh $(SRC_PAGES)

######

SHOW_VARS += ASCIIDOC_CONF_DIR ASCIIDOC_HTML5_FLAGS ASCIIDOC_HTML5_DEPS
SHOW_VARS += GEN_PAGES GEN_ATTACHMENTS SRC_PAGES SRC_ATTACHMENTS

$(eval $(MK_SHOW_CONFIG))


.PHONY: clean
clean:
	../../bin/clean
