sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
wlroots 0.18.2 SELLADA — el desbloqueo del frente de WMs Wayland ligeros
1# wlroots 0.18.2 — la biblioteca de la que cuelgan casi todos los compositores Wayland ligeros
2# (sway, labwc, river, hyprland…). Es el DESBLOQUEO del frente de WMs ligeros: sin ella no hay
3# ninguno, y con ella los compositores son baratos porque no traen torre de C debajo.
4#
5# ── POR QUÉ ESTA COLA APARTE (`incoming-wlr/`) ──────────────────────────────────────────────────
6# Otro agente comparte este repo, así que el frente nuevo va en cola AISLADA y nunca se hace
7# `git add -A`. Y como la resolución de deps es HERMANO→PADRE, una receta de acá ve `recipes/` (el
8# corpus) pero NO ve `recipes/incoming-gnome/`. `libdisplay-info` y `hwdata` sólo existen en las
9# colas de escritorio ⇒ se copian como hermanas. **No es duplicar trabajo**: los ficheros son
10# idénticos, así que el ArtifactHash es el mismo y el build hace cache-hit — verificado, ambos dan
11# el mismo `b3:` que su original en incoming-gnome.
12#
13# ── LA FUENTE: tarball de RELEASE, no el `-/archive/` autogenerado ─────────────────────────────
14# Mismo criterio que `wlr-randr` y `wayland-protocols`: los archivos que GitLab genera al vuelo no
15# son estables byte a byte en el tiempo, así que un sha256 pineado sobre ellos se rompe solo. El de
16# release está firmado por el proyecto y no cambia. sha256 medido con curl|sha256sum.
17#
18# ── LAS OPCIONES, VERIFICADAS CONTRA EL meson_options.txt DE 0.18.2 ────────────────────────────
19# Comprobadas una a una en el tarball, no de memoria — porque una opción `-D` inventada NO se ignora:
20# meson aborta en la primera desconocida y la receta ni llega a configurar. (Es exactamente lo que
21# tenía muerta a `gnome-session`, que pasaba `-Dsystemd=false` cuando esa opción no existe en 48.0.)
22# Las diez opciones reales son: xcb-errors · xwayland · examples · icon_directory · renderers ·
23# backends · allocators · session · color-management · libliftoff.
24#
25# -Dxwayland=disabled la distro es Wayland PURA; X11 es una de las tres deudas aparcadas por
26# diseño del frente GNOME y no vamos a traerla por la puerta de atrás.
27# -Dxcb-errors=disabled corolario de lo anterior (es una lib de diagnóstico de XCB).
28# -Dbackends=drm,libinput sin el backend `x11`, que sólo sirve para correr el compositor DENTRO
29# de una sesión X11 — justo lo que no tenemos. Quedan DRM (metal) y libinput.
30# -Drenderers=gles2 mesa nos da `glesv2.pc` y `egl.pc`. Vulkan exigiría el loader y las
31# cabeceras, que son otro frente; el renderer GLES2 es el camino probado.
32# -Dallocators=gbm mesa nos da `gbm.pc`.
33# -Dsession=enabled libseat, que viene de `seatd` — sin esto no hay forma de tomar el DRM
34# master sin ser root, que es como arranca un compositor en metal.
35# -Dexamples=false son binarios de demo; no van a una imagen.
36# -Dlibliftoff=disabled overlays de plano de hardware, opcional y una dep más.
37# -Dcolor-management=disabled gestión de color; opcional en 0.18 y arrastra dependencias que
38# todavía no hacen falta para «que un WM ligero arranque».
39# -Dwerror=false NO es pereza, es una diferencia de TOOLCHAIN. wlroots compila con -Werror y
40# upstream lo valida con gcc; nuestro `zig cc` es clang, que avisa de cosas
41# que gcc calla. Medido: muere en `types/wlr_shm.c:503` con
42# `-Werror,-Wunused-but-set-variable` sobre `has_argb8888`/`has_xrgb8888` —
43# código correcto que sólo clang señala. Tratar los avisos de OTRO compilador
44# como errores del proyecto es un fallo de método, no un hallazgo de calidad.
45# (`werror` es opción universal de meson, no de wlroots.)
46#
47# ── `-Ddefault_library=both` ───────────────────────────────────────────────────────────────────
48# Igual que libinput y pixman: meson produciría sólo `.so` y los consumidores (sway, labwc…)
49# enlazan estático. Con `both` salen las dos y cada consumidor toma la que necesita.
50#
51# ── deps: la lección del `.pc Requires` ────────────────────────────────────────────────────────
52# `libffi`, `expat` y `zlib` NO los usa wlroots directamente: los exigen los `.pc` de wayland y mesa
53# en su línea `Requires`, y pkgconf resuelve el grafo de `.pc` COMPLETO antes de emitir un cflag.
54# Omitirlos da un error que culpa a wayland o a mesa, que son inocentes. Ver `wlr-randr`, donde el
55# síntoma fue «Package 'libffi', required by 'wayland-client', not found».
56# `python3` va porque **meson es un script de Python**: sin intérprete, exit 127 que se lee como
57# «meson no está» cuando meson sí está.
58
59name = "wlroots"
60version = "0.18.2"
61license = "MIT"
62
63[source]
64tarball = "https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.18.2/downloads/wlroots-0.18.2.tar.gz"
65sha256 = "cf776c169169f279808d9eabc6583f484338dcd454c966a285ff178c88c105d4"
66
67[build]
68compiler = "zig-cc"
69target = "x86_64-linux-musl"
70link = "dynamic"
71zig_version = "0.13.0"
72
73[build.phases]
74configure = "meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dwerror=false -Ddefault_library=both -Dexamples=false -Dxwayland=disabled -Dxcb-errors=disabled -Dbackends=drm,libinput -Drenderers=gles2 -Dallocators=gbm -Dsession=enabled -Dlibliftoff=disabled -Dcolor-management=disabled"
75compile = "ninja -C output"
76install = "DESTDIR=/out ninja -C output install"
77
78[deps]
79build = ["meson", "samurai", "python3", "pkgconf", "wayland", "wayland-protocols", "libdrm",
80 "libxkbcommon", "pixman", "mesa", "libinput", "seatd", "libudev-zero", "libevdev",
81 "mtdev", "libdisplay-info", "hwdata", "libffi", "expat", "zlib"]
82run = ["wayland", "libdrm", "libxkbcommon", "pixman", "mesa", "libinput", "seatd"]