chiark / gitweb /
Makefile: Use order-only prerequisite for making directories.
[distorted-dkim] / Makefile
1 ### -*-makefile-*-
2
3 ###--------------------------------------------------------------------------
4 ### User-serviceable parts.
5
6 ## Installation directories.
7 prefix                   = /usr/local
8 exec_prefix              = ${prefix}
9 bindir                   = ${exec_prefix}/bin
10 datadir                  = ${prefix}/share
11 mandir                   = ${datadir}/man
12 man1dir                  = ${mandir}/man1
13
14 ## User configuration.
15 -include config.mk
16
17 ###--------------------------------------------------------------------------
18 ### Machinery.
19
20 ## Preliminaries.
21 all:
22 clean::
23 .PHONY: all clean
24 .SECONDEXPANSION:
25
26 force:
27 .PHONY: force
28
29 ## Layout.
30 INSTDIRS                 =
31
32 INSTDIRS                += bin
33 bin_FILES                =
34 bin_INSTCMD              = install -t$(bindir) -m755
35
36 INSTDIRS                += man1
37 man1_FILES               =
38 man1_INSTCMD             = install -t$(man1dir) -m644
39
40 ## Version number.
41 VERSION                 := $(shell git describe --always --abbrev=4 --dirty=+)
42 -include version-stamp.mk
43 ifneq ($(VERSION),$(OLD_VERSION))
44   FORCE_VERSION          = force
45 else
46   FORCE_VERSION          =
47 endif
48 version-stamp.mk: $(FORCE_VERSION)
49         echo "OLD_VERSION = $(VERSION)" >$@.new && mv $@.new $@
50
51 ## The main program.
52 bin_FILES               += dkim-keys
53 dkim-keys: dkim-keys.in version-stamp.mk
54         sed 's/@VERSION@/$(VERSION)/g' $< >$@.new && \
55                 chmod +x $@.new && mv $@.new $@
56
57 ## The manual.
58 man1_FILES              += dkim-keys.1
59 dkim-keys.1: dkim-keys.in version-stamp.mk
60         pod2man -s1 -dkim-keys -r"$(VERSION)" \
61                          -c"distorted.org.uk utilities" \
62                         $< >$@.new && \
63                 mv $@.new $@
64
65 ## Building.
66 TARGETS                  = $(foreach d,$(INSTDIRS), $($d_FILES))
67 all: $(TARGETS)
68 clean::; rm -f $(TARGETS)
69
70 ## Installation.
71 %/:; install -d $@
72
73 INSTALLS                 = $(addprefix install/, $(INSTDIRS))
74 install: $(INSTALLS)
75 $(INSTALLS): install/%: $$($$*_FILES) | $$($$*dir)/
76         $($*_INSTCMD) $+
77
78 UNINSTALLS               = $(addprefix uninstall/, $(INSTDIRS))
79 uninstall: $(UNINSTALLS)
80 $(UNINSTALLS): uninstall/%:
81         rm -f $(addprefix $($*dir)/,$($*_FILES))
82 .PHONY: install $(INSTALLS) uninstall $(UNINSTALLS)