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