Makefile: Rewrite to be less awful.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 25 Sep 2020 01:58:42 +0000 (02:58 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 25 Sep 2020 01:58:42 +0000 (02:58 +0100)
Makefile

index 96a6d44..f5045ea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,40 +1,78 @@
-## Makefile for texmf stuff
+### -*-makefile-*-
+### Makefile for texmf stuff
 
-texmf = $(HOME)/texmf
-bibtexdir = $(texmf)/bibtex
-bibdir = $(bibtexdir)/bib
-bstdir = $(bibtexdir)/bst
-texdir = $(texmf)/tex
-latexdir = $(texdir)/latex
-fontinstdir = $(texdir)/fontinst
+all::
+.PHONY: all
+
+install::
+uninstall::
+.PHONY: install uninstall
+
+clean::
+.PHONY: clean
+
+.SECONDEXPANSION: #sorry
+
+V                      ?= 0
+if_v                    = $(call if_v_$V,$1,$2)
+if_v_0                  = $1
+if_v_1                  = $2
+V_AT                    = $(call if_v,@,)
+v_tag                   = \
+       $(call if_v,@printf "  %-8s %s\n" "$1" "$(or $2,$@)";,)
+
+texmfdir                = $(HOME)/texmf
+
+INSTALLDIRS            += bib bst
+bibtexdir               = $(texmfdir)/bibtex
+bibdir                  = $(bibtexdir)/bib
+bstdir                  = $(bibtexdir)/bst
+
+INSTALLDIRS            += latex
+texdir                  = $(texmfdir)/tex
+latexdir                = $(texdir)/latex
+
+INSTALLDIRS            += fontinst
+fontinstdir             = $(texdir)/fontinst
 
 default: all
 
-INSTALL_TARGETS = \
-       $(latexdir)/po.sty \
-       $(latexdir)/babelbst.tex $(bstdir)/mdwalpha.bst \
-       $(bibdir)/mdw-crypto.bib $(bibdir)/mdw-fixes.bib \
-       $(fontinstdir)/zrhax.mtx \
-       $(fontinstdir)/zrmhax.mtx \
-       $(fontinstdir)/zrmkern.mtx \
-       $(fontinstdir)/zrvhax.mtx \
-       $(fontinstdir)/zryhax.mtx
-
-install: $(INSTALL_TARGETS) $(texmf)/ls-R
-all: babelbst.tex mdwalpha.bst
-
-$(texmf)/ls-R: $(INSTALL_TARGETS); mktexlsr $(texmf)
-$(texdir) $(latexdir) $(bibtexdir) $(bibdir) $(bstdir) $(fontinstdir): %:
-       mkdir -p $@
-$(latexdir)/%: % $(latexdir); cp $< $@
-$(fontinstdir)/%: % $(fontinstdir); cp $< $@
-$(bibdir)/%: % $(bibdir); cp $< $@
-$(bstdir)/%: % $(bstdir); cp $< $@
-
-babelbst.tex mdwalpha.bst: mdwalpha.dbj
-       rm -f babelbst.tex mdwalpha.bst
-       tex '\let\ifbatching\iftrue \input mdwalpha.dbj'
-
-clean:; rm -f mdwalpha.bst babelbst.tex *.log *.bix
-
-.PHONY: all install clean
+latex_FILES            += po.sty
+latex_FILES            += babelbst.tex
+
+bib_FILES              += mdw-crypto.bib mdw-fixes.bib
+bst_FILES              += mdwalpha.bst
+
+fontinst_FILES         += zrmkern.mtx
+fontinst_FILES         += zrhax.mtx zrmhax.mtx zrvhax.mtx zryhax.mtx
+
+CLEANFILES             += *.log
+
+TARGETS                        += babelbst.tex mdwalpha.bst
+CLEANFILES             += *.bix
+babelbst.tex: mdwalpha.bst
+mdwalpha.bst: mdwalpha.dbj
+       $(V_AT)rm -f babelbst.tex mdwalpha.bst
+       $(call v_tag,TEX)tex \
+               $(call if_v,>/dev/null --interaction=batchmode) \
+               '\let\ifbatching\iftrue \input mdwalpha.dbj'
+
+INSTALL_RULES           = $(foreach d,$(INSTALLDIRS), install/$d)
+install:: $(INSTALL_RULES)
+       mktexlsr $(texmfdir)
+$(INSTALL_RULES): install/%: $$($$*_FILES)
+       $(V_AT)mkdir -p $(DESTDIR)$($*dir)
+       $(call v_tag,INST,$($*dir): $($*_FILES))\
+               cp $+ $(DESTDIR)$($*dir)/
+.PHONY: $(INSTALL_RULES)
+
+UNINSTALL_RULES                 = $(foreach d,$(INSTALLDIRS), uninstall/$d)
+uninstall:: $(UNINSTALL_RULES)
+       mktexlsr $(texmfdir)
+$(UNINSTALL_RULES): uninstall/%: $$($$*_FILES)
+       $(call v_tag,RM,$($*dir): $($*_FILES))\
+               rm -f $(foreach f,$($*_FILES), $(DESTDIR)$($*dir)/$f)
+.PHONY: $(UNINSTALL_RULES)
+
+all:: $(TARGETS)
+clean::; rm -f $(CLEANFILES) $(TARGETS)