aboutsummaryrefslogtreecommitdiff
path: root/common/Makefile.common
diff options
context:
space:
mode:
Diffstat (limited to 'common/Makefile.common')
-rw-r--r--common/Makefile.common117
1 files changed, 117 insertions, 0 deletions
diff --git a/common/Makefile.common b/common/Makefile.common
new file mode 100644
index 0000000..730a994
--- /dev/null
+++ b/common/Makefile.common
@@ -0,0 +1,117 @@
+TEX=$(shell command -v lualatex xelatex | head -n 1)
+SOURCE=.
+MODEL ?= .
+
+SRC =$(wildcard *.rst)
+SVG =$(wildcard content/*.svg)
+
+PDFS = $(SRC:.rst=.pdf)
+INCLUDED_PDF = $(SVG:.svg=.pdf)
+
+all: $(PDFS)
+
+BIBS =$(wildcard *.bib)
+
+DIR = $(sort $(shell find $(SOURCE) -name '*.rst' -print))
+
+# Pick the first file for the given name, either in the path from the model, or
+# in the local path from the source.
+select_file = \
+ $(firstword $(wildcard ./resources/$(1)) $(wildcard $(MODEL)/resources/$1))
+
+
+# Select the files to use in the styles.
+ifeq ($(MODEL),.)
+ $(info Modèle de base)
+
+ SOURCES = $(sort $(filter-out $(FILTERS), $(wildcard $(MODEL)/resources/*.tex) ))
+
+else
+ $(info Modèle surchargé)
+
+ # Remove from the list the elements given in the variable FILTERS
+ NEW_STYLES = $(wildcard resources/*.tex)
+ MODEL_STYLES = $(wildcard $(MODEL)/resources/*.tex)
+ # For each file, extract the name, and sort the list by order.
+ STYLE_NAME = $(sort $(foreach fic,$(NEW_STYLES) $(filter-out $(FILTERS),$(MODEL_STYLES)),$(notdir $(fic))))
+ # Pick the file either in the current directory, or in the model path
+ SOURCES = $(foreach fic,$(STYLE_NAME),$(call select_file,$(fic)))
+
+endif
+
+null :=
+space := $(null) #
+comma := ,
+TEX_STYLE := $(subst $(space),$(comma),$(strip $(SOURCES)))
+TEX_BIBS := $(subst $(space),$(comma),$(strip $(BIBS)))
+
+# Add a variable for specific options to add in the rst2latex command
+#
+EXTRA_RST_OPTIONS ?=
+
+EXTRA_STYLES ?=
+
+# Remove the comments and the empty lines from the module list file
+PACK = $(shell sed -e 's/\#.*$$//' -e '/^\s$$/d' $(MODEL)/resources/modules)
+PACKAGES = $(subst $(space),$(comma),$(strip $(PACK)))
+
+tmp:
+ mkdir tmp
+
+# Hack used to identify the path to the shared configuration in latex.
+tmp/model.tex: | tmp
+ $(file >$@,\def\commonPath{$(MODEL)/../common/})
+
+# Generate the latex file from rst
+tmp/%.tex: %.rst $(INCLUDED_PDF) $(SOURCES) | tmp
+ $$(command -v rst2latex rst2latex.py | head -n 1) \
+ --no-section-subtitles \
+ --table-style=borderless \
+ --use-latex-citations \
+ --use-latex-docinfo \
+ --documentclass=extarticle \
+ --documentoption=12pt,A4,table \
+ --syntax-highlight=short \
+ $(EXTRA_RST_OPTIONS) \
+ --stylesheet=tmp/model.tex,$(PACKAGES),$(subst $(space),$(comma),\$(EXTRA_STYLES)),$(TEX_STYLE) $< $@
+ sed -i -e 's/continued on next page/suite sur la page suivante/;s|^%$$||' $@
+ sed -i -e 's/admonition-/admonition/g' $@
+
+# Generate each pdf with latex
+tmp/%.pdf: tmp/%.tex tmp/model.tex $(BIBS) | tmp
+ set TEXINPUTS=.:$(MODEL):$$(TEXINPUTS)
+ $(TEX) -output-directory tmp $<
+ #bibtex tmp/$*.aux && $(TEX) -output-directory tmp $< || echo "no bib"
+ while grep 'Rerun to get ' tmp/$*.log ; do \
+ $(TEX) --halt-on-error -output-directory tmp $< ;\
+ done
+
+# Put the pdf in the right place
+%.pdf: tmp/%.pdf | tmp
+ cp $< $@
+ # Update mupdf if the process exist, or do nothing.
+ pkill -HUP mupdf || true
+
+.PHONY: clean
+clean:
+ rm -r tmp
+
+# Generate the final PDF document
+# Send a notification to mupdf in order to refresh the document
+%.png: %.pdf
+ gs -dTextAlphaBits=4 -dFirstPage=1 -dLastPage=1 -dBATCH -dNOPAUSE -sDEVICE=png16m -r150 -dUseCropBox -sOutputFile=$@ $<
+
+# Watch mode, which regenerate the documents as soon there is a change in a
+# file.,
+# requires inotifywait (package inotify-tools)
+.PHONY: watch
+watch:
+ while true; do \
+ $(MAKE) all; \
+ inotifywait -qre close_write . ; \
+ done
+
+# Format the pages in order to make them printable in a book
+book: $(PDFS)
+
+ pdfbook2 --no-crop $<