132 lines
5.2 KiB
Makefile
132 lines
5.2 KiB
Makefile
# whitepaper/Makefile
|
|
# Generates both undefect. white papers with slug-named output PDFs.
|
|
#
|
|
# make pdf-cwe407 — full CWE-407 cross-ecosystem report
|
|
# make pdf-minecraft — gumyum: Minecraft + javac enterprise edition
|
|
# make all — both PDFs
|
|
# make clean — remove slug PDFs (leaves originals)
|
|
#
|
|
# Output slugs:
|
|
# undefect-cwe407-$(DATE).pdf
|
|
# undefect-minecraft-enterprise-java-$(DATE).pdf
|
|
|
|
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
|
|
|
|
# ── 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 rustc erlang-otp swipl \
|
|
postgresql mongodb frrouting tor solidity minecraft build-tools \
|
|
hive spark kafka spring presto webpack \
|
|
django rails pyramid bottle \
|
|
hibernate mybatis exposed \
|
|
efcore \
|
|
sqlalchemy peewee \
|
|
sequelize typeorm \
|
|
doctrine \
|
|
seaorm diesel \
|
|
gorm \
|
|
godot pygame sfml threejs angelscript dry tinkerpop \
|
|
terraform ansible saltstack cfengine puppet \
|
|
jenkins bazel \
|
|
bird onos httpd \
|
|
llvm gcc kotlin v8 spidermonkey \
|
|
rubocop solargraph \
|
|
networkx rabbitmq kicad buildkit luigi octave
|
|
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 pdf-outreach visuals clean
|
|
|
|
all: 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)
|
|
|
|
# ── Clean ─────────────────────────────────────────────────────────────────────
|
|
|
|
clean:
|
|
rm -f undefect-cwe407-*.pdf undefect-minecraft-enterprise-java-*.pdf
|
|
rm -f $(OUTREACH_DIR)/pdf/*.pdf $(OUTREACH_MD5)
|
|
@echo "Cleaned slug PDFs."
|