##
##  M A K E
##

##
## V A R I A B L E S  D' E N V I R O N E M E N T
##

# Chemin vers les thèmes Dalibo. DLB est le chemin pour la command pandoc,
DLB?=$(HOME)/.dalibo/themes/

# Thème de la coloration dyntaxique
# mettre `HIGHLIGHT_THEME=NULL make` pour revenir à la coloration par défaut
HIGHLIGHT_THEME?=dalibo-dark

# DOCKER permet de forcer l'usage de pandocker meme si pandoc est installé en local
# Lancer `DOCKER=stable make` pour définir l'image pandocker à utiliser
# Par défaut cette variable est vide

# DECKTAPE permet de convertir les slides HTML en PDF
DECKTAPE?=docker run --rm -it --privileged -v $(CURDIR):/slides astefanutti/decktape


##
##     P A N D O C
##

P=pandoc

# HOST_DLB est le chemin pour le Makefile.
HOST_DLB:=$(DLB)

# if pandoc is not installed, let's use pandocker
ifeq (, $(shell which $(P)))
	DOCKER?=latest
endif

ifneq ($(DOCKER),)
	DLB=/root/dalibo/themes
	P:=docker run --rm -it --privileged -e TEXMFHOME --volume $(CURDIR):/pandoc --volume $(HOST_DLB):$(DLB) dalibo/pandocker:$(DOCKER)
endif

PANDOC_ARGS=--standalone
P+=--metadata=dlb:$(DLB) $(PANDOC_ARGS)


#
# Pandoc Flags
#
ifeq ("$(wildcard $(HOST_DLB))","")
 # Default Compilation Flags
 REVEAL_FLAGS=-V revealjs-url:https://revealjs.com/css/reveal.css
 TEX_FLAGS=
 BEAMER_FLAGS=
 PDF_FLAGS=
 ODT_FLAGS=
 DOCX_FLAGS=
 EPUB_FLAGS=
else
 # Dalibo's Compilation Flags
 REVEAL_LOCAL_FLAGS=-V revealjs-url="$(HOST_DLB)/reveal.js/" --template="$(DLB)/reveal.js/pandoc/templates/dalibo.revealjs"
 REVEAL_FLAGS=-V revealjs-url="$(DLB)/reveal.js/" --template="$(DLB)/reveal.js/pandoc/templates/dalibo.revealjs" --self-contained
 TEX_FLAGS=-V theme=Dalibo
	export TEXMFHOME=$(DLB)/beamer
 BEAMER_FLAGS=-V theme=Dalibo
ifneq (,$(wildcard $(HOST_DLB)/beamer/template.latex))
 BEAMER_FLAGS:=$(BEAMER_FLAGS) --template $(DLB)/beamer/template.latex
endif
ifneq (,$(wildcard $(HOST_DLB)/highlight/$(HIGHLIGHT_THEME).theme))
 $(info Utilisation du style Dalibo pour la coloration syntaxique)
 BEAMER_FLAGS:=$(BEAMER_FLAGS) --highlight-style=$(DLB)/highlight/$(HIGHLIGHT_THEME).theme
 REVEAL_FLAGS:=$(REVEAL_FLAGS) --highlight-style=$(DLB)/highlight/$(HIGHLIGHT_THEME).theme
 REVEAL_LOCAL_FLAGS:=$(REVEAL_LOCAL_FLAGS) --highlight-style=$(DLB)/highlight/$(HIGHLIGHT_THEME).theme
endif
 PDF_FLAGS=--template=$(DLB)/tex/book1/template.tex
 ODT_FLAGS=--reference-odt=$(DLB)/odt/template_conference.dokuwiki.odt
 DOCX_FLAGS=--reference-doc=$(DLB)/doc/template_conference.dokuwiki.doc
 EPUB_FLAGS=
endif

HANDOUT_HTML_FLAGS=-t html5 --self-contained --standalone --toc --toc-depth=2 --template=$(DLB)/html/uikit/dalibo.html

##
## $(SRCS) is the list of all source files
##

