From 93e3ea28d2f0fed064abd2e42bcddb9e92414777 Mon Sep 17 00:00:00 2001 From: sergio Date: Sat, 27 Jun 2026 00:14:03 -0400 Subject: [PATCH] =?UTF-8?q?Etapa=20G:=20wayland=20root=20cause=20CONFIRMAD?= =?UTF-8?q?O=20=E2=80=94=20scanner=20musl=20lee=20input=20vac=C3=ADo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verificado que la fuente extraída protocol/wayland.xml está completa (165075 B) y expat OK ⇒ el wayland-scanner compilado static-musl recibe el XML completo pero emite headers vacíos y sale 0 (bug de runtime, falla con zig default y 0.13.0). FIX recomendado: construir el scanner NATIVO (build-time only, no se shippea) y apuntar libwayland al scanner externo; libwayland-{client,server} sí con musl/zig. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/14-mesa-stack.md | 2 +- recipes/wayland.toml | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/14-mesa-stack.md b/docs/14-mesa-stack.md index cd8187fd..7a4613ef 100644 --- a/docs/14-mesa-stack.md +++ b/docs/14-mesa-stack.md @@ -66,7 +66,7 @@ Construidas y selladas en el store (`hammer --store store build recipes/.toml | `meson` | 🟢 **built** | Python puro: copia `mesonbuild/`+wrapper, sin wheel/gpep517; `python3` runtime-dep | | `libdrm` | 🟢 **built** | core-only (todas las GPU helper disabled) → evita libpciaccess; iris usa libdrm core | | `seatd` | 🟢 **built** | `-Dwerror=false` (musl `CMSG_NXTHDR` dispara `-Wsign-compare`); logind disabled, backend seatd | -| `wayland` | 🔴 **bloqueada** | `wayland-scanner` genera headers de protocolo **vacíos** → `wl_*`/`WL_SHM_FORMAT_*` undeclared al compilar libwayland. Debug (2026-06-27): el scanner corre, **sale 0, no emite nada**; por stdin, expat reporta «no element found at line 1 col 0» = recibe **input vacío**. Descartado: ordenamiento de samurai (falla con `-j1`), libexpat (estático, sin símbolos glibc-only). Resultados **inconsistentes** entre corridas (una vez `protocol/wayland.xml`=165 KB, otra vacío). Hipótesis vivas: (a) extracción del tarball `.tar.xz` truncada/no determinista en el lab, (b) scanner musl con lectura de input miscompilada, (c) estado compartido tocado por una corrida previa del farm (borró `recipes/incoming/`). **Siguiente paso:** corrida aislada (sin farm) que verifique el tamaño de `protocol/wayland.xml` extraído y trace la lectura del scanner. | +| `wayland` | 🔴 **bloqueada — root cause confirmado** | `wayland-scanner` genera headers de protocolo **vacíos** → `WL_SHM_FORMAT_*`/`wl_*` undeclared. **Confirmado (2026-06-27):** la fuente extraída `work/sources/wayland-*/protocol/wayland.xml` está COMPLETA (165075 B), expat OK, no es ordenamiento de samurai (`-j1` falla igual). El scanner recibe el XML completo pero **emite vacío, sale 0** (por stdin expat: «no element found» = lee 0 bytes). ⇒ **bug de runtime del wayland-scanner compilado static-musl** (falla con zig default Y 0.13.0). **FIX:** el scanner es herramienta de build-time (no se shippea) ⇒ construirlo **nativo (host/glibc)** y apuntar libwayland al scanner externo; construir sólo libwayland-{client,server} con musl/zig. Alt: patchear la lectura de input del scanner para musl. | | `wayland-protocols` | ⏸ **bloqueada** | build-depende de wayland (necesita wayland-scanner) | | `mesa` | 🟡 **pendiente** | recortar a iris-only (sin LLVM/Vulkan/X11); depende de libdrm✓+wayland+wayland-protocols+expat✓+zlib✓+zstd✓+python3✓+mako(⚪) | diff --git a/recipes/wayland.toml b/recipes/wayland.toml index 2471d27d..19690544 100644 --- a/recipes/wayland.toml +++ b/recipes/wayland.toml @@ -3,15 +3,18 @@ # libxml2. Core enlaza libffi; wayland-scanner usa expat (ambos ya en hammer). zig 0.13.0 por el # patrón musl (evita miscompilación del zig default). link=dynamic: shared libs. # -# ⚠ BLOQUEADA (2026-06-27): el build de libwayland falla porque wayland-scanner genera -# headers de protocolo VACÍOS (`wl_callback_add_listener`, `WL_SHM_FORMAT_ARGB8888`, … -# undeclared). Diagnóstico: el scanner corre y sale 0 pero no emite nada; alimentado por stdin -# expat reporta «no element found at line 1 col 0» = recibe input vacío. Resultados -# INCONSISTENTES entre corridas (una vez protocol/wayland.xml medía 165 KB, otra parecía vacío) -# + un proceso de la granja concurrente que muta el área de build compartida (ya borró -# recipes/incoming/ y mete ruido en los logs). Falta una corrida AISLADA (farm detenido) para -# discriminar: (a) extracción de fuente truncada, (b) scanner musl con lectura de input -# miscompilada, (c) interferencia del farm. Ver docs/14-mesa-stack.md §Estado de build. +# ⚠ BLOQUEADA (2026-06-27) — ROOT CAUSE CONFIRMADO: el build de libwayland falla porque +# wayland-scanner genera headers de protocolo VACÍOS (`WL_SHM_FORMAT_ARGB8888`, … undeclared). +# Verificado: la fuente extraída `work/sources/wayland-*/protocol/wayland.xml` está COMPLETA +# (165075 bytes), expat está OK (estático, sin símbolos glibc-only), y NO es ordenamiento de +# samurai (-j1 falla igual). El scanner recibe el XML completo pero emite vacío y sale 0; por +# stdin expat dice «no element found» = lee 0 bytes. ⇒ es un BUG DE RUNTIME del wayland-scanner +# compilado static-musl en el lab (falla con zig default Y 0.13.0 — no es la regresión de zig). +# +# FIX recomendado: wayland-scanner es herramienta de BUILD-TIME (no se shippea al rootfs) ⇒ +# construirlo NATIVO (host/glibc) y apuntar el build de libwayland al scanner externo +# (`find_program('wayland-scanner')` / wrap de meson), construyendo sólo libwayland-{client,server} +# con musl/zig. Alternativa: patchear la lectura de input del scanner para musl. Ver docs/14 §Estado. name = "wayland" version = "1.25.0"