summaryrefslogtreecommitdiffhomepage
path: root/GNUmakefile
blob: 1537cdee004c76dbfda5c394c7a7bb42d7def9aa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
MAKEFLAGS := -j$(shell nproc)

# Eurozone coin and -banknote types
eznotes := 5e 10e 20e 50e 100e 200e 500e
ezcoins := 1c 2c 5c 10c 20c 50c 1e 2e
ezcodes := $(shell \
	grep -Eo '^[A-Z]{2}' data/coins \
	| sort                          \
	| uniq                          \
	| tr A-Z a-z                    \
)

# Source files that aren’t dynamically generated
sources := \
	$(shell find src -type f -name 'index.gsp') \
	$(shell find src -type f -name '*.css') \
	$(shell find src -type f -name '*.svg') \
	$(shell find src -type f -name '*.woff2')

# Different euro coin and -banknote page types
eurocc := $(ezcodes:%=out/euro/%/index.html)
eurocd := $(ezcoins:%=out/euro/%/index.html)
eurond := $(eznotes:%=out/euro/%/index.html)
euront := out/euro/tn/index.html

# Output files we want to generate
outputs := $(sources:%.gsp=%.html)
outputs := $(outputs:src/%=out/%)
outputs := $(outputs) $(eurocc) $(eurocd) $(eurond) $(euront)

# Folders we need to generate before the files.  The sort function is used to
# remove duplicates.
outdirs := $(sort $(dir $(outputs)))

# Common files that (almost) all *.gsp files depend on
gspdeps := lib.m4 src/nav.gsp src/head.gsp src/foot.gsp src/table-key.gsp

# Dependencies for certain /euro files
euroxyzdeps := src/euro/index.xyz.gsp src/euro/nav.xyz.gsp data/country-info
euroccdeps := $(subst xyz,ccoins,$(euroxyzdeps)) data/coins data/ccs data/errors
eurocddeps := $(subst xyz,dcoins,$(euroxyzdeps)) data/coins
euronddeps := $(subst xyz,dnotes,$(euroxyzdeps)) data/notes data/note-info
eurotndeps := src/euro/index.tnotes.gsp src/euro/nav.dnotes.gsp data/notes

# Macro to get a countries demonym from their country code
demonym = $(shell awk '$$1 == toupper("$1") { print $$2 }' data/country-info)

# Macros to handle dependencies for world pages
wpath = $(if $(filter $2,o),\
	out/world/$(if $(filter $2,c),coins,notes)/$1/index.html,\
	src/world/$(if $(filter $2,c),coins,notes)/$1/index.gsp\
)
wout = $(foreach x,$1,$(call wpath,$x,o $2))
_wdeps = $(wildcard data/world/*.$(if $(filter $1,br),bra,$1))
wdeps = $(call wpath,$1,$2) $(call _wdeps,$1) $(gspdeps)

all: $(outdirs) $(outputs)

$(outdirs)&:
	mkdir -p $(outdirs)

$(call wout,ez): $(call wdeps,ez)
out/%.html: src/%.gsp $(gspdeps)
	m4 -P lib.m4 $< | gsp >$@

$(eurocc): out/euro/%/index.html: $(gspdeps) $(euroccdeps)
	m4 -P -D__coins -D__code=$* -D__demonym=$(call demonym,$*) \
		lib.m4 src/euro/index.ccoins.gsp | gsp >$@

$(eurocd): out/euro/%/index.html: $(eurocddeps) $(gspdeps)
	m4 -P -D__coins -D__denom=$* lib.m4 $< | gsp >$@
$(eurond): out/euro/%/index.html: $(euronddeps) $(gspdeps)
	m4 -P -D__notes -D__denom=$* lib.m4 $< | gsp >$@

$(euront): out/euro/%/index.html: $(eurotndeps) $(gspdeps)
	m4 -P -D__notes lib.m4 $< | gsp >$@

$(call wout,br,c): $(call wdeps,br,c)
$(call wout,us,c): $(call wdeps,us,c)
$(call wout,br us,c):
	m4 -P -D__coins lib.m4 $< | gsp >$@

out/%: src/%
	cp $< $@

check:
	LANG=en_US.UTF-8 find src -name '*.gsp' -exec \
	     aspell --home-dir=./ --ignore-case check {} \;

clean:
	rm -rf out

serve:
	darkhttpd out --daemon

.PHONY: all check clean serve