# sway 1.10 — el primer compositor Wayland ligero del catálogo. Tiling, i3-compatible, y el
# consumidor natural de wlroots 0.18 que se selló justo antes (sway 1.10 pide `wlroots-0.18`
# explícitamente: no es una versión cualquiera, es LA que casa).
#
# ── XWAYLAND: sway NO tiene perilla propia, la HEREDA de wlroots ────────────────────────────────
# Detalle que ahorra una iteración entera. En `meson.build`:
#     xcb       = wlroots_features['xwayland'] ? dependency('xcb')       : null_dep
#     xcb_icccm = wlroots_features['xwayland'] ? dependency('xcb-icccm') : null_dep
# O sea que sway LEE las variables del `.pc` de wlroots y decide. Como nuestro wlroots se selló con
# `have_xwayland=false`, sway se salta xcb y xcb-icccm SOLO, sin que haya que pasarle nada. Para eso
# servían esas variables que se verificaron al inspeccionar el artefacto de wlroots.
# ⇒ Corolario: si algún día se quiere Xwayland, se cambia en wlroots, no acá.
#
# ── `-Dtray=disabled`: lo que esquiva la única dep que NOS FALTA ───────────────────────────────
# La bandeja de swaybar habla D-Bus por sd-bus, y sway ofrece tres proveedores
# (`sd-bus-provider`: libsystemd | libelogind | basu). No tenemos ninguno **utilizable**: no hay
# systemd por decisión, `basu` no está en el catálogo, y el `libelogind` que sí tenemos NO sirve
# acá — es la reimplementación propia de la C-ABI **sd-login** de arje-compat, no un sd-bus. (Es la
# misma trampa del nombre que ya mordió con `knighttime`: se llama parecido y es otra cosa.)
# ⇒ Con la bandeja apagada, sway no pide sd-bus y la receta cierra hoy. Traer `basu` es un ticket
#   aparte y pequeño, para cuando se quiera bandeja de sistema.
#
# ── `-Dman-pages=disabled` ─────────────────────────────────────────────────────────────────────
# `scdoc` SÍ está en el corpus, así que esto se puede prender cuando se quiera; se deja apagado en
# el primer sellado para que la superficie de fallo sea la mínima. Es una decisión de orden, no un
# muro: una distro sí quiere sus man pages.
#
# ── `link = "dynamic"` ─────────────────────────────────────────────────────────────────────────
# Un compositor **dlopea los drivers DRI de mesa en runtime**; estático no sirve. Mismo criterio que
# `mirada-compositor`.
#
# ── `-Dc_link_args=-lexpat`: el `Requires.private` que pkg-config NO propaga ────────────────────
# Al enlazar salían **45 símbolos indefinidos, todos `XML_*`** — o sea expat, y sólo expat (medido
# clasificando la lista completa, no adivinando por el primero). sway no usa expat: lo usa
# `fontconfig`, que en el corpus es ESTÁTICO, y `libfontconfig.a` trae las llamadas sin resolver.
#
# `fontconfig.pc` lo declara en `Requires.private`, que es justamente la línea que pkg-config sólo
# expande cuando se le pide resolución ESTÁTICA. meson llama a `dependency('cairo')` en modo normal
# ⇒ la línea privada se ignora y `-lexpat` nunca llega al enlazador. No es un fallo de la receta de
# fontconfig ni de cairo: es el punto donde el modelo de pkg-config y el enlace estático no encajan.
#
# El frente GNOME resolvió esto por otro camino: variantes `-shared` (cairo-shared,
# fontconfig-shared…). Acá no sirven porque viven en `incoming-gnome/` y la resolución es
# hermano→padre. Añadir la biblioteca a mano es la solución local, exacta y verificable — y como la
# lista de indefinidos era de UN solo prefijo, se sabe que no falta nada más.
#
# ── deps: otra vez el grafo de `.pc Requires` ──────────────────────────────────────────────────
# La lista es larga y casi toda es CIERRE de los `.pc`, no uso directo de sway: pango exige glib,
# harfbuzz, fribidi, cairo, fontconfig y freetype; cairo exige pixman, freetype, fontconfig, libpng y
# zlib; gdk-pixbuf exige glib, libpng, libjpeg y libtiff; glib exige libffi, pcre2 y zlib. pkgconf
# resuelve el grafo COMPLETO antes de emitir un cflag, así que omitir un nieto da un error que culpa
# al hijo. Ver `wlr-randr`, donde faltaba `libffi` y el mensaje acusaba a `wayland-client`.

name    = "sway"
version = "1.10"
license = "MIT"

[source]
tarball = "https://github.com/swaywm/sway/releases/download/1.10/sway-1.10.tar.gz"
sha256  = "7472a7f11150212e0bed0bd0af9f591c9caac9f9ea87c35486e475a21f5ce81f"

[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 -Dtray=disabled -Dman-pages=disabled -Dgdk-pixbuf=enabled -Ddefault-wallpaper=false -Dc_link_args=-lexpat"
compile   = "ninja -C output"
install   = "DESTDIR=/out ninja -C output install"

[deps]
build = ["meson", "samurai", "python3", "pkgconf", "wlroots", "json-c", "pcre2", "wayland",
         "wayland-protocols", "libxkbcommon", "cairo", "pango", "gdk-pixbuf", "pixman",
         "libevdev", "libinput", "libdrm", "libudev-zero", "seatd", "mesa", "libdisplay-info",
         "hwdata", "glib", "harfbuzz", "fribidi", "fontconfig", "freetype", "libpng",
         "libjpeg-turbo", "libtiff", "expat", "libffi", "zlib", "mtdev"]
run   = ["wlroots", "mesa", "wayland", "libinput", "seatd", "libxkbcommon", "cairo", "pango"]
