template-ebook/Makefile
2025-06-25 21:29:57 +02:00

179 lines
4.6 KiB
Makefile

# 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