SRCS = $(wildcard *.html *.xml *.txt *.css *.map *.pdf)

ZSTD = $(patsubst %,%.zst,$(SRCS))
BR = $(patsubst %,%.br,$(SRCS))
GZ = $(patsubst %,%.gz,$(SRCS))

.PHONY: all
all: $(ZSTD) $(BR) $(GZ)

define MAKETARGET

$(1).br: $(1).xxhash
	brotli -f $(1)
	touch $(1).br

$(1).zst: $(1).xxhash
	zstd -f -19 $(1)
	touch $(1).zst

$(1).gz: $(1).xxhash
	zopfli $(1)
	touch $(1).gz

# https://github.com/gohugoio/hugo/issues/10842
$(1).xxhash: $(1)
	current=$$$$(xxhsum $$< | cut -d' ' -f1); \
	if [ ! -f $$< ] || [ "$$$$(cat $$@ 2>/dev/null)" != "$$$$current" ]; then \
		echo "$$$$current" > $$@; \
	fi

endef

$(foreach f,$(SRCS),$(eval $(call MAKETARGET,$(f))))
