Primera de las 12 recetas del corpus en deuda, cerrada. Y de paso desmiente el diagnóstico
heredado («las 12 fallan por el rootfs del worker: python OSError en meson, find_package en
cmake»). Medido hoy contra el worker, las causas son CUATRO distintas y ninguna es el
rootfs:
· gtk4 construye ahí SIN TOCAR NADA. Nunca había fallado: el bucle del worker sólo recorre
las colas `incoming-*` y NO incluye el corpus, así que las 12 jamás se intentaron. La
deuda no era técnica, era de encolado.
· wlr-randr (ésta): dos deps que faltaban en la receta.
· dwarves: FindDWARF no halla las libs ELF/DWARF pese a declarar elfutils. Pendiente.
· mirada-compositor, mirada-greeter, llimphi-counter: `repo = gitea@git.tawasuyu.net:...`
por SSH. El worker es SIN SECRETOS por diseño ⇒ son HUB-ONLY estructuralmente, no un
fallo. Y llimphi-counter ni siquiera es un fallo de build: su commit es literalmente
ceros, con un comentario «fijar al commit real» — es una receta sin terminar, y es de
tawasuyu.
LAS DOS DEPS DE ESTA RECETA, que son dos lecciones distintas:
1. `python3` — porque **meson es un script de Python, no un binario**. Faltando el
intérprete la fase muere con exit 127, que se lee como «meson no está» cuando meson SÍ
está y se hidrata bien. gtk4/libadwaita/gtksourceview construyen en el worker
precisamente porque sí lo declaran. Auditadas las 1141 recetas: wlr-randr era **la
única** con meson y sin python3. Regla: meson en deps ⇒ python3 al lado.
2. `libffi` — que wlr-randr no usa. Lo exige `wayland-client.pc` en su línea `Requires`, y
pkgconf resuelve el grafo de .pc completo antes de emitir un cflag. Patrón ya
documentado `.pc Requires` → `[deps].build`; el síntoma («Package 'libffi', required by
'wayland-client', not found») culpa a wayland, que es inocente.
En ambos casos el arreglo es hidratar la dep, NO instalar nada en el rootfs del worker:
engordarlo haría que el build dependa de qué hay en una máquina concreta, que es justo lo
que rompe la reproducibilidad.
Re-hashear sale gratis: la receta estaba en deuda, nunca se había sellado.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
67 lines
3.7 KiB
TOML
67 lines
3.7 KiB
TOML
# wlr-randr 0.5.0 — el `xrandr` de wlroots: lista y configura salidas hablando
|
|
# `wlr-output-management-unstable-v1`.
|
|
#
|
|
# Entra a hammer con un rol acotado y explícito: es el **testigo ajeno** de que
|
|
# mirada sirve ese protocolo de verdad. La paridad cosmic no se demuestra con un
|
|
# cliente nuestro —eso probaría que nos entendemos con nosotros mismos—, se
|
|
# demuestra con la herramienta que el resto del mundo usa. Por eso se instala
|
|
# aunque el camino soberano (`mirada-ctl output` y el panel de pata) sea el que
|
|
# el usuario va a usar todos los días.
|
|
#
|
|
# Lo que hoy NO puede hacer, y conviene saberlo antes de acusar al paquete: en
|
|
# mirada `apply`/`test` de `zwlr_output_configuration_v1` contestan `failed`
|
|
# (`mirada-compositor/src/output_management.rs`), así que wlr-randr **lista**
|
|
# correctamente y **no cambia nada**. Cuando mirada implemente el apply, esta
|
|
# misma receta pasa a ser también la prueba de que el apply anda.
|
|
#
|
|
# Por lo mismo NO entran `kanshi` ni `way-displays`: no son herramientas sino una
|
|
# función —perfiles de salida por hotplug— y su lugar es adentro de mirada, que
|
|
# ya tiene el estado. Instalarlos hoy además sería inútil: rechazaría cada
|
|
# perfil que intentaran aplicar.
|
|
#
|
|
# C puro sobre meson. Trae el XML del protocolo adentro (`protocol/`), así que no
|
|
# necesita wayland-protocols — sólo `wayland-client` y `wayland-scanner`, que
|
|
# vienen de la receta `wayland`. `scdoc` es opcional (la man page); se omite.
|
|
|
|
name = "wlr-randr"
|
|
version = "0.5.0"
|
|
|
|
[source]
|
|
# Tarball de RELEASE, no el `-/archive/` autogenerado de GitLab: los archivos
|
|
# generados no son estables byte a byte en el tiempo y un sha256 pinneado sobre
|
|
# ellos se rompe solo. Mismo criterio que `recipes/wayland-protocols.toml`.
|
|
tarball = "https://gitlab.freedesktop.org/emersion/wlr-randr/-/releases/v0.5.0/downloads/wlr-randr-0.5.0.tar.gz"
|
|
sha256 = "a64b6eb296d1c75af098fa2d229f9aaf3ceae45eeff24056930bd4bc613c6a5e"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
|
|
[build.phases]
|
|
# `-Dwerror=false`: el proyecto compila con `werror=true` por defecto y una
|
|
# versión de compilador distinta de la que usan sus CI convierte cualquier aviso
|
|
# nuevo en un fallo de build. La receta no está para pelearse con eso.
|
|
configure = "meson setup output --prefix=/usr --buildtype=release -Dwerror=false"
|
|
compile = "ninja -C output"
|
|
install = "DESTDIR=/out ninja -C output install"
|
|
|
|
[deps]
|
|
# `python3` es OBLIGATORIO aunque no lo parezca: **meson es un script de Python**, no un binario.
|
|
# Sin él la fase configure muere con `exec: line 2: python3: not found` y **exit 127** — que se lee
|
|
# como «meson no está» cuando meson SÍ está (su artefacto se hidrata bien; lo que falta es el
|
|
# intérprete). Diagnosticado en el worker el 2026-08-07: gtk4, libadwaita y gtksourceview construyen
|
|
# ahí sin problema **precisamente porque sí declaran python3**, y ésta no lo hacía.
|
|
# ⇒ Regla: toda receta con meson en `[deps].build` necesita python3 al lado.
|
|
# El arreglo es hidratar la dep, NO instalar python3 en el rootfs del worker: engordar el rootfs
|
|
# haría que el build dependa de qué hay en una máquina concreta, que es justo lo que rompe la
|
|
# reproducibilidad (ver la nota `rootfs-laptop-worker-divergen`).
|
|
#
|
|
# `libffi` NO lo usa wlr-randr: lo exige `wayland-client.pc` en su línea `Requires`, y pkgconf
|
|
# resuelve el grafo de .pc COMPLETO antes de dar un cflag. O sea que falta la dep de la dep. Es el
|
|
# patrón ya documentado `.pc Requires` → `[deps].build` (nota `etapa-g-gui-chain-boundary`): el
|
|
# síntoma es «Package 'libffi', required by 'wayland-client', not found», que se lee como un problema
|
|
# de wayland y no lo es.
|
|
build = ["meson", "samurai", "python3", "pkgconf", "wayland", "libffi"]
|
|
run = ["wayland"]
|