# Makefile für Markdown-eBook-Projekt Rust Handbuch mit Pandoc # (C) 2025 - Adam Skotarczak - 19/06/2025 # === load Configfile === include config.mk ifndef OUTPUT $(error Bitte config.mk definieren!) endif # === Automatische Konfiguration === VERSION := $(shell cat VERSION) PYTHON := $(shell command -v python3 || command -v python) # === Nur wsl oder Linux === # ifeq ($(OS),Windows_NT) set_codepage: @if [ "$(OS)" = "Windows_NT" ]; then chcp 65001 >nul; fi $(error [⚠] Windows wird nicht unterstützt. Bitte WSL oder Linux verwenden.) exit(1) endif # === Quelldateien (geordnet nach Nummerierung) === # Standard: prod, falls nicht durch CLI überschrieben MODE ?= prod MD_ALL = $(wildcard $(MANUSCRIPT)/*.md) MD_FILES_prod := $(filter-out $(EXCLUDE_prod), $(MD_ALL)) MD_FILES_dev = $(MD_ALL) # Dynamische Auswahl je nach MODE define set_md_files $(eval MD_FILES := $(MD_FILES_$(MODE))) $(eval MD_SORTED := $(sort $(MD_FILES))) endef # === Standardziel: Setze Codepage und führe alle Builds aus === .DEFAULT_GOAL := all # === Abhängigkeiten prüfen === check-deps: check-python check-fonts .PHONY: check-deps # === Standardziel: Alles bauen === all: clean plain epub pdf html docx toc # === Hier ist geplant make zu missbrauchen, die notwendigen Abhängigkeiten zu installieren === install: @echo "\n⚠ - Noch nicht implementiert!\n" # === EPUB-Ausgabe === epub: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --toc-depth=$(TOCDEPTH) \ --css=$(CSS) \ --epub-chapter-level=1 \ --epub-cover-image=$(LOGO) \ -V toc-depth=$(TOCDEPTH) \ -o $(OUTPUT)/$(TITLE).epub # === PDF über LaTeX (Print-Version) === # --highlight-style= #| Stilname | Beschreibung / Anmutung | #| ------------ | --------------------------------------------- | #| `pygments` | Klassischer Stil, angelehnt an Pygments | #| `tango` | Kontrastreich, an das Tango-Theme angelehnt | #| `kate` | Stil des Kate-Editors (KDE) | #| `monochrome` | Schwarzweiß, ohne Farben (druckfreundlich) | #| `espresso` | Dunkler Hintergrund, helles Code-Highlighting | #| `zenburn` | Weicher, augenfreundlicher Dunkelstil | #| `haddock` | Stil von Haddock-Dokumentation | #| `breezedark` | KDE-Breeze-Dark-inspiriert (dunkel, modern) | # === PDF Generierung === pdf: $(OUTPUT) $(call set_md_files) @echo "Verwende MODE=$(MODE)" @echo "Dateien: $(MD_FILES)" @pandoc $(MD_SORTED) \ --columns=1000 \ --metadata-file=$(METADATA) \ --metadata version="$(VERSION)" \ --resource-path=media \ --toc --number-sections --toc-depth=$(TOCDEPTH) \ --template=$(TEX_PRINT) \ --pdf-engine=xelatex \ --highlight-style=tango \ -V toc-depth=$(TOCDEPTH) \ -V $(GEOMETRY) \ -V buildmode=$(MODE) \ -o $(OUTPUT)/$(TITLE).pdf # === HTML-Vorschau oder Export === html: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --number-sections \ --css=$(CSS) \ -o $(OUTPUT)/$(TITLE).html # === Word-Version (Lektorat etc.) === docx: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --number-sections \ -o $(OUTPUT)/$(TITLE).docx plain: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --wrap=none \ -t plain \ -o $(OUTPUT)/$(TITLE)_reintext.txt # === Vorschau im Terminal (reines Markdown) === preview: cat $(MD_SORTED) | less # === Sicherstellen, dass der Ausgabeordner existiert === $(OUTPUT): @mkdir -p $(OUTPUT) @echo "[i] Verzeichnis $(OUTPUT) erstellt!" # === Python-Check === check-python: @$(PYTHON) --version || (echo "❌ Python nicht gefunden, wsl gestartet?" && exit 1) # === Fonts testen === check-fonts: @fc-match "$(FONT)" >/dev/null || (echo "❌ Schriftart $(FONT) nicht gefunden!" && exit 1) # === Erstellt aus einem vordefinierten Verzeichnis mit Markdown-Dateien einen Inhaltsverzeichnis === toc: @echo "📚 Generiere Inhaltsverzeichnis in .\$(INDEXFILE).md ..." @$(PYTHON) $(TOOLPATH)/tocgen.py -d $(MANUSCRIPT) -o $(INDEXFILE).md @echo "📚 Inhaltsverzeichnis in .\$(INDEXFILE).md erstellt." @echo "✅ Fertig." # === Bereinigen der Ausgaben === clean: @rm -rf $(OUTPUT)/* @echo "🧹 alle Builds unter $(OUTPUT)/ gelöscht." @rm -f $(INDEXFILE).md @echo "🧹 $(INDEXFILE).md gelöscht." clear: clean # === Hilfe === help: @echo "\n⚠ - Noch nicht implementiert!\n" .PHONY: all toc epub check-python pdf html docx preview clean