openpgp-notes/book/Makefile
David Runge 43b6080fbe
Add make target to convert all SVGs to plain SVG before rendering
Adapt HTML and EPUB targets to run conversion target before rendering
EPUB or HTML output.

Fixes https://codeberg.org/openpgp/notes/issues/166

Signed-off-by: David Runge <dave@sleepmap.de>
2023-12-05 16:07:02 +01:00

69 lines
2.6 KiB
Makefile

# SPDX-FileCopyrightText: 2023 The "Notes on OpenPGP" project
# SPDX-License-Identifier: CC0-1.0
#
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
CODESPELL ?= codespell
EBOOK_VIEWER ?= ebook-viewer
EPUBCHECK ?= epubcheck
INKSCAPE ?= inkscape
SPHINXOPTS ?= -W
SPHINXBUILD ?= sphinx-build
LYCHEE ?= lychee
PRINTF ?= printf
RM ?= rm
WATCHEXEC ?= watchexec
SOURCEDIR = source
BUILDDIR = build
# clean build output and also preprocessed/ converted data
clean-all: clean
@$(RM) -rv $(SOURCEDIR)/diag_converted/
# convert all SVG to plain SVGs without metadata and paths instead of text
convert-svg:
for file in $(SOURCEDIR)/diag/*.svg; do if [[ ! -f $(SOURCEDIR)/diag_converted/$$(basename $$file) ]]; then $(INKSCAPE) --export-text-to-path --export-plain-svg --export-filename=$(SOURCEDIR)/diag_converted/$$(basename $$file) $$file; fi; done
epub: convert-svg
@$(SPHINXBUILD) -M epub "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
epub-check: clean epub
@$(EPUBCHECK) "$(BUILDDIR)/epub/"*.epub
# use watchexec to rebuild the EPUB whenever a markdown file changes
# this target kills *any* open instance of calibre's ebook-viewer, that is currently showing OpenPGPforapplicationdevelopers.epub
epub-watch:
@$(WATCHEXEC) --shell bash -e css,md 'make clean epub && ev_pid="$$(pgrep -af "^python3.*ebook-viewer.*OpenPGPforapplicationdevelopers" | cut -f1 -d " ")" && if [[ -n "$$ev_pid" ]]; then kill -9 "$$ev_pid"; fi && $(EBOOK_VIEWER) $(BUILDDIR)/epub/OpenPGPforapplicationdevelopers.epub &'
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
html: convert-svg
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
html-linkcheck: clean html
@$(LYCHEE) "$(BUILDDIR)/html/"*.html
# use watchexec to rebuild the HTML whenever a markdown file changes
html-watch:
@$(WATCHEXEC) --shell bash -e css,md 'make clean html'
# spell check all sources
# NOTE: diagrams are not yet spell checked, but we emit the required changes
codespell:
@$(PRINTF) "The following change suggestions are only warnings! (Please don't fix them)\n"
@$(CODESPELL) source/diag || true
@$(CODESPELL) input/ || true
@$(PRINTF) "The following change suggestions are errors!\n"
@$(CODESPELL) .
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)