Source code
Revision control
Copy as Markdown
Other Tools
SHELL := /bin/bash
BROTLI=brotli
MIMETYPE=mimetype
OPENSSL=openssl
ZSTD=zstd
# RFC 9842 stream headers.
DCB_HEADER=\377DCB
DCZ_HEADER=\136\052\115\030\040\000\000\000
all: \
self-compressed-image-001.png.dcb \
self-compressed-image-001.png.dcz \
self-compressed-style-001.css.dcb \
self-compressed-style-001.css.dcz \
self-compressed-script-001.js.dcb \
self-compressed-script-001.js.dcz \
self-compressed-subframe-001.html.dcb \
self-compressed-subframe-001.html.dcz \
subframe-001-compressed-by-style-001.html.dcb \
subframe-001-compressed-by-style-001.html.dcz \
subframe-001-compressed-by-script-001.html.dcb \
subframe-001-compressed-by-script-001.html.dcz \
dictionary-hashes.js
define generate_dcb
$(eval in=$(1))
$(eval dict=$(2))
$(eval out=$(3))
echo 'Cache-Control: max-age=3600' > $(in).headers
echo 'Vary: available-dictionary,accept-encoding' >> $(in).headers
echo 'Content-Encoding: dcb' > $(out).headers
echo -n 'Content-Type: ' >> $(out).headers
$(MIMETYPE) -b $(in) >> $(out).headers
printf '$(DCB_HEADER)' > $(out)
$(OPENSSL) dgst -sha256 -binary $(dict) >> $(out)
$(BROTLI) --stdout -D $(dict) $(in) >> $(out)
endef
define generate_dcz
$(eval in=$(1))
$(eval dict=$(2))
$(eval out=$(3))
echo 'Cache-Control: max-age=3600' > $(in).headers
echo 'Vary: available-dictionary,accept-encoding' >> $(in).headers
echo 'Content-Encoding: dcz' > $(out).headers
echo -n 'Content-Type: ' >> $(out).headers
$(MIMETYPE) -b $(in) >> $(out).headers
printf '$(DCZ_HEADER)' > $(out)
cp $(dict) /tmp/dcz.dict
$(OPENSSL) dgst -sha256 -binary /tmp/dcz.dict >> $(out)
$(ZSTD) -D /tmp/dcz.dict -f -o /tmp/dcz.zstd $(in)
cat /tmp/dcz.zstd >> $(out)
endef
clean:
rm -f *compressed* *.headers dictionary-hashes.js
self-compressed-%.dcb: %
$(call generate_dcb,$<,$<,$@)
self-compressed-%.dcz: %
$(call generate_dcz,$<,$<,$@)
subframe-001-compressed-by-style-001.html.dcb: subframe-001.html style-001.css
$(call generate_dcb,$<,$(word 2,$^),$@)
subframe-001-compressed-by-style-001.html.dcz: subframe-001.html style-001.css
$(call generate_dcz,$<,$(word 2,$^),$@)
subframe-001-compressed-by-script-001.html.dcb: subframe-001.html script-001.js
$(call generate_dcb,$<,$(word 2,$^),$@)
subframe-001-compressed-by-script-001.html.dcz: subframe-001.html script-001.js
$(call generate_dcz,$<,$(word 2,$^),$@)
dictionary-hashes.js: image-001.png script-001.js style-001.css subframe-001.html
echo "// Automatically generated. Do not edit." > $@
echo "const kDictionaryHashes = {" >> $@
for file in $^; do \
echo -n " '"$$file"': ':" >> $@; \
cat $$file | $(OPENSSL) dgst -binary -sha256 | $(OPENSSL) base64 -A >> $@; \
echo ":'," >> $@; \
done
echo "};" >> $@