aboutsummaryrefslogtreecommitdiff
## SPDX-License-Identifier: CC0-1.0
##
## Copyright (C) 2025 Woj. Kosior <koszko@koszko.org>

AWK = awk
GNUPLOT = gnuplot
LATEXMK = latexmk
SED = sed

DOC_RASTERS = \
	bookworm-stats-pkg-state.png \
	guix-pkg-repro-stats.png

PRESENTATION_PLOTS = \
	dependee_counts.svg \
	status-counts.svg \
	tree-size-stats-no-bc.svg

PRESENTATION_GRAPHICS = \
	$(PRESENTATION_PLOTS) \
	Logo-WIET-2021.png \
	agh_idub_pl_cmyk.pdf \
	build-process-overview.svg \
	boxes.svg \
	Guix_logo.svg \
	Debian-OpenLogo.svg \
	Archlinux-logo-standard-version.svg \
	NixOS_logo.svg \
	Npm-logo.svg \
	PyPI_logo.svg \
	Rust_programming_language_black_logo.svg \
	Apache_Maven_logo.svg \
	composer-seeklogo.svg \
	ecosystems-state.svg \
	construction-crane.svg

DIAGRAMS = \
	build-process-overview.svg \
	rebuilds-no-contamination-diagram.svg \
	rebuilds-contamination-diagram.svg \
	rebuilds-contamination-1party.svg \
	rebuilds-inconclusive-diagram.svg

PLOTS = \
	common_2019_2025_percent.svg \
	common_nondev_dev_percent.svg \
	dev_dependee_counts.svg \
	tree-size-stats.svg \
	unflattened-multiver-counts.svg \
	unflattened-multiver-counts-no-bc.svg \
	$(PRESENTATION_PLOTS)

INCLUDES = \
	definitions-computed-from-results.tex

PRESENTATION_OUTPUTS = \
	presentation-handouts.pdf \
	presentation-onlynotes.pdf \
	presentation-onlyslides.pdf \
	presentation-pympress.pdf \
	presentation-slidesandnotes.pdf

OUTPUTS = \
	$(PRESENTATION_OUTPUTS) \
	doc.pdf

all: $(OUTPUTS)
.POHONY: all

agh_idub_pl_cmyk.pdf: agh_idub_pl_cmyk.pdf.nonpdf
	rm -f $@
	ln -s $< $@

.SUFFIXES: .pdf .tex .svg .gnuplot

common_nondev_dev_percent.svg: common_nondev_dev_percent.txt
common_2019_2025_percent.svg: common_2019_2025_percent.txt
dependee_counts.svg: dependencies.csv dependencies_2019.csv
dev_dependee_counts.svg: dependencies.csv devDependencies.csv

status-counts.svg: status-counts.csv
tree-size-stats.svg: tree-size-stats.csv tree-sizes.csv
tree-size-stats-no-bc.svg: tree-size-stats-no-bc.csv tree-sizes.csv \
		tree-size-stats.gnuplot
unflattened-multiver-counts.svg: unflattened-multiver-counts.csv
unflattened-multiver-counts-no-bc.svg: unflattened-multiver-counts-no-bc.csv \
		unflattened-multiver-counts.gnuplot

.gnuplot.svg:
	$(GNUPLOT) $<

definitions-computed-from-results.tex: compute-definitions-from-results.sh \
		experiment-results.csv status-counts.csv \
		tree-size-stats-no-bc.csv helper.sh
	$(SHELL) $^ > $@
tree-size-stats.csv: compute-tree-size-stats.sh experiment-results.csv helper.sh
	$(SHELL) $^ > $@
tree-size-stats-no-bc.csv: compute-tree-size-stats-no-bc.sh \
		experiment-results.csv compute-tree-size-stats.sh helper.sh
	$(SHELL) $^ > $@
tree-sizes.csv: compute-tree-sizes.sh experiment-results.csv helper.sh
	$(SHELL) $^ > $@

status-counts.csv: compute-status-counts.awk experiment-results.csv
	$(AWK) -f $^ > $@ | sort --numeric-sort > $@

unflattened-multiver-counts.csv: compute-unflattened-multiver-counts.sh \
		tree-sizes.csv helper.sh
	$(SHELL) $^ > $@ | sort --numeric-sort > $@
unflattened-multiver-counts-no-bc.csv: \
		compute-unflattened-multiver-counts-no-bc.sh tree-sizes.csv \
		compute-unflattened-multiver-counts.sh helper.sh
	$(SHELL) $^ > $@ | sort --numeric-sort > $@

LISTING_INPUTS = \
	debian-control-excerpt.txt \
	debian-shc.patch \
	debian-rules-excerpt.txt \
	haskell-sth-buildinfo-excerpts.txt \
	guix-python-axolotl-package.scm \
	occurances-of-tslib.txt \
	guix-package-update-commits.txt \
	cpu-info.txt \
	npm-uninstall.txt \
	npm-ci.txt \
	npm-run-build.txt \
	npm-pack.txt \
	ssh-clone-fail.txt \
	eresolve-error.txt \
	newer-typescript-changes.diffoscope \
	warning-module-as-external.txt \
	removed-typescript-changes.diffoscope

doc.pdf: doc.tex doc.bib $(DOC_RASTERS) $(DIAGRAMS) $(PLOTS) $(LISTING_INPUTS) \
		$(INCLUDES) copyright.txt
	rm -rf $@ # Latexmk sees it as up-to-date despite, e.g., updated plots.
	$(LATEXMK) -bibtex -pdf -lualatex -latexoption=-shell-escape $<
	exiftool -@ copyright.txt $@

debian-rules-excerpt.txt: binutils-debian-rules
	$(AWK) '\
		BEGIN {ldots = "(*\\itshape\\color{TEXTGRAY}{[...]}*)"} \
		/^stamps\/build[.]%:/{in_fragment = 1; print ldots; print ""} \
		{if (in_fragment) print} \
		/; do \\/{if (in_fragment) {print ldots; exit(0)}}' \
		$^ | $(SED) 's/\t/        /g' > $@

$(PRESENTATION_OUTPUTS): presentation.tex $(PRESENTATION_GRAPHICS)
	rm -rf $@ # Latexmk sees it as up-to-date despite, e.g., updated plots.
	DEST=$@; \
		$(LATEXMK) -pdf \
		-jobname="$$(printf %s "$$DEST" | $(SED) 's/[.]pdf$$//')" \
		-latexoption=-shell-escape \
		-use-make \
		$<

TO_DELETE = \
	$(PLOTS) \
	definitions-computed-from-results.tex \
	tree-size-stats.csv tree-sizes.csv status-counts.csv \
		tree-size-stats.svg \
	debian-rules-excerpt.txt \
	svg-inkscape

clean:
	rm -rf $(TO_DELETE)
	$(LATEXMK) -C
.PHONY: clean