basic-book-builder/Makefile

189 lines
5.5 KiB
Makefile

.PHONY: all bootstrap latex index pdf html markdown docx odt clean
PANDOC = pandoc
XELATEX = xelatex -interaction=nonstopmode -halt-on-error -file-line-error
BASE = conf/pandoc.yaml
METADATA = metadata.yaml
# Extract metadata fields
META_NAME := $(shell sed -n 's/^name:[[:space:]]*//p' $(METADATA))
# ============================================================
# Independent build paths
# ============================================================
LATEX_BUILD = build/latex
PDF_BUILD = build/pdf
HTML_BUILD = build/html
DOCX_BUILD = build/docx
ODT_BUILD = build/odt
EPUB_BUILD = build/epub
MD_BUILD = build/md
all: html pdf docx odt
# ---------------------------------------------
# Globals
# ---------------------------------------------
bootstrap:
mkdir -p conf
cp -r templates/pandoc.yaml conf/pandoc.yaml
cp -r templates/style.css conf/style.css
cp -r templates/style_epub.css conf/style_epub.css
# ---------------------------------------------
# LATEX PHASE (Pandoc → LaTeX)
# ---------------------------------------------
latex: bootstrap
rm -rf $(LATEX_BUILD)
mkdir -p $(LATEX_BUILD)/lib/img
mkdir -p $(LATEX_BUILD)/lib/diag
# Assets
cp -r lib/img/* $(LATEX_BUILD)/lib/img/
@if [ -d lib/diag ]; then cp -r lib/diag/* $(LATEX_BUILD)/lib/diag/ 2>/dev/null || true; fi
# Metadata replacement
@scripts/replace-metadata.sh $(METADATA) templates/header.tex conf/header.tex
@scripts/replace-metadata.sh $(METADATA) templates/latex.yaml conf/latex.yaml
@scripts/replace-metadata.sh $(METADATA) templates/frontmatter.tex conf/frontmatter.tex
# Pandoc → LaTeX
$(PANDOC) \
--output=$(LATEX_BUILD)/$(META_NAME).tex \
--metadata=output-file:$(META_NAME) \
--defaults=$(BASE) --defaults=conf/latex.yaml -t latex
# XeLaTeX first pass
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
# ---------------------------------------------
# INDEX PHASE
# ---------------------------------------------
index: latex
cd $(LATEX_BUILD) && \
(test -f $(META_NAME).idx && makeindex $(META_NAME) || true)
# ---------------------------------------------
# PDF PHASE (final XeLaTeX runs)
# ---------------------------------------------
pdf: index
mkdir -p $(PDF_BUILD)
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
cd $(LATEX_BUILD) && $(XELATEX) $(META_NAME).tex
cp $(LATEX_BUILD)/$(META_NAME).pdf $(PDF_BUILD)/$(META_NAME).pdf
@echo "PDF written to: $(PDF_BUILD)/$(META_NAME).pdf"
open $(PDF_BUILD)/$(META_NAME).pdf
# ============================================================
# HTML
# ============================================================
html: bootstrap
rm -rf $(HTML_BUILD)
mkdir -p $(HTML_BUILD)/lib/img $(HTML_BUILD)/lib/diag $(HTML_BUILD)/lib/mathjax $(HTML_BUILD)/conf
cp -r lib/img $(HTML_BUILD)/lib/
cp -r lib/diag $(HTML_BUILD)/lib/
cp -r lib/mathjax $(HTML_BUILD)/lib/
cp conf/style.css $(HTML_BUILD)/conf/
# HTML metadata
scripts/replace-metadata.sh $(METADATA) templates/html.yaml conf/html.yaml
scripts/replace-metadata.sh $(METADATA) templates/frontmatter.html conf/frontmatter.html
# Build HTML
$(PANDOC) --defaults=$(BASE) --defaults=conf/html.yaml \
-o $(HTML_BUILD)/$(META_NAME).html
@echo "Produced $(HTML_BUILD)/$(META_NAME).html"
open $(HTML_BUILD)/$(META_NAME).html
# ============================================================
# DOCX
# ============================================================
docx: bootstrap
rm -rf $(DOCX_BUILD)
mkdir -p $(DOCX_BUILD)
cp templates/docx.yaml conf/docx.yaml
scripts/replace-metadata.sh $(METADATA) templates/frontmatter-docx.md conf/frontmatter-docx.md
$(PANDOC) \
--defaults=$(BASE) \
--defaults=conf/docx.yaml \
-o $(DOCX_BUILD)/$(META_NAME).docx
open $(DOCX_BUILD)/$(META_NAME).docx
# ============================================================
# ODT
# ============================================================
odt: bootstrap
rm -rf $(ODT_BUILD)
mkdir -p $(ODT_BUILD)
cp templates/odt.yaml conf/odt.yaml
scripts/replace-metadata.sh $(METADATA) templates/frontmatter-docx.md conf/frontmatter-docx.md
$(PANDOC) \
--defaults=$(BASE) \
--defaults=conf/odt.yaml \
-o $(ODT_BUILD)/$(META_NAME).odt
open $(ODT_BUILD)/$(META_NAME).odt
# ============================================================
# EPUB
# ============================================================
# FIXME: Needs work before release
#
# epub:
# rm -rf $(EPUB_BUILD)
# mkdir -p $(EPUB_BUILD)/media
# scripts/replace-metadata.sh $(METADATA) templates/epub.yaml conf/epub.yaml
# scripts/replace-metadata.sh $(METADATA) templates/frontmatter.html conf/frontmatter.html
# $(PANDOC) --defaults=$(BASE) --defaults=conf/epub.yaml \
# -o $(EPUB_BUILD)/$(META_NAME).epub
# @echo "Produced $(EPUB_BUILD)/$(META_NAME).epub"
# ============================================================
# MARKDOWN
# ============================================================
markdown: bootstrap
rm -rf $(MD_BUILD)
mkdir -p $(MD_BUILD)
cp -r lib/img $(MD_BUILD)/lib/
cp -r lib/diag $(MD_BUILD)/lib/
cp -r lib/mathjax $(MD_BUILD)/lib/
scripts/replace-metadata.sh $(METADATA) templates/markdown.yaml conf/markdown.yaml
scripts/replace-metadata.sh $(METADATA) templates/frontmatter-md.html conf/frontmatter-md.html
$(PANDOC) --defaults=$(BASE) --defaults=conf/markdown.yaml \
-o $(MD_BUILD)/$(META_NAME).md
@echo "Produced $(MD_BUILD)/$(META_NAME).md"
open $(MD_BUILD)/$(META_NAME).md
# ============================================================
# CLEAN
# ============================================================
clean:
rm -rf build
rm -rf conf