117 lines
3.5 KiB
Makefile
117 lines
3.5 KiB
Makefile
SOURCE_FOLDER := sources
|
||
OUTPUT_FILENAME := document
|
||
SLIDES_OUTPUT_FOLDER := présentations
|
||
|
||
TEMPLATE_REPOSITORY := https://git.milhit.ch/igor/bunige-pagedjs-template/releases/download
|
||
|
||
# Liste les fichiers sources.
|
||
MD_UNSORTED := $(wildcard $(SOURCE_FOLDER)/*.md)
|
||
# Ordonne les fichiers sources sur la base du début numérique du nom des
|
||
# fichiers.
|
||
MD_SORTED := $(shell printf '%s\n' $(MD_UNSORTED) | sort -t- -k1,1n)
|
||
|
||
# Sources pour les slides
|
||
SLIDES_SOURCES := $(wildcard $(SOURCE_FOLDER)/*slides*.md)
|
||
SLIDES_TARGETS := $(patsubst $(SOURCE_FOLDER)/%.md,$(SLIDES_OUTPUT_FOLDER)/%.html,$(SLIDES_SOURCES))
|
||
SLIDES_BASENAMES := $(basename $(notdir $(SLIDES_SOURCES)))
|
||
|
||
.PHONY: all
|
||
all: pdf slides
|
||
|
||
# Construit le fichier HTML.
|
||
.PHONY: html
|
||
html: $(MD_SORTED)
|
||
pandoc \
|
||
--to=html --standalone \
|
||
--template=static/template.html --css=static/style.css \
|
||
-V static='./static' \
|
||
--toc --toc-depth=2 \
|
||
--out=$(OUTPUT_FILENAME).html $(MD_SORTED)
|
||
|
||
# Construit le fichier PDF.
|
||
.PHONY: pdf
|
||
pdf: $(MD_SORTED)
|
||
pandoc \
|
||
--to=pdf --pdf-engine=pagedjs-cli --embed-resources=true \
|
||
--template=static/template.html --css=static/style.css \
|
||
-V noscript=true -V static='./static' \
|
||
--toc --toc-depth=2 \
|
||
--out=$(OUTPUT_FILENAME).pdf $(MD_SORTED)
|
||
|
||
# Construit les slides
|
||
$(SLIDES_OUTPUT_FOLDER)/%.html: $(SOURCE_FOLDER)/%.md
|
||
@mkdir -p $(SLIDES_OUTPUT_FOLDER)
|
||
pandoc --to=revealjs --standalone \
|
||
--template=présentations/revealjs-template.html \
|
||
--css=dist/theme/bunige.css \
|
||
--slide-level=2 \
|
||
--output=$@ $<
|
||
|
||
.PHONY: slides
|
||
slides: $(SLIDES_TARGETS)
|
||
|
||
# Génération d'une présentation spécifique
|
||
.PHONY: slide-%
|
||
slide-%: $(SLIDES_OUTPUT_FOLDER)/%.html
|
||
@echo "Présentation $* générée dans $(SLIDES_OUTPUT_FOLDER)/"
|
||
|
||
# Watch amélioré pour les slides
|
||
.PHONY: watch_slides
|
||
watch_slides:
|
||
watchexec -r -w $(SOURCE_FOLDER) -f "*.md" \
|
||
-i "$(SLIDES_OUTPUT_FOLDER)/*.html" \
|
||
-- make slides
|
||
|
||
# Template pour générer les cibles de watch spécifiques
|
||
define WATCH_SLIDE_TEMPLATE
|
||
.PHONY: watch-slide-$(1)
|
||
watch-slide-$(1):
|
||
@echo "Surveillance de $(1).md..."
|
||
watchexec -r -w $(SOURCE_FOLDER)/$(1).md \
|
||
-i "$(SLIDES_OUTPUT_FOLDER)/$(1).html" \
|
||
-- make slide-$(1)
|
||
endef
|
||
|
||
# Génération automatique des cibles de watch
|
||
$(foreach slide,$(SLIDES_BASENAMES),$(eval $(call WATCH_SLIDE_TEMPLATE,$(slide))))
|
||
|
||
# Reconstruit le fichier HTML à la modification des autres fichiers.
|
||
.PHONY: watch
|
||
watch:
|
||
watchexec -r -w . -i document.html \
|
||
-- make html
|
||
|
||
# Supprime les fichiers construits lorsqu'ils ne sont plus nécessaire.
|
||
.PHONY: clean
|
||
clean:
|
||
rm -f *.html *.pdf
|
||
|
||
# Lance un serveur web pour servir le HTML.
|
||
.PHONY: serve
|
||
serve:
|
||
watchexec -r -w . "python -m http.server"
|
||
|
||
# Mets à jour le modèle de document
|
||
# Usage : make update VERSION=v1.0.0
|
||
.PHONY: update
|
||
update:
|
||
curl -o modèle.zip $(TEMPLATE_REPOSITORY)/$(VERSION)/$(VERSION).zip
|
||
unzip -f -o modèle.zip
|
||
rm modèle.zip
|
||
|
||
# Aide
|
||
.PHONY: help
|
||
help:
|
||
@echo "Cibles disponibles :"
|
||
@echo " all - Génère le PDF et toutes les présentations"
|
||
@echo " pdf - Génère le document PDF"
|
||
@echo " html - Génère le document HTML"
|
||
@echo " slides - Génère toutes les présentations"
|
||
@echo " slide-NAME - Génère une présentation spécifique"
|
||
@echo " watch - Surveille les changements du document"
|
||
@echo " watch-slides - Surveille tous les fichiers slides"
|
||
@echo " watch-slide-NAME - Surveille une présentation spécifique"
|
||
@echo " clean - Supprime les fichiers générés"
|
||
@echo ""
|
||
@echo "Présentations détectées : $(SLIDES_BASENAMES)"
|