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.
47 lines
2.6 KiB
TOML
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"]
|