# 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"]
