# 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 ASSETSDIR = assets SOURCEDIR = source BUILDDIR = build # clean build output and also preprocessed/ converted data clean-all: clean @$(RM) -rv $(SOURCEDIR)/plain_svg/ # convert all SVG to plain SVGs without metadata and paths instead of text convert-svg: for file in $(ASSETSDIR)/inkscape/*.svg $(ASSETSDIR)/drawio/*.svg; do if [[ ! -f $(SOURCEDIR)/plain_svg/$$(basename $$file) ]]; then $(INKSCAPE) --export-text-to-path --export-plain-svg --export-filename=$(SOURCEDIR)/plain_svg/$$(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,html,j2,md,py,svg 'make clean epub && ev_pid="$$(pgrep -af "^python3.*ebook-viewer.*OpenPGP_for_application_developers" | cut -f1 -d " ")" && if [[ -n "$$ev_pid" ]]; then kill -9 "$$ev_pid"; fi && $(EBOOK_VIEWER) $(BUILDDIR)/epub/OpenPGP_for_application_developers.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) --exclude "https://openpgp.dev*" --exclude "https://codeberg.org/openpgp/notes" "$(BUILDDIR)/html/"*.html # use watchexec to rebuild the HTML whenever a markdown file changes html-watch: @$(WATCHEXEC) --shell bash -e css,html,j2,md,py,svg '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)