Files
uni-sose26-sm/Makefile
T
Jannik Meier a8017ffd24 init
2026-06-09 19:43:18 +02:00

68 lines
2.3 KiB
Makefile

export PATH := /Library/TeX/texbin:$(PATH)
TEMPLATE := templates/sm-template.tex
DEFAULTS := templates/sm-defaults.yaml
FILENAME_TPL := templates/filename.tpl
META_FILE ?= abgaben/metadata.yaml
PANDOC := pandoc
ABS_TEMPLATE := $(abspath $(TEMPLATE))
ABS_DEFAULTS := $(abspath $(DEFAULTS))
ABS_META := $(abspath $(META_FILE))
ABS_FILENAME_TPL := $(abspath $(FILENAME_TPL))
SOURCES := $(shell find abgaben -name "*.md" 2>/dev/null)
.PHONY: all render clean help
# -- Alle Abgaben -------------------------------------------------------------
all:
@for src in $(SOURCES); do \
$(MAKE) --no-print-directory render FILE=$$src || exit 1; \
done
# -- Einzeldatei (VSCode-Task / manuell) --------------------------------------
# PDF-Dateiname wird aus den Metadaten ermittelt: Gruppe0_SM-1b_Vorbereitung.pdf
# Aufruf: make render FILE=abgaben/irgendwas.md
render:
ifndef FILE
$(error Bitte FILE angeben: make render FILE=abgaben/datei.md)
endif
$(eval SRCDIR := $(dir $(abspath $(FILE))))
$(eval OUTNAME := $(shell $(PANDOC) \
--template=$(ABS_FILENAME_TPL) \
--metadata-file=$(ABS_META) \
-t plain "$(FILE)" 2>/dev/null | tr -d '\n\r'))
@if [ -z "$(OUTNAME)" ]; then \
echo "FEHLER: PDF-Name konnte nicht aus Metadaten ermittelt werden."; \
echo " Pflichtfelder in Frontmatter: gruppe, aufgabenkennung"; \
exit 1; \
fi
@echo "Baue $(FILE) --> $(SRCDIR)$(OUTNAME)..."
cd "$(SRCDIR)" && $(PANDOC) "$(notdir $(FILE))" \
--defaults=$(ABS_DEFAULTS) \
--template=$(ABS_TEMPLATE) \
--metadata-file=$(ABS_META) \
-o "$(OUTNAME)"
@echo " => $(SRCDIR)$(OUTNAME)"
# -- Aufraeumen ---------------------------------------------------------------
clean:
find abgaben -name "*.pdf" -delete 2>/dev/null; true
@echo "PDFs geloescht."
# -- Hilfe --------------------------------------------------------------------
help:
@echo "Verwendung:"
@echo " make Alle Abgaben bauen"
@echo " make render FILE=abgaben/<datei>.md Einzelne Datei rendern"
@echo " make META_FILE=abgaben/x.yaml ... Andere Metadaten-Datei"
@echo " make clean Alle PDFs loeschen"
@echo ""
@echo "PDF-Name aus Metadaten: Gruppe0_SM-1b_Vorbereitung.pdf"
@echo "VSCode: Cmd+Shift+B rendert die aktuell geoeffnete Datei."