OUTDIR = public dirname = $(patsubst %/,%,$(dir $(1))) dirnames = $(sort $(call dirname,$(1))) pages_src = $(filter-out template.html,$(wildcard *.html)) pages = $(foreach p,$(pages_src),$(OUTDIR)/$(p)) members_src = $(wildcard *.membre.in) members_pages = $(patsubst %.membre.in,$(OUTDIR)/%.html,$(members_src)) feeds = $(wildcard *.xml) resources_src = $(feeds) resources = $(foreach f,$(resources_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)) .PHONY: all clean site all: site clean: -rm -r $(OUTDIR) site: $(pages) $(members_pages) $(resources) $(images) $(stylesheets) $(resources) $(images) $(stylesheets): $(OUTDIR)/%: % cp $< $@ $(pages): $(OUTDIR)/%.html: %.html %.sh template.html ./build.sh $< $*.sh $@ $(members_pages): $(OUTDIR)/%.html: %.membre.in build-member.sh template.html ./build-member.sh $< $@ $(OUTDIR)/quatuor.html: quatuor.md $(OUTDIR)/programmes.html: programs.in # Rules for automatic, incremental folder creation. # ⚠ Fail for intermediate folders which hold only subdirs. $(OUTDIR) $(images_folders) $(stylesheets_folders): mkdir $@ .SECONDEXPANSION: $(resources) $(images) $(stylesheets) $(pages) $(members_pages): | $$(@D)