b3:ae10753a5467f3642464aaad0b1b41135b8c51972091042baf0d09134af46c7e · sway, swaybar,
swaymsg y swaynag. Construido en el worker sobre el wlroots 0.18.2 sellado hace un rato
(sway 1.10 pide `wlroots-0.18` explícitamente: no es una versión cualquiera, es LA que casa).
XWAYLAND SE HEREDA, NO SE PASA. sway no tiene perilla propia: lee las variables del .pc de
wlroots (`xcb = wlroots_features['xwayland'] ? dependency('xcb') : null_dep`). Como nuestro
wlroots se selló con have_xwayland=false, sway se salta xcb y xcb-icccm solo. Para eso servía
haber inspeccionado esas variables al verificar el artefacto anterior. Si algún día se quiere
Xwayland, se cambia en wlroots, no acá.
TRES COSAS QUE SALIERON AL CONSTRUIR, y ninguna estaba en sway:
1. `json-c` NO DECLARABA NADA y sellaba igual — porque el rootfs del laptop trae cmake y make
y el sandbox los tomaba «de prestado». En el worker muere con `cmake: not found` (exit 127,
el mismo código que engaña con meson). Una receta que sólo construye en la máquina del autor
es una bomba de relojería. Declarados cmake+make+pkgconf; el arreglo es declarar, NUNCA
engordar el rootfs del worker. Re-hashea json-c y su único dependiente, que es sway: gratis.
Salió a la luz construyendo sway, o sea que el fallo estaba a tres niveles de donde miraba.
2. 45 SÍMBOLOS INDEFINIDOS AL ENLAZAR, todos `XML_*` — expat, y sólo expat (clasificada la
lista completa, no adivinado por el primero). sway no usa expat: lo usa `fontconfig`, que en
el corpus es estático, y su `.a` trae las llamadas sin resolver. `fontconfig.pc` lo declara
en `Requires.private`, que es la línea que pkg-config sólo expande en resolución ESTÁTICA, y
meson llama a dependency('cairo') en modo normal. No es un fallo de fontconfig ni de cairo:
es donde el modelo de pkg-config y el enlace estático no encajan. Resuelto con
`-Dc_link_args=-lexpat`; como los indefinidos eran de UN solo prefijo, se sabe que no falta
nada más.
3. `-Dtray=disabled` esquiva la única dep que nos falta de verdad. La bandeja habla sd-bus y
sway ofrece tres proveedores (libsystemd | libelogind | basu): no hay systemd por decisión,
`basu` no está en el catálogo, y el `libelogind` que sí tenemos NO sirve — es la
reimplementación propia de la C-ABI sd-login de arje-compat, no un sd-bus. Misma trampa del
nombre que ya mordió con `knighttime`. Traer basu es un ticket aparte y pequeño.
Con esto el frente de WMs ligeros deja de ser un hueco: había 0 compositores y ahora hay uno
que arranca desde wlroots propio, sin X11 y sin systemd.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
40 lines
2.0 KiB
TOML
40 lines
2.0 KiB
TOML
# json-c 0.18 — lib C base (de-Alpinizada, Etapa G). compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16), configure-split, estático.
|
|
name = "json-c"
|
|
version = "0.18"
|
|
|
|
[source]
|
|
tarball = "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.18.tar.gz"
|
|
sha256 = "876ab046479166b869afc6896d288183bbc0e5843f141200c677b3e8dfb11724"
|
|
patches = ["cmake-version.patch"]
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = []
|
|
|
|
[build.phases]
|
|
configure = 'cmake -B build -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release'
|
|
compile = 'cmake --build build'
|
|
install = 'DESTDIR=/out cmake --install build'
|
|
|
|
|
|
# ── SIN `[deps]` CONSTRUÍA POR ACCIDENTE ────────────────────────────────────────────────────────
|
|
# Esta receta no declaraba NADA, y aun así sellaba — porque el rootfs del laptop trae `cmake` y
|
|
# `make` instalados, así que el sandbox los encontraba «de prestado». En el worker, que no los trae,
|
|
# muere con `/bin/sh: cmake: not found` y **exit 127**, el mismo código que engaña en el caso de
|
|
# meson: se lee como «cmake no está» y lo que falta es DECLARARLO, no instalarlo.
|
|
#
|
|
# Salió a la luz construyendo `sway`, que depende de json-c: el fallo no estaba en sway ni en la
|
|
# receta que se estaba escribiendo, sino en una dep de tercer nivel que llevaba tiempo mintiendo.
|
|
#
|
|
# ⇒ El arreglo es declarar la herramienta, **NUNCA engordar el rootfs del worker**: engordarlo haría
|
|
# que el build dependa de qué hay instalado en una máquina concreta, que es exactamente lo que
|
|
# rompe la reproducibilidad. Y una receta que sólo construye en la máquina del autor es una bomba
|
|
# de relojería: funciona hasta que alguien más la toca.
|
|
#
|
|
# `make` va además de `cmake` porque el generador por defecto de cmake en Unix es «Unix Makefiles»
|
|
# ⇒ `cmake --build build` invoca `make` por debajo.
|
|
[deps]
|
|
build = ["cmake", "make", "pkgconf"]
|