## SPDX-License-Identifier: CC0-1.0 ## ## Copyright (C) 2025 Woj. Kosior 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