## 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