### -*-makefile-*- ###-------------------------------------------------------------------------- ### User-serviceable parts. ## Source directory. srcdir := $(dir $(lastword $(MAKEFILE_LIST))) ## Installation directories. prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin datadir = ${prefix}/share mandir = ${datadir}/man man1dir = ${mandir}/man1 ## User configuration. -include config.mk ###-------------------------------------------------------------------------- ### Machinery. ## Preliminaries. all: clean:: .PHONY: all clean .SECONDEXPANSION: force: .PHONY: force VPATH = $(srcdir) ## Layout. INSTDIRS = INSTDIRS += bin bin_FILES = bin_INSTCMD = install -t$(bindir) -m755 INSTDIRS += man1 man1_FILES = man1_INSTCMD = install -t$(man1dir) -m644 ## Version number. VERSION := $(shell git describe --always --abbrev=4 --dirty=+) -include version-stamp.mk ifneq ($(VERSION),$(OLD_VERSION)) FORCE_VERSION = force else FORCE_VERSION = endif version-stamp.mk: $(FORCE_VERSION) echo "OLD_VERSION = $(VERSION)" >$@.new && mv $@.new $@ clean::; rm version-stamp.mk ## The main program. bin_FILES += dkim-keys dkim-keys: dkim-keys.in version-stamp.mk sed 's/@VERSION@/$(VERSION)/g' $< >$@.new && \ chmod +x $@.new && mv $@.new $@ ## The manual. man1_FILES += dkim-keys.1 dkim-keys.1: dkim-keys.in version-stamp.mk pod2man -s1 -dkim-keys -r"$(VERSION)" \ -c"distorted.org.uk utilities" \ $< >$@.new && \ mv $@.new $@ ## Building. TARGETS = $(foreach d,$(INSTDIRS), $($d_FILES)) all: $(TARGETS) clean::; rm -f $(TARGETS) ## Installation. %/:; install -d $@ INSTALLS = $(addprefix install/, $(INSTDIRS)) install: $(INSTALLS) $(INSTALLS): install/%: $$($$*_FILES) | $$($$*dir)/ $($*_INSTCMD) $+ UNINSTALLS = $(addprefix uninstall/, $(INSTDIRS)) uninstall: $(UNINSTALLS) $(UNINSTALLS): uninstall/%: rm -f $(addprefix $($*dir)/,$($*_FILES)) .PHONY: install $(INSTALLS) uninstall $(UNINSTALLS)