Files
Sergio d4d120a079 brotli y json-c: selladas y rotas a la vez — las dos baratas del censo, arregladas
El barrido con `verificar-repro.sh` sobre las 15 recetas CMake baratas del corpus dio
**5 que no construyen hoy**. Éstas son las dos cuyo arreglo no cuesta nada (radio 0 y 3 rebuilds).

Diagnosticada `json-c` en vez de suponerla: apartando su artefacto y reconstruyendo con la salida
capturada, muere con el mismo `Error running link command: Segmentation fault` que `dwarves` y que
los `protoc-gen-upb*` de protobuf. Un `-DCMAKE_LINK_DEPENDS_USE_LINKER=OFF` en cada una y listo — el
`lld` de zig 0.16.0 segfaultea con el `--dependency-file` que CMake ≥3.27 emite.

⚠ **Lo que importa de este commit no son las dos recetas: es que el fallo no era un caso aislado.**
Cuando apareció en protobuf lo esquivé con `compiler = "gcc"` creyendo que era cosa de esos plugins.
Ya van CINCO proyectos sin relación entre sí con el mismo crash, y otros tres medidos y pendientes.

`crun` cayó a deuda (json-c es dep suya) y se reconstruyó: sigue siendo estático con 0 NEEDED y
**vuelve a arrancar un contenedor de verdad** con el busybox del corpus como rootfs. Las tres
REPRODUCEN bit a bit.

Queda planteado con el número delante, sin arrancarlo: los otros tres del censo son
`libtiff-shared` (12 rebuilds), `libjpeg-turbo` (17) y `libjpeg-turbo-shared` (23) — ~52 en total y
tocan los stacks gráficos de los escritorios. Y el censo cubrió 15 de las 23 CMake del corpus y
NINGUNA de las ~130 de las colas: el número real de rotas es mayor que 5.
2026-09-12 11:29:01 +00:00

47 lines
2.6 KiB
TOML

# json-c 0.18 — lib C base (de-Alpinizada, Etapa G). compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16), configure-split, estático.
name = "json-c"
version = "0.18"
license = "MIT"
[source]
tarball = "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.18.tar.gz"
sha256 = "876ab046479166b869afc6896d288183bbc0e5843f141200c677b3e8dfb11724"
patches = ["cmake-version.patch"]
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[build.phases]
# ⚠ **`CMAKE_LINK_DEPENDS_USE_LINKER=OFF`: sin esto NO CONSTRUYE HOY.** Estaba sellada y rota a la
# vez — el artefacto tapaba que el link muere con `Error running link command: Segmentation fault`.
# La causa no es de esta receta: el `lld` de zig 0.16.0 **segfaultea con el `--dependency-file` que
# CMake ≥3.27 mete en la línea de enlace**. Bisecado sobre la línea literal de `dwarves`
# (`build/CMakeFiles/<target>.dir/link.txt`): quitar `-static` no cambia nada, quitar
# `--dependency-file` lo arregla. Ver `recipes/dwarves.toml` para el detalle.
configure = 'cmake -B build -DCMAKE_LINK_DEPENDS_USE_LINKER=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release'
compile = 'cmake --build build'
install = 'DESTDIR=/out cmake --install build'
# ── SIN `[deps]` CONSTRUÍA POR ACCIDENTE ────────────────────────────────────────────────────────
# Esta receta no declaraba NADA, y aun así sellaba — porque el rootfs del laptop trae `cmake` y
# `make` instalados, así que el sandbox los encontraba «de prestado». En el worker, que no los trae,
# muere con `/bin/sh: cmake: not found` y **exit 127**, el mismo código que engaña en el caso de
# meson: se lee como «cmake no está» y lo que falta es DECLARARLO, no instalarlo.
#
# Salió a la luz construyendo `sway`, que depende de json-c: el fallo no estaba en sway ni en la
# receta que se estaba escribiendo, sino en una dep de tercer nivel que llevaba tiempo mintiendo.
#
# ⇒ El arreglo es declarar la herramienta, **NUNCA engordar el rootfs del worker**: engordarlo haría
# que el build dependa de qué hay instalado en una máquina concreta, que es exactamente lo que
# rompe la reproducibilidad. Y una receta que sólo construye en la máquina del autor es una bomba
# de relojería: funciona hasta que alguien más la toca.
#
# `make` va además de `cmake` porque el generador por defecto de cmake en Unix es «Unix Makefiles»
# ⇒ `cmake --build build` invoca `make` por debajo.
[deps]
build = ["cmake", "make", "pkgconf"]