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…
sway 1.10 SELLADA — primer compositor Wayland ligero del catálogo
1# sway 1.10 — el primer compositor Wayland ligero del catálogo. Tiling, i3-compatible, y el
2# consumidor natural de wlroots 0.18 que se selló justo antes (sway 1.10 pide `wlroots-0.18`
3# explícitamente: no es una versión cualquiera, es LA que casa).
4#
5# ── XWAYLAND: sway NO tiene perilla propia, la HEREDA de wlroots ────────────────────────────────
6# Detalle que ahorra una iteración entera. En `meson.build`:
7# xcb = wlroots_features['xwayland'] ? dependency('xcb') : null_dep
8# xcb_icccm = wlroots_features['xwayland'] ? dependency('xcb-icccm') : null_dep
9# O sea que sway LEE las variables del `.pc` de wlroots y decide. Como nuestro wlroots se selló con
10# `have_xwayland=false`, sway se salta xcb y xcb-icccm SOLO, sin que haya que pasarle nada. Para eso
11# servían esas variables que se verificaron al inspeccionar el artefacto de wlroots.
12# ⇒ Corolario: si algún día se quiere Xwayland, se cambia en wlroots, no acá.
13#
14# ── `-Dtray=disabled`: lo que esquiva la única dep que NOS FALTA ───────────────────────────────
15# La bandeja de swaybar habla D-Bus por sd-bus, y sway ofrece tres proveedores
16# (`sd-bus-provider`: libsystemd | libelogind | basu). No tenemos ninguno **utilizable**: no hay
17# systemd por decisión, `basu` no está en el catálogo, y el `libelogind` que sí tenemos NO sirve
18# acá — es la reimplementación propia de la C-ABI **sd-login** de arje-compat, no un sd-bus. (Es la
19# misma trampa del nombre que ya mordió con `knighttime`: se llama parecido y es otra cosa.)
20# ⇒ Con la bandeja apagada, sway no pide sd-bus y la receta cierra hoy. Traer `basu` es un ticket
21# aparte y pequeño, para cuando se quiera bandeja de sistema.
22#
23# ── `-Dman-pages=disabled` ─────────────────────────────────────────────────────────────────────
24# `scdoc` SÍ está en el corpus, así que esto se puede prender cuando se quiera; se deja apagado en
25# el primer sellado para que la superficie de fallo sea la mínima. Es una decisión de orden, no un
26# muro: una distro sí quiere sus man pages.
27#
28# ── `link = "dynamic"` ─────────────────────────────────────────────────────────────────────────
29# Un compositor **dlopea los drivers DRI de mesa en runtime**; estático no sirve. Mismo criterio que
30# `mirada-compositor`.
31#
32# ── `-Dc_link_args=-lexpat`: el `Requires.private` que pkg-config NO propaga ────────────────────
33# Al enlazar salían **45 símbolos indefinidos, todos `XML_*`** — o sea expat, y sólo expat (medido
34# clasificando la lista completa, no adivinando por el primero). sway no usa expat: lo usa
35# `fontconfig`, que en el corpus es ESTÁTICO, y `libfontconfig.a` trae las llamadas sin resolver.
36#
37# `fontconfig.pc` lo declara en `Requires.private`, que es justamente la línea que pkg-config sólo
38# expande cuando se le pide resolución ESTÁTICA. meson llama a `dependency('cairo')` en modo normal
39# ⇒ la línea privada se ignora y `-lexpat` nunca llega al enlazador. No es un fallo de la receta de
40# fontconfig ni de cairo: es el punto donde el modelo de pkg-config y el enlace estático no encajan.
41#
42# El frente GNOME resolvió esto por otro camino: variantes `-shared` (cairo-shared,
43# fontconfig-shared…). Acá no sirven porque viven en `incoming-gnome/` y la resolución es
44# hermano→padre. Añadir la biblioteca a mano es la solución local, exacta y verificable — y como la
45# lista de indefinidos era de UN solo prefijo, se sabe que no falta nada más.
46#
47# ── deps: otra vez el grafo de `.pc Requires` ──────────────────────────────────────────────────
48# La lista es larga y casi toda es CIERRE de los `.pc`, no uso directo de sway: pango exige glib,
49# harfbuzz, fribidi, cairo, fontconfig y freetype; cairo exige pixman, freetype, fontconfig, libpng y
50# zlib; gdk-pixbuf exige glib, libpng, libjpeg y libtiff; glib exige libffi, pcre2 y zlib. pkgconf
51# resuelve el grafo COMPLETO antes de emitir un cflag, así que omitir un nieto da un error que culpa
52# al hijo. Ver `wlr-randr`, donde faltaba `libffi` y el mensaje acusaba a `wayland-client`.
53
54name = "sway"
55version = "1.10"
56license = "MIT"
57
58[source]
59tarball = "https://github.com/swaywm/sway/releases/download/1.10/sway-1.10.tar.gz"
60sha256 = "7472a7f11150212e0bed0bd0af9f591c9caac9f9ea87c35486e475a21f5ce81f"
61
62[build]
63compiler = "zig-cc"
64target = "x86_64-linux-musl"
65link = "dynamic"
66zig_version = "0.13.0"
67
68[build.phases]
69configure = "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"
70compile = "ninja -C output"
71install = "DESTDIR=/out ninja -C output install"
72
73[deps]
74build = ["meson", "samurai", "python3", "pkgconf", "wlroots", "json-c", "pcre2", "wayland",
75 "wayland-protocols", "libxkbcommon", "cairo", "pango", "gdk-pixbuf", "pixman",
76 "libevdev", "libinput", "libdrm", "libudev-zero", "seatd", "mesa", "libdisplay-info",
77 "hwdata", "glib", "harfbuzz", "fribidi", "fontconfig", "freetype", "libpng",
78 "libjpeg-turbo", "libtiff", "expat", "libffi", "zlib", "mtdev"]
79run = ["wlroots", "mesa", "wayland", "libinput", "seatd", "libxkbcommon", "cairo", "pango"]