# whitepaper/Makefile # Generates both undefect. white papers with slug-named output PDFs and HTML. # # make pdf-cwe407 — full CWE-407 cross-ecosystem report (PDF) # make pdf-minecraft — gumyum: Minecraft + javac enterprise edition (PDF) # make html-cwe407 — full CWE-407 report (HTML) # make html-minecraft — gumyum report (HTML) # make all — all PDFs and HTML # make clean — remove slug PDFs and HTML (leaves originals) # # Output slugs: # undefect-cwe407-$(DATE).pdf / .html # undefect-minecraft-enterprise-java-$(DATE).pdf / .html DATE := $(shell date +%Y-%m-%d) PANDOC := pandoc DOT := dot PYTHON := python3 SLUG_CWE407 := undefect-cwe407-$(DATE).pdf SLUG_MINECRAFT := undefect-minecraft-enterprise-java-$(DATE).pdf HTML_CWE407 := undefect-cwe407-$(DATE).html HTML_MINECRAFT := undefect-minecraft-enterprise-java-$(DATE).html # ── Outreach briefs ─────────────────────────────────────────────────────────── OUTREACH_DIR := outreach OUTREACH_CSS := $(OUTREACH_DIR)/outreach-style.css OUTREACH_HEADER := $(OUTREACH_DIR)/header-body.html OUTREACH_BRIEFS := \ javac typescript ghc scala3 scala rustc erlang-otp swipl go kotlin swift \ gcc llvm v8 spidermonkey crystal julia lua perl5 php ruby r elixir nim \ postgresql mongodb mysql mariadb redis valkey cockroachdb tidb clickhouse \ duckdb elasticsearch opensearch solr \ scylladb yugabyte foundationdb rocksdb leveldb lmdb cassandra ceph memcached \ frrouting bird onos odl httpd nginx haproxy openvpn zeek curl libgit2 vlc \ traefik caddy varnish ovs \ tor solidity minecraft geth substrate \ build-tools hive spark kafka flink pulsar nats \ storm zookeeper nifi artemis activemq camel \ hudi iceberg druid pinot trino starrocks doris kylin \ spring micronaut quarkus tomcat jetty \ django rails pyramid bottle fastapi sinatra hanami phoenix gin fiber \ hibernate mybatis efcore sqlalchemy peewee sequelize typeorm doctrine \ seaorm diesel gorm exposed \ godot pygame sfml threejs angelscript dry tinkerpop \ neo4j janusgraph dgraph \ ogre bullet bevy libgdx allegro5 sdl2 sdl3 panda3d box2d \ raylib love2d \ kubernetes nomad consul envoy istio cilium linkerd2 containerd moby \ terraform ansible saltstack cfengine puppet jenkins bazel buildkit luigi \ helm opentofu pulumi podman \ prometheus otel-collector grafana victoria-metrics \ synapse dendrite element-web \ weechat unrealircd jvb ejabberd asterisk simplex-chat rocketchat \ mattermost jami postfix opensmtpd dovecot linphone freeswitch \ numpy pandas sklearn pytorch-geometric \ celery ray prefect airflow argo metaflow kubeflow optuna \ wasmtime wasmer \ ninja mesa meson spirv-cross \ linux hadoop keystone \ grpc tokio actix-web nestjs \ rubocop solargraph networkx rabbitmq kicad octave \ presto webpack thrift gradle pip cmake \ openssl mbedtls wolfssl \ ros2 opencv open3d vtk graphhopper valhalla \ ffmpeg gstreamer \ igraph nova neutron \ jsc wireshark nmap \ hbase OUTREACH_PDFS := $(patsubst %,$(OUTREACH_DIR)/pdf/%.pdf,$(OUTREACH_BRIEFS)) OUTREACH_MD5 := $(OUTREACH_DIR)/MD5SUMS PANDOC_OUTREACH_FLAGS := \ --pdf-engine=wkhtmltopdf \ --css=$(OUTREACH_CSS) \ --include-before-body=$(OUTREACH_HEADER) \ --resource-path=$(OUTREACH_DIR) \ -V margin-top=22mm -V margin-bottom=15mm \ -V margin-left=20mm -V margin-right=20mm $(OUTREACH_DIR)/pdf/%.pdf: $(OUTREACH_DIR)/%.md $(OUTREACH_CSS) $(OUTREACH_HEADER) @mkdir -p $(OUTREACH_DIR)/pdf $(PANDOC) $< $(PANDOC_OUTREACH_FLAGS) \ --metadata title="$(notdir $(basename $<)) — CWE-407 Disclosure Brief" \ -o $@ @echo "==> $@ ($$(du -h $@ | cut -f1))" $(OUTREACH_MD5): $(OUTREACH_PDFS) cd $(OUTREACH_DIR)/pdf && md5sum *.pdf > ../MD5SUMS @echo "==> $(OUTREACH_MD5)" pdf-outreach: $(OUTREACH_PDFS) $(OUTREACH_MD5) .PHONY: all pdf-cwe407 pdf-minecraft html-cwe407 html-minecraft pdf-outreach visuals clean all: html-cwe407 html-minecraft pdf-cwe407 pdf-minecraft pdf-outreach # ── Full CWE-407 white paper ────────────────────────────────────────────────── # Source: full-paper.md + pdf-style.css (ChunkFive embedded, no external deps) $(SLUG_CWE407): full-paper.md pdf-style.css $(PANDOC) full-paper.md \ --pdf-engine=wkhtmltopdf \ --css=pdf-style.css \ --resource-path=. \ -V margin-top=20mm \ -V margin-bottom=20mm \ -V margin-left=20mm \ -V margin-right=20mm \ -o $(SLUG_CWE407) @echo "==> $(SLUG_CWE407) ($$(du -h $(SLUG_CWE407) | cut -f1))" pdf-cwe407: $(SLUG_CWE407) # ── Minecraft enterprise java white paper ───────────────────────────────────── # Source: gumyum/*.md + gumyum-style.css + svg/*.svg (dots + donuts) # Visuals are rebuilt first if any .dot or gen-donuts.py changed. GUMYUM_DIR := gumyum GUMYUM_MD := $(GUMYUM_DIR)/gumyum-minecraft-enterprize-java-edition.md GUMYUM_CSS := $(GUMYUM_DIR)/gumyum-style.css DOTS_SRC := $(wildcard $(GUMYUM_DIR)/dots/*.dot) DOTS_SVG := $(patsubst $(GUMYUM_DIR)/dots/%.dot,$(GUMYUM_DIR)/svg/%.svg,$(DOTS_SRC)) DONUT_SVGS := $(GUMYUM_DIR)/svg/donut-javac.svg \ $(GUMYUM_DIR)/svg/donut-mc-server.svg \ $(GUMYUM_DIR)/svg/donut-mc-client.svg # Dot → SVG $(GUMYUM_DIR)/svg/%.svg: $(GUMYUM_DIR)/dots/%.dot @mkdir -p $(GUMYUM_DIR)/svg $(DOT) -Tsvg $< -o $@ # Donut SVGs $(DONUT_SVGS): $(GUMYUM_DIR)/gen-donuts.py @mkdir -p $(GUMYUM_DIR)/svg cd $(GUMYUM_DIR) && $(PYTHON) gen-donuts.py visuals: $(DOTS_SVG) $(DONUT_SVGS) $(SLUG_MINECRAFT): $(GUMYUM_MD) $(GUMYUM_CSS) $(DOTS_SVG) $(DONUT_SVGS) cd $(GUMYUM_DIR) && $(PANDOC) gumyum-minecraft-enterprize-java-edition.md \ --pdf-engine=wkhtmltopdf \ --css=gumyum-style.css \ --resource-path=. \ -V margin-top=0mm \ -V margin-bottom=20mm \ -V margin-left=20mm \ -V margin-right=20mm \ -o $(CURDIR)/$(SLUG_MINECRAFT) @echo "==> $(SLUG_MINECRAFT) ($$(du -h $(SLUG_MINECRAFT) | cut -f1))" pdf-minecraft: $(SLUG_MINECRAFT) # ── HTML ────────────────────────────────────────────────────────────────────── $(HTML_CWE407): full-paper.md pdf-style.css $(PANDOC) full-paper.md \ --standalone \ --css pdf-style.css \ --resource-path=. \ --metadata title="undefect. CWE-407: The Sedimentary Defect" \ -o $(HTML_CWE407) @echo "==> $(HTML_CWE407) ($$(du -h $(HTML_CWE407) | cut -f1))" html-cwe407: $(HTML_CWE407) $(HTML_MINECRAFT): $(GUMYUM_MD) $(GUMYUM_CSS) $(DOTS_SVG) $(DONUT_SVGS) cd $(GUMYUM_DIR) && $(PANDOC) gumyum-minecraft-enterprize-java-edition.md \ --standalone \ --css gumyum-style.css \ --resource-path=. \ -o $(CURDIR)/$(HTML_MINECRAFT) @echo "==> $(HTML_MINECRAFT) ($$(du -h $(HTML_MINECRAFT) | cut -f1))" html-minecraft: visuals $(HTML_MINECRAFT) # ── Clean ───────────────────────────────────────────────────────────────────── clean: rm -f undefect-cwe407-*.pdf undefect-cwe407-*.html rm -f undefect-minecraft-enterprise-java-*.pdf undefect-minecraft-enterprise-java-*.html rm -f $(OUTREACH_DIR)/pdf/*.pdf $(OUTREACH_MD5) @echo "Cleaned slug PDFs and HTML."