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
97
|
#################### Variables.
OUTDIR = public
dirname = $(patsubst %/,%,$(dir $(1)))
dirnames = $(sort $(call dirname,$(1)))
languages = en
languages_folders = $(foreach l,$(languages),$(OUTDIR)/$(l))
pages_src = $(filter-out template.html,$(wildcard *.html)) \
$(foreach l,$(languages), \
$(filter-out $(l)/template.html,$(wildcard $(l)/*.html)))
pages = $(foreach p,$(pages_src),$(OUTDIR)/$(p))
members_src = $(wildcard *.membre.in \
$(foreach l,$(languages),$(l))/*.membre.in)
members_pages = $(patsubst %.membre.in,$(OUTDIR)/%.html,$(members_src))
feeds_src = feed.xml $(foreach l,$(languages), \
$(l)/feed.xml)
feeds = $(foreach f,$(feeds_src),$(OUTDIR)/$(f))
images = $(foreach img,$(shell find images -type f),$(OUTDIR)/$(img))
images_folders = $(call dirnames,$(images))
stylesheets = $(foreach img,$(shell find stylesheets -type f),$(OUTDIR)/$(img))
stylesheets_folders = $(call dirnames,$(stylesheets))
fonts = $(foreach font,$(shell find fonts -type f),$(OUTDIR)/$(font))
fonts_folders = $(call dirnames,$(fonts))
scripts = $(foreach img,$(shell find scripts -type f),$(OUTDIR)/$(img))
scripts_folders = $(call dirnames,$(scripts))
#################### Top-level targets.
# Building:
.PHONY: all clean site
# Maintenance:
.PHONY: feeds upload
#################### Recipes.
all: site
feeds:
./admin/feeds/build-feeds.sh $(feeds_src)
upload: site
./upload.sh $(OUTDIR)
clean:
-rm -r $(OUTDIR)
site: $(pages) $(members_pages) $(feeds) $(images) $(stylesheets) $(fonts) $(scripts)
$(images) $(stylesheets) $(fonts) $(scripts) $(feeds): $(OUTDIR)/%: %
cp $< $@
.SECONDEXPANSION:
# 🔪 HACK ATTACK 🔪
# Ideally I'd like to just stick $$(<D)/template.html in the
# prerequisite list, but unlike $$(@D), $$(<D) seems to expand to
# nothing. No idea if that's a bug or if I'm just Doing It Wrong.
langdir = .
$(OUTDIR)/en/%: langdir = en
$(pages): $(OUTDIR)/%.html: %.html %.sh $$(langdir)/template.html settings.sh
./build.sh $< $*.sh $(langdir)/template.html $(OUTDIR) $*.html
$(members_pages): $(OUTDIR)/%.html: %.membre.in build-member.sh $$(langdir)/template.html settings.sh
./build-member.sh $< $(langdir)/template.html $(OUTDIR) $*.html
$(OUTDIR)/quatuor.html: quatuor.md
$(OUTDIR)/programmes.html: programs.in
$(OUTDIR)/concerts.html: concerts.in
$(OUTDIR)/légal.html: légal.md
$(OUTDIR)/plan.html: plan.md
$(OUTDIR)/en/quartet.html: en/quartet.md
$(OUTDIR)/en/programs.html: en/programs.in
$(OUTDIR)/en/concerts.html: en/concerts.in
$(OUTDIR)/en/legal.html: en/legal.md
$(OUTDIR)/en/sitemap.html: en/sitemap.md
# Rules for automatic, incremental folder creation.
# Our lists of target directories are created from the lists of leaf
# resources; some intermediate directories that only hold subdirs do
# not appear in these lists. Work around that with -p.
$(OUTDIR) $(languages_folders) $(images_folders) $(stylesheets_folders) $(fonts_folders) $(scripts_folders):
mkdir -p $@
$(feeds) $(images) $(stylesheets) $(fonts) $(scripts) $(pages) $(members_pages): | $$(@D)
|