### name: Makefile ### synopsis: Build `synthslant' style file and documentation ### author: Dr. Christoph L. Spiel ### GNU make version: 4.3 SHELL := /bin/sh BASE64 := base64 BASE64_FLAGS := DVIPDFMX := dvipdfmx DVIPDFMX_FLAGS := DVIPS := dvips DVIPS_FLAGS := -d1 # debug \special{} LATEX := /usr/bin/env max_print_line=2147483647 pdflatex LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode LATEX_RERUN_TRIGGER := '^Package rerunfilecheck Warning: File [^ ]* has changed' LATEX_WARNING := '^LaTeX (|[A-Za-z0-9_]* )Warning:' MAKEINDEX := makeindex MAKEINDEX_FLAGS := -q METAPOST := mpost METAPOST_FLAGS := -file-line-error -interaction=nonstopmode -tex=latex SPELLCHECK := aspell SPELLCHECK_FLAGS := \ --add-tex-command='citenum p' --add-tex-command='code p' \ --add-tex-command='Cref p' --add-tex-command='cref p' \ --add-tex-command='cs p' \ --add-tex-command='DescribeEnv p' --add-tex-command='DescribeMacro p' \ --add-tex-command='marg p' --add-tex-command='meta p' \ --add-tex-command='oarg p' \ --lang=en_US --mode=tex SOURCE_FILES := LICENSE Makefile synthslant.dtx synthslant.ins .PHONY: all all: sty pdf .PHONY: sty sty: synthslant.sty .PHONY: pdf pdf: doc gauge .PHONY: doc doc: synthslant.pdf .PHONY: gauge gauge: synthslant-gauge.pdf .PHONY: cpio cpio: cd ..; \ echo $(addprefix synthslant/,$(SOURCE_FILES)) | \ cpio -o | \ gzip > "synthslant-$$(date +%Y-%m-%d).cpio.gz" .PHONY: tar tar: cd ..; \ tar czf "synthslant-$$(date +%Y-%m-%d).tar.gz" \ $(addprefix synthslant/,$(SOURCE_FILES)) .PHONY: clean clean: $(RM) ./*.aux ./*.brf ./*.dvi ./*.glg ./*.glo ./*.gls $(RM) ./*.hd ./*.idx ./*.ilg ./*.ind ./*.loe ./*.lof ./*.log ./*.lot $(RM) ./*.mp ./*.mps ./*.mpx ./*.out ./*.pdf ./*.ps ./*.toc $(RM) mptextmp.* mpxerr.tex $(RM) README README.html RELEASE-HOWTO RELEASE-HOWTO.html $(RM) compare-with-the-gimp.eps compare-with-the-gimp.png .PHONY: mostlyclean mostlyclean: clean .PHONY: maintainer-clean maintainer-clean: mostlyclean $(RM) ./*.base64 ./*.ist ./*.mp ./*.sty ./*.tex .PHONY: perf perf: synthslant-gauge.tex synthslant.sty perf stat --repeat=10 -- $(LATEX) $(LATEX_FLAGS) -interaction batchmode -draftmode $< .PHONY: tool-check tool-check: @printf '*** LATEX = "%s"\n' '$(LATEX)' $(LATEX) --version @printf '\n\n*** MAKEINDEX = "%s"\n' '$(MAKEINDEX)' $(MAKEINDEX) < /dev/null @printf '\n\n*** METAPOST = "%s"\n' '$(METAPOST)' $(METAPOST) --version @printf '\n*** BASE64 = "%s"\n' '$(BASE64)' $(BASE64) --version @printf '\n\nTool check passed.\n' .PHONY: spell-check spell-check: @sed -e '\##d' \ -e '\##,\##d' < synthslant.dtx | \ sed -e 's/^ *%%*//' | \ sed -e 's/\\-//g' -e 's/|[^|]*|/ /g' | \ $(SPELLCHECK) $(SPELLCHECK_FLAGS) list | \ sort | uniq | fmt | sed -e 's/ / /g' .PHONY: update-docs update-docs: pdf cp -f synthslant.pdf synthslant-gauge.pdf docs define HELP_SCREEN Selected Phony Targets ---------------------- all: Make everything there is to make. This is the .DEFAULT_GOAL. clean: Remove some products. cpio: In the parent directory create a cpio(1) archive of the project source files whose name is time-stamped. doc: Build "synthslant.pdf" the Syntslant documentation. gauge: Build "synthslant-gauge.pdf" the Syntslant gauge and example file. maintainer-clean: Remove every product file that can be rebuilt even if uncommon tools are necessary. mostlyclean: Remove some more products than clean:. pdf: Build doc: and gauge:. sty: Only extract "synthslant.sty" from "synthslant.dtx". This operation requires LaTeX (-> $(LATEX)) and nothing else. tar: In the parent directory create a tar(1) file of the project source files whose name is time-stamped. tool-check: Check whether some of the required tools to build the project are available. Selected Implicit Rules ----------------------- %.dvi %.pdf: %.dtx Run LaTeX or pdfLaTeX (-> $(LATEX)) on dtx source until a fix-point is reached. %.dvi %.pdf: %.tex Run LaTeX or pdfLaTeX (-> $(LATEX)) on tex file until a fix-point is reached. %.mx.pdf: %.dvi Convert dvi to pdf via dvipdfmx (-> $(DVIPDFMX)). %.ps: %.dvi Convert dvi to ps via dvips (-> $(DVIPS)). Some Explicit Rules ------------------- README.html: Convert "README.md" to html. Requires markdown(1). README: Convert "README.html" to plain text. Requires w3m(1). endef .PHONY: help help: $(info $(HELP_SCREEN)) .PRECIOUS: %.mps define MAKE_INDEX_AND_GLOSSARY sed -e '/@/d' < $*.idx > ,$*.idx; mv ,$*.idx $*.idx; \ $(MAKEINDEX) $(MAKEINDEX_FLAGS) -s synthslant.ist -t $*.ilg -o $*.ind $*.idx; \ $(MAKEINDEX) $(MAKEINDEX_FLAGS) -s gglo.ist -t $*.glg -o $*.gls $*.glo endef define GREP_LATEX_WARNINGS test -e $*.log && grep -E $(LATEX_WARNING) $*.log | uniq endef %.dvi %.pdf: %.dtx $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.gls ./$*.glo ./$*.lof ./$*.lot ./$*.toc $(LATEX) $(LATEX_FLAGS) -draftmode $< $(MAKE_INDEX_AND_GLOSSARY) $(LATEX) $(LATEX_FLAGS) $< $(MAKE_INDEX_AND_GLOSSARY) while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \ do \ $(LATEX) $(LATEX_FLAGS) $<; \ $(MAKE_INDEX_AND_GLOSSARY); \ done $(GREP_LATEX_WARNINGS) %.dvi: LATEX=latex %.dvi %.pdf: %.tex $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.lof ./$*.lot ./$*.toc $(LATEX) $(LATEX_FLAGS) -draftmode $< $(LATEX) $(LATEX_FLAGS) $< while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \ do \ $(LATEX) $(LATEX_FLAGS) $<; \ done $(GREP_LATEX_WARNINGS) %.mx.pdf: %.dvi $(DVIPDFMX) $(DVIPDFMX_FLAGS) -o $@ $< %.ps: %.dvi $(DVIPS) $(DVIPS_FLAGS) -o $@ $< %.mps: %.mp $(METAPOST) -s 'outputtemplate="%j.mps"' $(METAPOST_FLAGS) $< %.eps: %.png convert $< -compress lzw eps2:$@ %.html: %.md markdown $< > $@ %: %.html w3m -cols 79 $< > $@ synthslant.sty synthslant.ist synthslant-gauge.tex \ compare-with-the-gimp.png.base64 shear-transform.mp title.mp: \ synthslant.ins synthslant.dtx $(LATEX) $(LATEX_FLAGS) $< synthslant.pdf: \ synthslant.dtx \ compare-with-the-gimp.png \ shear-transform.mps \ title.mps \ | synthslant.sty synthslant.dvi: \ synthslant.dtx \ compare-with-the-gimp.eps \ shear-transform.mps \ title.mps compare-with-the-gimp.png: compare-with-the-gimp.png.base64 $(BASE64) $(BASE64_FLAGS) --decode $< > $@ shear-transform.mps: shear-transform.mp title.mps: title.mp ## compare-with-the-gimp.png: compare-with-the-gimp.orig.png ## convert $< -depth 8 -resize 50% -set colorspace Gray -separate -average $@ ## ## compare-with-the-gimp.png.base64: compare-with-the-gimp.png ## $(BASE64) $(BASE64_FLAGS) $< > $@