# Ignore documentation
EXCLUDES:= -and -not -name 'QUICKSTART.md' -and -not -name 'README.md'
# Ignore index
EXCLUDES+= -and -not -name 'INDEX.md'
# Ignore themes directories
EXCLUDES+= -and -not -path './themes/*' -and -not -path '*/reveal.js/*'
# Ignore directories and files that starts with a '_'
EXCLUDES+= -and -not -path '*/_*'
# Search for all .md files
SRCS=$(shell find . -type f -name '*.md' $(EXCLUDES) )

##
## Objects files
##
REVEAL_OBJS=$(SRCS:.md=.html)
REVEAL_LOCAL_OBJS=$(SRCS:.md=.local.html)
REVEAL_PDF_OBJS=$(SRCS:.md=.reveal.pdf)
TEX_OBJS=$(SRCS:.md=.tex)
BEAMER_OBJS=$(SRCS:.md=.beamer.pdf)
BEAMER_NOTES_OBJS=$(SRCS:.md=.beamer.speaker.pdf)
PDF_OBJS=$(SRCS:.md=.pdf)
ODT_OBJS=$(SRCS:.md=.odt)
DOCX_OBJS=$(SRCS:.md=.docx)
EPUB_OBJS=$(SRCS:.md=.epub)
HANDOUT_HTML_OBJS=$(SRCS:.md=.handout.html)

test:
	@echo Présentations: $(SRCS)
	@echo Thèmes dalibo: $(DLB)
	@echo Commande pandoc: $(P)
	@echo Options reveal: echo $(REVEAL_FLAGS)

install:
	ln -s $(HOME)/.dalibo/themes/

uninstall:
	rm themes

all: reveal reveal_local pdf epub

reveal: $(REVEAL_OBJS)
reveal_local: $(REVEAL_LOCAL_OBJS)
tex: $(TEX_OBJS)
beamer: $(BEAMER_OBJS)
beamer_notes: $(BEAMER_NOTES_OBJS)
pdf: $(PDF_OBJS)
odt: $(ODT_OBJS)
docx: $(DOCX_OBJS)
epub: $(EPUB_OBJS)
reveal_pdf: $(REVEAL_PDF_OBJS)
handout_html: $(HANDOUT_HTML_OBJS)

%.all:  %.html %.tex %.beamer.pdf %.pdf %.odt %.epub

%.local.html: %.md
	$P -t revealjs $(REVEAL_LOCAL_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.html: %.md
	$P -t revealjs $(REVEAL_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.tex: %.md
	$P -t beamer $(TEX_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.beamer.pdf: %.md
	TEXMFHOME=$(DLB)/beamer $P -t beamer --pdf-engine=xelatex -V classoption=14pt -V classoption="aspectratio=169" $(BEAMER_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.beamer.notes.pdf: %.md
	$P -t beamer -V classoption=14pt -V "beameroption=show notes on second screen" $(BEAMER_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.pdf: %.md
	$P --pdf-engine=xelatex $(PDF_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.odt: %.md
	$P $(ODT_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.docx: %.md
	$P $(DOCX_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.epub: %.md
	$P $(EPUB_FLAGS) --resource-path=.:$(dir $^) $^ -o $@

%.reveal.pdf: %.html
	$(DECKTAPE) --size 1920x1080 $^ $@

%.handout.html: %.md
	$(ECHO)
	cd $(DIR) && $P $(HANDOUT_HTML_FLAGS) $(IN) -o $(OUT)


# Utiliser make watch-reveal_local pour regénérer les reveal.html à chaque
# changement des md.
watch-%:
	echo $(SRCS) | entr -c make $*

# Archive Index
_archives/index.html: _archives/INDEX.md
	$P $^  -o $@

# Clean Artefacts
clean:
	rm -fr $(REVEAL_OBJS)
	rm -fr $(REVEAL_LOCAL_OBJS)
	find . -name reveal.js | xargs -r rm -fr
	rm -fr $(TEX_OBJS)
	rm -fr $(BEAMER_OBJS)
	rm -fr $(BEAMER_NOTES_OBJS)
	rm -fr $(PDF_OBJS)
	rm -fr $(ODT_OBJS)
	rm -fr $(DOCX_OBJS)
	rm -fr $(EPUB_OBJS)
	rm -fr $(HTML_HANDOUT_OBJS)
