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