#################################################################################################### # Configuration #################################################################################################### # Build configuration BUILD = build MAKEFILE = Makefile OUTPUT_FILENAME = book METADATA = metadata.yml CHAPTERS = chapters/*.md TOC = --toc --toc-depth 2 METADATA_ARGS = --metadata-file $(METADATA) IMAGES = $(shell find images -type f) TEMPLATES = $(shell find templates/ -type f) COVER_IMAGE = images/cover.png MATH_FORMULAS = --webtex # Chapters content CONTENT = awk 'FNR==1 && NR!=1 {print "\n\n"}{print}' $(CHAPTERS) CONTENT_FILTERS = tee # Use this to add sed filters or other piped commands CONTENT_FILTERS = sed -i '/TOC/d' # Debugging # DEBUG_ARGS = --verbose # Pandoc filtes - uncomment the following variable to enable cross references filter. For more # information, check the "Cross references" section on the README.md file. # FILTER_ARGS = --filter pandoc-crossref # Combined arguments ARGS = $(TOC) $(MATH_FORMULAS) $(METADATA_ARGS) $(FILTER_ARGS) $(DEBUG_ARGS) PANDOC_COMMAND = /usr/bin/pandoc # Per-format options DOCX_ARGS = --standalone --reference-doc templates/docx.docx EPUB_ARGS = --template templates/epub.html --epub-cover-image $(COVER_IMAGE) HTML_ARGS = --template templates/html.html --standalone --to html5 PDF_ARGS = --template templates/pdf.latex --pdf-engine xelatex # Per-format file dependencies BASE_DEPENDENCIES = $(MAKEFILE) $(CHAPTERS) $(METADATA) $(IMAGES) $(TEMPLATES) DOCX_DEPENDENCIES = $(BASE_DEPENDENCIES) EPUB_DEPENDENCIES = $(BASE_DEPENDENCIES) HTML_DEPENDENCIES = $(BASE_DEPENDENCIES) PDF_DEPENDENCIES = $(BASE_DEPENDENCIES) #################################################################################################### # Basic actions #################################################################################################### .PHONY: all all: book .PHONY: book book: epub html pdf docx mdbook .PHONY: clean clean: rm -r $(BUILD) #################################################################################################### # File builders #################################################################################################### .PHONY: epub epub: $(BUILD)/epub/$(OUTPUT_FILENAME).epub .PHONY: html html: $(BUILD)/html/$(OUTPUT_FILENAME).html .PHONY: pdf pdf: $(BUILD)/pdf/$(OUTPUT_FILENAME).pdf .PHONY: docx docx: $(BUILD)/docx/$(OUTPUT_FILENAME).docx .PHONY: mdbook mdbook: mdbook build $(BUILD)/epub/$(OUTPUT_FILENAME).epub: $(EPUB_DEPENDENCIES) mkdir -p $(BUILD)/epub $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(EPUB_ARGS) -o $@ @echo "$@ was built" $(BUILD)/html/$(OUTPUT_FILENAME).html: $(HTML_DEPENDENCIES) mkdir -p $(BUILD)/html $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(HTML_ARGS) -o $@ cp --parent $(IMAGES) $(BUILD)/html/ @echo "$@ was built" $(BUILD)/pdf/$(OUTPUT_FILENAME).pdf: $(PDF_DEPENDENCIES) mkdir -p $(BUILD)/pdf $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(PDF_ARGS) -o $@ @echo "$@ was built" $(BUILD)/docx/$(OUTPUT_FILENAME).docx: $(DOCX_DEPENDENCIES) mkdir -p $(BUILD)/docx $(CONTENT) | $(CONTENT_FILTERS) | $(PANDOC_COMMAND) $(ARGS) $(DOCX_ARGS) -o $@ @echo "$@ was built"