# Makefile
# Espace de recherche


# ----- Notes -----------------------------------------------
# TODO: pandoc flags → tout ce qui est commun aux deux appels
# -----------------------------------------------------------

# ===========================================================
# variables
# ===========================================================

SHELL := /bin/bash

# Timestamp
date0500 := $(shell date +%Y-%m-%dT%H:%M:%S-05:00) # -05:00
date0400 := $(shell date +%Y-%m-%dT%H:%M:%S-04:00) # -04:00

# Git hash
#hash      := $(shell cat .git/refs/heads/main)

# Name
name := $(PROJET)

# Variables pour les intrants
config_screen  = ./src/config-screen.yml
config_print   = ./src/config-print.yml
src_dir       := ./src/$(name)
src_files      = $(shell ls $(src_dir)/*.md | grep -v -f exclure.txt)

# Variables pour les extrants
# Invariant: ./archives et ./dist préexistent nécessairement
zip   := ./archives/$(name).zip
dist  := ./dist/$(name)
print := ./dist/$(name)/$(name).html

# Pandoc flags
# TODO: mise en œuvre
PANDOCFLAGS = \
   --metadata-file ./src/global-metadata.yml \
   --metadata-file $(src_dir)/metadata.yml \
   --metadata-file $(src_dir)/theme.yml \
   --citeproc \
   --bibliography $(references_file) \
   --csl $(csl_file) \
   --wrap none \
   --toc


# Règle par défaut, si aucune n’est mentionnée
.DEFAULT_GOAL := aide


# ===========================================================
# Règles publiques
# ===========================================================


# Affiche l’aide
.PHONY: aide
aide: ## Le double croisillon indique de la doc à parser
	@cat aide.txt | ccze -A


# Génère l’ensemble des documents
# NOTE: $(zip) = dépendance de $(print), donc $(zip) s’exécute avec build avant $(print)
.PHONY: build
build: _projet $(print)

# Exécute Antidote
# NOTE: wip
.PHONY: antidote
antidote:
	/usr/local/bin/Antidote9 $(CORRIGER)

# Lance un serveur http
.PHONY: serve
serve:
	http-server ./dist/ -c-1

# Compte les nombre de mots
# NOTE: wip
.PHONY: wordcount
wordcount:
	pandoc $(src) \
   --lua-filter ./scripts/wordcount.lua


# ===========================================================
# Règles privées
# ===========================================================


# Vérifier qu’un projet est fourni
.PHONY: _projet
_projet:
ifndef PROJET
	$(error ERREUR : aucun projet sélectionné)
endif


# ===========================================================
# Fichiers
# ===========================================================


# Génère la version HTML pour écran
# NOTE: $(<D) = répertoire du premier fichier matché par $(src_dir)/*
# (suppose que $(src_dir) contient au moins un fichier)
$(zip): $(src_dir)/* $(config_screen)
	pandoc $(src_files) \
   --defaults $(config_screen) \
   --metadata-file ./src/global-metadata.yml \
   --metadata-file $(<D)/abstract.yml \
   --metadata-file $(<D)/metadata.yml \
   --metadata-file $(<D)/theme.yml \
   --metadata=date:$(date0500) \
   --toc \
   --log $(<D)/log.json \
   --output $@
	unzip -o -O UTF-8 $@ -d $(dist)


# Génère la version HTML pour impression
$(print): $(zip) $(config_print)
	pandoc $(src_files) \
   --defaults $(config_print) \
   --metadata-file ./src/global-metadata.yml \
   --metadata-file $(src_dir)/abstract.yml \
   --metadata-file $(src_dir)/metadata.yml \
   --metadata=date:$(date0500) \
   --toc \
   --output $@
