216 lines
5.4 KiB
Makefile
216 lines
5.4 KiB
Makefile
# Makefile für Markdown-eBook-Projekt Rust Handbuch mit Pandoc
|
|
# (C) 2025 - Adam Skotarczak - 19/06/2025
|
|
|
|
# === Allgemeine Konfiguration ===
|
|
|
|
# === Titel des eBooks ===
|
|
TITLE := Vorlage_eBook
|
|
|
|
# === Verzeichnis mit Markdown-Dateien ===
|
|
MANUSCRIPT := manuscript
|
|
|
|
# === Ausgabeordner für Builds ===
|
|
OUTPUT := build
|
|
|
|
# === Metadaten für das eBook ===
|
|
METADATA := metadata/ebook.yaml
|
|
|
|
# === CSS-Datei für das eBook ===
|
|
CSS := styles/ebook.css
|
|
|
|
# === LaTeX-Vorlage für das eBook ===
|
|
TEX_EBOOK := styles/ebook-template.tex
|
|
|
|
# === LaTeX-Vorlage für den Druck ===
|
|
TEX_PRINT := styles/print-template.tex
|
|
|
|
# === Logo für das eBook ===
|
|
LOGO := media/logo/logo.png
|
|
|
|
# === Pfad zu Hilfswerkzeugen ===
|
|
TOOLPATH := tools
|
|
|
|
# === LaTeX Geometrie-Einstellungen (z.B. A5-Papier) ===
|
|
GEOMETRY := geometry:a5paper
|
|
|
|
# === Schriftart für LaTeX ===
|
|
FONT := Noto Sans CJK SC
|
|
|
|
# === Python Index für make toc ===
|
|
INDEXFILE := INHALT
|
|
|
|
# === Verzeichnistiefe im eBook ===
|
|
TOCDEPTH := 3
|
|
|
|
# === 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)
|
|
|
|
# Dateien auslassen im MODE prod
|
|
MD_FILES_prod = $(filter-out \
|
|
$(MANUSCRIPT)/00_Deckblatt.md, \
|
|
$(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=$(TOCDEEP) \
|
|
--css=$(CSS) \
|
|
--epub-chapter-level=1 \
|
|
--epub-cover-image=$(LOGO) \
|
|
-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
|