#################### 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 $$(