diff options
Diffstat (limited to 'common/Makefile.common')
-rw-r--r-- | common/Makefile.common | 117 |
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 $< |