From 2b5d5184860aeae91dd0aff10baed2ce257ac6d6 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 3 Aug 2026 11:08:00 -0400 Subject: [PATCH] =?UTF-8?q?cosmic:=20libxkbcommon=20va=20en=20TODA=20la=20?= =?UTF-8?q?cola=20=E2=80=94=20la=20dep=20no=20se=20deduce=20de=20la=20func?= =?UTF-8?q?i=C3=B3n=20del=20paquete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cosmic-idle se escribió sin [deps] con un argumento que parecía sólido: no usa smithay-client-toolkit (el que hizo caer a cosmic-bg) y un demonio de inactividad no interpreta teclas. Reventó igual, pero en el ENLACE y no en un build.rs: -lxkbcommon lo arrastra cosmic-settings-config, de donde sale la tabla de atajos y que usa TODO componente de la suite. La dep no viene de lo que el paquete hace sino de la librería de configuración común. Dos veces el mismo error de método con dos razonamientos distintos, y las dos veces el mensaje decía exactamente quién y por qué. Queda en el runbook como regla, no como anécdota. Co-Authored-By: Claude Opus 5 (1M context) --- docs/runbooks/cosmic-desktop.md | 26 ++++++++++++++++++------ recipes/incoming-cosmic/cosmic-idle.toml | 17 ++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md index a64dd2e6..0e05bcc9 100644 --- a/docs/runbooks/cosmic-desktop.md +++ b/docs/runbooks/cosmic-desktop.md @@ -95,12 +95,26 @@ separa la capa de UI del transporte; sin él, las dos preguntas llegan juntas. 6. **Las features de smithay que asustan no cuestan deps de build**: `backend_vulkan` (crate `ash`), `backend_x11` (`x11rb` con `dl-libxcb`) y `xwayland` cargan todo por **dlopen**. Son deuda de RUNTIME —libxcb y vulkan-loader viven hoy sólo en la cola KDE—, no un muro de compilación. -7. **«Habla Wayland en Rust» ≠ «no toca C».** cosmic-bg se escribió sin `[deps]` con ese argumento y - reventó en el `build.rs` de `smithay-client-toolkit` pidiendo `xkbcommon.pc`: **sctk ENLAZA - libxkbcommon**; el que la dlopea es `winit`, que es otra capa. Hablar el protocolo en Rust dice - cómo viaja el byte, no con qué se interpreta un teclado. `libxkbcommon` + `pkgconf` en `[deps]`, y - el `link = "static"` sigue siendo verdad porque su artefacto trae `.a` además de `.so`. - **Corolario para el resto de la cola: todo cliente de la suite va a necesitar al menos esos dos.** +7. **`libxkbcommon` + `pkgconf` van en TODA la cola, sin excepción — incluso en las piezas sin + interfaz.** Se aprendió dos veces, con dos razonamientos distintos y los dos equivocados: + - `cosmic-bg` fue sin `[deps]` porque «habla el protocolo en Rust y no toca C». Reventó en el + `build.rs` de `smithay-client-toolkit` pidiendo `xkbcommon.pc`: **sctk ENLAZA libxkbcommon**; el + que la dlopea es `winit`, que es otra capa. Hablar Wayland en Rust dice cómo viaja el byte, no + con qué se interpreta un teclado. + - `cosmic-idle` fue sin `[deps]` porque *ese* argumento ya no aplicaba —no usa sctk— y un demonio + de inactividad no interpreta teclas. Reventó en el ENLACE con `-lxkbcommon`, arrastrado por + **`cosmic-settings-config`**: de ahí sale la tabla de atajos y la usa **todo** componente de la + suite. La dep no viene de lo que el paquete hace, sino de la librería de configuración común. + + La lección de método vale más que la dep: **la dep no se deduce de la función del paquete.** Está + escrita en el `build.rs` que panickea o en la línea de enlace, y las dos veces el error dijo + exactamente quién y por qué. El `link = "static"` sobrevive porque el artefacto de libxkbcommon + trae `.a` además de `.so`. +8. **Una feature apagada en el paquete puede estar prendida por otro.** `cosmic-bg` declara `image` + con `default-features = false` y sin AVIF, y aun así compila `dav1d-sys`: **las features de cargo + se UNIFICAN en el grafo**. Se resolvió trayendo `dav1d` (b3:aab7a874) en vez de parchear el + Cargo.toml de upstream — si el grafo dice que sabe decodificar AVIF, que lo sepa de verdad. + Mismo modo de falla que un `.pc Requires` arrastrando una dep que nadie declaró. ## Cómo se construye diff --git a/recipes/incoming-cosmic/cosmic-idle.toml b/recipes/incoming-cosmic/cosmic-idle.toml index a592db81..089ddae0 100644 --- a/recipes/incoming-cosmic/cosmic-idle.toml +++ b/recipes/incoming-cosmic/cosmic-idle.toml @@ -2,10 +2,16 @@ # `wayland-client` + los protocolos `staging`/`wlr` de idle-notify, `calloop` para el bucle, y zbus # contra UPower para saber si hay batería. # -# Sin `[deps]` a propósito y no por descuido: a diferencia de cosmic-bg NO usa smithay-client-toolkit -# —que es quien enlaza libxkbcommon (ver el gotcha 7 del runbook)—, y no necesita interpretar teclas: -# le alcanza con que el compositor le avise que nadie tocó nada. Si el build pide un `.pc`, el que lo -# pide se ve en el `build.rs` que panickea, y eso es un dato, no una conjetura. +# ── LLEVA libxkbcommon, Y EL RAZONAMIENTO DE QUE NO HACÍA FALTA ERA BUENO Y FALSO ─────────────── +# Se escribió sin `[deps]` con este argumento: no usa smithay-client-toolkit —que es quien enlaza +# libxkbcommon— y un demonio de inactividad no interpreta teclas, le alcanza con que el compositor le +# avise que nadie tocó nada. El enlace lo refutó: `-lxkbcommon`, arrastrado por +# **`cosmic-settings-config`**, que es de donde sale la tabla de atajos y **la usa TODO componente de +# la suite**. O sea que la dep no viene de lo que el programa hace, sino de la librería de +# configuración común — y por eso no se deduce mirando la función del paquete. +# +# La conclusión general está en el gotcha 7 del runbook: `libxkbcommon` + `pkgconf` van en TODA la +# cola, sin excepción, incluso en las piezas sin interfaz. name = "cosmic-idle" version = "1.5.0" @@ -25,3 +31,6 @@ mkdir -p /out/usr/bin cp target/release/cosmic-idle /out/usr/bin/cosmic-idle chmod 755 /out/usr/bin/cosmic-idle ''' + +[deps] +build = ["libxkbcommon", "pkgconf"]