wlroots 0.18.2 SELLADA — el desbloqueo del frente de WMs Wayland ligeros
Primera receta del frente nuevo. wlroots es la biblioteca de la que cuelgan casi todos los
compositores ligeros (sway, labwc, river, hyprland): sin ella no hay ninguno, y con ella los
compositores salen baratos porque no traen torre de C debajo. Hasta hoy el catálogo tenía de
toda esa familia sólo `foot` y `mako`.
b3:9b56bac0d00977524072cf393ecc9f0b847fcc1a0bfba9d9c4d57fd9a4a74b44 · 13 MB · construida en
el worker (cadena GUI: no se rebuildea en el laptop por el zig-skew).
COLA AISLADA `incoming-wlr/`, porque otro agente comparte el repo. Como la resolución de deps
es hermano→padre, una receta de acá ve el corpus pero NO ve `incoming-gnome/`, donde viven
`libdisplay-info` y `hwdata` ⇒ se copian como hermanas. No duplica trabajo: los ficheros son
idénticos, el ArtifactHash es el mismo y el build hace cache-hit. Verificado antes de
construir: ambas dan el mismo b3: que su original.
LAS OPCIONES, VERIFICADAS CONTRA EL meson_options.txt DEL TARBALL, no de memoria — porque una
opción `-D` inventada NO se ignora: meson aborta en la primera desconocida. Es exactamente lo
que tenía muerta a gnome-session con su `-Dsystemd=false`. El `.pc` resultante confirma que
salió lo pedido: have_drm_backend=true, have_libinput_backend=true, have_gles2_renderer=true,
have_gbm_allocator=true, have_session=true, y have_x11_backend / have_xwayland en FALSE —
la distro es Wayland pura y X11 es deuda aparcada por diseño; no entra por la puerta de atrás.
DOS COSAS QUE COSTARON UNA ITERACIÓN CADA UNA:
· `-Dwerror=false` no es pereza, es DIFERENCIA DE TOOLCHAIN. wlroots compila con -Werror y
upstream lo valida con gcc; nuestro `zig cc` es clang y avisa de lo que gcc calla. Murió en
`types/wlr_shm.c:503` por `-Wunused-but-set-variable` sobre has_argb8888/has_xrgb8888 —
código correcto que sólo clang señala. Tratar los avisos de OTRO compilador como errores del
proyecto es un fallo de método, no un hallazgo de calidad.
· `libffi`, `expat` y `zlib` en deps aunque wlroots no los use: los exigen los `.pc` de wayland
y mesa en su `Requires`, y pkgconf resuelve el grafo de .pc completo antes de dar un cflag.
Misma lección que wlr-randr esta mañana.
El artefacto trae `libwlroots-0.18.{a,so}`, su .pc y 111 cabeceras bajo
`usr/include/wlroots-0.18/wlr/`. Listo para que sway enlace contra él.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
# hwdata 0.393 — bases de datos de IDs de hardware (pnp.ids, pci.ids, usb.ids) + hwdata.pc. Sin código:
|
||||||
|
# sólo datos. Campaña KDE (ADR 0011): lo exige libdisplay-info en tiempo de build (dependency('hwdata')
|
||||||
|
# native → pkgdatadir/pnp.ids) y kwin como RUNTIME (find_package(hwdata) TYPE RUNTIME, tabla PNP de EDID).
|
||||||
|
# `configure` es un script shell propio (no autoconf); no compila nada.
|
||||||
|
name = "hwdata"
|
||||||
|
version = "0.393"
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tarball = "https://github.com/vcrhonek/hwdata/archive/refs/tags/v0.393.tar.gz"
|
||||||
|
sha256 = "322add86944680e99d04468d49de180a7ce0c77fb406f7abde8ab14f2d161051"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
compiler = "gcc"
|
||||||
|
target = "x86_64-linux-musl"
|
||||||
|
link = "dynamic"
|
||||||
|
flags = []
|
||||||
|
|
||||||
|
[build.phases]
|
||||||
|
configure = './configure --prefix=/usr --libdir=/usr/lib --datadir=/usr/share'
|
||||||
|
compile = 'true'
|
||||||
|
install = 'make install DESTDIR=/out'
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["pkgconf"]
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# libdisplay-info 0.2.0 — parseo de EDID/DisplayID (libdisplay-info.so). Campaña KDE (ADR 0011): sustrato
|
||||||
|
# de kwin (pkg_check_modules(libdisplay-info>=0.2.0) REQUIRED, lectura de EDID de los monitores). Meson.
|
||||||
|
# En build necesita pnp.ids: usa dependency('hwdata') native → si no está, cae a /usr/share/hwdata/pnp.ids
|
||||||
|
# y meson `files()` EXIGE que exista ⇒ hwdata es dep de build. Sin di-edid-decode (tool) para evitar más deps.
|
||||||
|
name = "libdisplay-info"
|
||||||
|
version = "0.2.0"
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tarball = "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz"
|
||||||
|
sha256 = "f7331fcaf5527251b84c8fb84238d06cd2f458422ce950c80e86c72927aa8c2b"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
compiler = "zig-cc"
|
||||||
|
target = "x86_64-linux-musl"
|
||||||
|
link = "dynamic"
|
||||||
|
zig_version = "0.13.0"
|
||||||
|
|
||||||
|
[build.phases]
|
||||||
|
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release"
|
||||||
|
compile = "ninja -C output"
|
||||||
|
install = "DESTDIR=/out ninja -C output install"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["meson", "samurai", "python3", "pkgconf", "hwdata"]
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
# wlroots 0.18.2 — la biblioteca de la que cuelgan casi todos los compositores Wayland ligeros
|
||||||
|
# (sway, labwc, river, hyprland…). Es el DESBLOQUEO del frente de WMs ligeros: sin ella no hay
|
||||||
|
# ninguno, y con ella los compositores son baratos porque no traen torre de C debajo.
|
||||||
|
#
|
||||||
|
# ── POR QUÉ ESTA COLA APARTE (`incoming-wlr/`) ──────────────────────────────────────────────────
|
||||||
|
# Otro agente comparte este repo, así que el frente nuevo va en cola AISLADA y nunca se hace
|
||||||
|
# `git add -A`. Y como la resolución de deps es HERMANO→PADRE, una receta de acá ve `recipes/` (el
|
||||||
|
# corpus) pero NO ve `recipes/incoming-gnome/`. `libdisplay-info` y `hwdata` sólo existen en las
|
||||||
|
# colas de escritorio ⇒ se copian como hermanas. **No es duplicar trabajo**: los ficheros son
|
||||||
|
# idénticos, así que el ArtifactHash es el mismo y el build hace cache-hit — verificado, ambos dan
|
||||||
|
# el mismo `b3:` que su original en incoming-gnome.
|
||||||
|
#
|
||||||
|
# ── LA FUENTE: tarball de RELEASE, no el `-/archive/` autogenerado ─────────────────────────────
|
||||||
|
# Mismo criterio que `wlr-randr` y `wayland-protocols`: los archivos que GitLab genera al vuelo no
|
||||||
|
# son estables byte a byte en el tiempo, así que un sha256 pineado sobre ellos se rompe solo. El de
|
||||||
|
# release está firmado por el proyecto y no cambia. sha256 medido con curl|sha256sum.
|
||||||
|
#
|
||||||
|
# ── LAS OPCIONES, VERIFICADAS CONTRA EL meson_options.txt DE 0.18.2 ────────────────────────────
|
||||||
|
# Comprobadas una a una en el tarball, no de memoria — porque una opción `-D` inventada NO se ignora:
|
||||||
|
# meson aborta en la primera desconocida y la receta ni llega a configurar. (Es exactamente lo que
|
||||||
|
# tenía muerta a `gnome-session`, que pasaba `-Dsystemd=false` cuando esa opción no existe en 48.0.)
|
||||||
|
# Las diez opciones reales son: xcb-errors · xwayland · examples · icon_directory · renderers ·
|
||||||
|
# backends · allocators · session · color-management · libliftoff.
|
||||||
|
#
|
||||||
|
# -Dxwayland=disabled la distro es Wayland PURA; X11 es una de las tres deudas aparcadas por
|
||||||
|
# diseño del frente GNOME y no vamos a traerla por la puerta de atrás.
|
||||||
|
# -Dxcb-errors=disabled corolario de lo anterior (es una lib de diagnóstico de XCB).
|
||||||
|
# -Dbackends=drm,libinput sin el backend `x11`, que sólo sirve para correr el compositor DENTRO
|
||||||
|
# de una sesión X11 — justo lo que no tenemos. Quedan DRM (metal) y libinput.
|
||||||
|
# -Drenderers=gles2 mesa nos da `glesv2.pc` y `egl.pc`. Vulkan exigiría el loader y las
|
||||||
|
# cabeceras, que son otro frente; el renderer GLES2 es el camino probado.
|
||||||
|
# -Dallocators=gbm mesa nos da `gbm.pc`.
|
||||||
|
# -Dsession=enabled libseat, que viene de `seatd` — sin esto no hay forma de tomar el DRM
|
||||||
|
# master sin ser root, que es como arranca un compositor en metal.
|
||||||
|
# -Dexamples=false son binarios de demo; no van a una imagen.
|
||||||
|
# -Dlibliftoff=disabled overlays de plano de hardware, opcional y una dep más.
|
||||||
|
# -Dcolor-management=disabled gestión de color; opcional en 0.18 y arrastra dependencias que
|
||||||
|
# todavía no hacen falta para «que un WM ligero arranque».
|
||||||
|
# -Dwerror=false NO es pereza, es una diferencia de TOOLCHAIN. wlroots compila con -Werror y
|
||||||
|
# upstream lo valida con gcc; nuestro `zig cc` es clang, que avisa de cosas
|
||||||
|
# que gcc calla. Medido: muere en `types/wlr_shm.c:503` con
|
||||||
|
# `-Werror,-Wunused-but-set-variable` sobre `has_argb8888`/`has_xrgb8888` —
|
||||||
|
# código correcto que sólo clang señala. Tratar los avisos de OTRO compilador
|
||||||
|
# como errores del proyecto es un fallo de método, no un hallazgo de calidad.
|
||||||
|
# (`werror` es opción universal de meson, no de wlroots.)
|
||||||
|
#
|
||||||
|
# ── `-Ddefault_library=both` ───────────────────────────────────────────────────────────────────
|
||||||
|
# Igual que libinput y pixman: meson produciría sólo `.so` y los consumidores (sway, labwc…)
|
||||||
|
# enlazan estático. Con `both` salen las dos y cada consumidor toma la que necesita.
|
||||||
|
#
|
||||||
|
# ── deps: la lección del `.pc Requires` ────────────────────────────────────────────────────────
|
||||||
|
# `libffi`, `expat` y `zlib` NO los usa wlroots directamente: los exigen los `.pc` de wayland y mesa
|
||||||
|
# en su línea `Requires`, y pkgconf resuelve el grafo de `.pc` COMPLETO antes de emitir un cflag.
|
||||||
|
# Omitirlos da un error que culpa a wayland o a mesa, que son inocentes. Ver `wlr-randr`, donde el
|
||||||
|
# síntoma fue «Package 'libffi', required by 'wayland-client', not found».
|
||||||
|
# `python3` va porque **meson es un script de Python**: sin intérprete, exit 127 que se lee como
|
||||||
|
# «meson no está» cuando meson sí está.
|
||||||
|
|
||||||
|
name = "wlroots"
|
||||||
|
version = "0.18.2"
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tarball = "https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.18.2/downloads/wlroots-0.18.2.tar.gz"
|
||||||
|
sha256 = "cf776c169169f279808d9eabc6583f484338dcd454c966a285ff178c88c105d4"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
compiler = "zig-cc"
|
||||||
|
target = "x86_64-linux-musl"
|
||||||
|
link = "dynamic"
|
||||||
|
zig_version = "0.13.0"
|
||||||
|
|
||||||
|
[build.phases]
|
||||||
|
configure = "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"
|
||||||
|
compile = "ninja -C output"
|
||||||
|
install = "DESTDIR=/out ninja -C output install"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
build = ["meson", "samurai", "python3", "pkgconf", "wayland", "wayland-protocols", "libdrm",
|
||||||
|
"libxkbcommon", "pixman", "mesa", "libinput", "seatd", "libudev-zero", "libevdev",
|
||||||
|
"mtdev", "libdisplay-info", "hwdata", "libffi", "expat", "zlib"]
|
||||||
|
run = ["wayland", "libdrm", "libxkbcommon", "pixman", "mesa", "libinput", "seatd"]
|
||||||
Reference in New Issue
Block a user