From 35c09df3aeb43eafcd68a6781a019f38b2673493 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 25 Mar 2026 13:28:43 -0700 Subject: [PATCH 1/2] libvmaf: replace xxd dependency with minimal shell shim libvmaf uses `xxd --include` to embed model JSON files as C arrays. This pulled in tinyxxd, causing ~22k rebuilds via libaom -> ffmpeg -> everything whenever tinyxxd was updated. Replace it with a minimal `xxd --include` implementation using only stdenv tools (od, sed). The output is bit-for-bit identical (verified with diffoscope). --- pkgs/by-name/li/libvmaf/package.nix | 4 ++-- pkgs/by-name/li/libvmaf/xxd.nix | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 pkgs/by-name/li/libvmaf/xxd.nix diff --git a/pkgs/by-name/li/libvmaf/package.nix b/pkgs/by-name/li/libvmaf/package.nix index 7b841808b423..b3fc10510f58 100644 --- a/pkgs/by-name/li/libvmaf/package.nix +++ b/pkgs/by-name/li/libvmaf/package.nix @@ -1,5 +1,6 @@ { lib, + buildPackages, stdenv, fetchFromGitHub, ffmpeg-full, @@ -8,7 +9,6 @@ nasm, ninja, testers, - xxd, }: stdenv.mkDerivation (finalAttrs: { @@ -28,7 +28,7 @@ stdenv.mkDerivation (finalAttrs: { meson ninja nasm - xxd + (buildPackages.callPackage ./xxd.nix { }) ]; postPatch = lib.optionalString stdenv.hostPlatform.isFreeBSD '' diff --git a/pkgs/by-name/li/libvmaf/xxd.nix b/pkgs/by-name/li/libvmaf/xxd.nix new file mode 100644 index 000000000000..d33517f3a042 --- /dev/null +++ b/pkgs/by-name/li/libvmaf/xxd.nix @@ -0,0 +1,20 @@ +# Minimal `xxd --include` replacement for embedding binary files as C arrays. +# Used instead of tinyxxd to avoid ~22k rebuilds via libaom -> ffmpeg -> everything. +{ writeShellScriptBin }: + +writeShellScriptBin "xxd" '' + if [ "$1" != "--include" ]; then + echo "xxd: only --include mode is supported" >&2 + exit 1 + fi + input="$2" + output="$3" + # Match real xxd behavior: derive variable name from the full path + varname=$(echo "$input" | sed 's/[^a-zA-Z0-9_]/_/g') + { + printf 'unsigned char %s[] = {\n' "$varname" + od -An -tx1 -v "$input" | sed 's/ */ /g; s/^ //; s/ $//; s/ /, 0x/g; s/^/ 0x/; s/$/,/' + printf '};\n' + printf 'unsigned int %s_len = %d;\n' "$varname" "$(wc -c < "$input")" + } > "$output" +'' From 2159366cfd2ab5901a6c8ef0674afe35e9232be0 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Wed, 25 Mar 2026 13:28:50 -0700 Subject: [PATCH 2/2] tinyxxd: 1.3.11 -> 1.3.14 https://github.com/xyproto/tinyxxd/releases/tag/v1.3.14 --- pkgs/by-name/ti/tinyxxd/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ti/tinyxxd/package.nix b/pkgs/by-name/ti/tinyxxd/package.nix index 9035ae112dcf..afac5a7d510c 100644 --- a/pkgs/by-name/ti/tinyxxd/package.nix +++ b/pkgs/by-name/ti/tinyxxd/package.nix @@ -8,13 +8,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "tinyxxd"; - version = "1.3.11"; + version = "1.3.14"; src = fetchFromGitHub { repo = "tinyxxd"; owner = "xyproto"; rev = "v${finalAttrs.version}"; - hash = "sha256-zM0KRQggDc45eeeZZ6nAI/5sm7NtF1XGucIJV4O1AJs="; + hash = "sha256-iN7i5XtGfvtRX8MA2IWiPsS2PYkmKTrztfvgLtoIq2o="; }; nativeBuildInputs = [ installShellFiles ];