.PHONY: default docs clean # Adapted from https://dev.to/eugenebabichenko/generating-pretty-version-strings-including-nightly-with-git-and-makefiles-48p3 DIRTY=$(shell git status --porcelain | head -1 | sed 's/.*/-dirty/g') COMMIT=$(shell git rev-parse --short HEAD) DATE=$(shell git log -1 --format=%cd --date=format:"%Y%m%d") LAST_TAGGED_COMMIT=$(shell git rev-list --abbrev-commit --tags --max-count=1) LAST_TAG=$(shell git describe --abbrev=0 --tags $(LAST_TAGGED_COMMIT) 2>/dev/null || true) PATCH=$(patsubst %,-%-$(DATE),$(filter-out $(COMMIT),$(LAST_TAGGED_COMMIT))) VERSION=$(LAST_TAG:v%=%)$(PATCH)$(DIRTY) default: all # List of documents to produce from markdown DOCUMENTS=README HTML_DOCS=$(patsubst %,%.html,$(DOCUMENTS)) PDF_DOCS=$(patsubst %,%.pdf,$(DOCUMENTS)) all: docs docs: $(HTML_DOCS) $(PDF_DOCS) %.html: %.md sed 's/%VERSION%/$(VERSION)/g' $^ | multimarkdown -t html > $@ %.pdf: %.md sed 's/%VERSION%/$(VERSION)/g' $^ | multimarkdown -t latex > $*.tex pdflatex $*.tex pdflatex $*.tex -rm $*.aux $*.toc $*.log $*.tex $*.out clean: -rm $(HTML_DOCS) $(PDF_DOCS) print-%: @echo '$*: $($*)'