tawasuyu

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…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

fix(fcitx5): declarar la biblioteca no alcanza — hay que declarar el cierre de su `.pc`

El primer build murió al GENERAR, no al configurar: «Target "classicui" links to PkgConfig::Cairo
but the target was not found», y otro igual con `PkgConfig::Gio`. Dos errores, una sola causa, y
ninguno la nombra.

**1. `pkg_check_modules` SIN `REQUIRED` falla en silencio.** `Cairo` (CMakeLists:162) y `Gio` (:173)
se buscan así. Sin REQUIRED, pkg-config que no encuentra el módulo no aborta: simplemente no crea el
target. El configure dice «Configuring done (23.1s)» y el fallo aparece en `Generating`, nombrando
un target ausente en vez del `.pc` que falta. Es la figura de siempre acá: el síntoma a dos pasos de
la causa.

**2. Un `.pc` falla si sus `Requires:` TRANSITIVOS no están.** Medido en los artefactos:

    cairo.pc       Requires: zlib, libpng, fontconfig, freetype2, pixman-1
    pangocairo.pc  Requires: … fribidi, harfbuzz, fontconfig, freetype2, cairo
    gio-2.0.pc     Requires: glib-2.0, gobject-2.0, gmodule-no-export-2.0, zlib

Yo tenía `cairo` y `zlib` y me faltaban los otros cuatro de cairo; `glib` no lo había declarado
siquiera, de ahí el `Gio`. **Declarar la biblioteca que uno usa no alcanza: hay que declarar el
cierre de su `.pc`** — y es una lista distinta, porque un `.pc` nombra lo que hace falta para
ENLAZAR contra él, no lo que el paquete instala.

⇒ Entran `glib`, `libpng`, `fontconfig`, `freetype`, `pixman`, `fribidi`, `harfbuzz`.

Y la comprobación que evita el siguiente viaje, hecha ANTES de relanzar: armé el `PKG_CONFIG_PATH`
de ese conjunto a mano y le pregunté a `pkgconf` por los seis módulos que fcitx5 busca — `cairo`,
`gio-2.0`, `pango`, `pangocairo`, `gdk-pixbuf-2.0`, `gio-unix-2.0`: **los seis resuelven**. Un build
de cmake cuesta minutos; esa comprobación, segundos. Es el mismo instrumento que
`jaula-sysroot.sh` ya usa como control y que yo no había pensado en usar para elegir deps.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

ad9c74dd957e37d073f9a41dfd09cc6c922af900 · por Sergio · (hace 2 d) · padre dd45c60d8 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +24 −0

diff --git a/recipes/fcitx5.toml b/recipes/fcitx5.toml
index 63f90342..93bcd0a6 100644
--- a/recipes/fcitx5.toml
+++ b/recipes/fcitx5.toml
@@ -97,7 +97,31 @@ echo "fcitx5: daemon + $n addon(s) de fábrica"
 [deps]
 # `iso-codes` y `extra-cmake-modules` son las dos promovidas al corpus para esto.
 # `util-linux` por `libuuid` (`find_package(LibUUID REQUIRED)`), `gettext-tiny` por `LibIntl`.
+#
+# ⚠ **EL CIERRE DE `.pc` NO ES EL DE LAS BIBLIOTECAS, Y MI PRIMERA LISTA LO IGNORÓ.** Declaré
+# `cairo`, `pango` y `glib`… bueno, `glib` ni eso, y el build murió al GENERAR —no al configurar—
+# con `Target "classicui" links to PkgConfig::Cairo but the target was not found`.
+#
+# La causa tiene dos mitades y las dos valen la pena:
+#
+#   1. `pkg_check_modules(Cairo IMPORTED_TARGET cairo)` va **SIN `REQUIRED`** (CMakeLists:162) y lo
+#      mismo `Gio` (:173). Sin REQUIRED, pkg-config que no encuentra el módulo **no falla**: no crea
+#      el target, el configure dice «Configuring done» y el error sale después, en `Generating`,
+#      nombrando un target ausente en vez del `.pc` que falta. Dos errores distintos (Cairo y Gio)
+#      con UNA sola causa, y ninguno nombra la causa.
+#   2. Un `.pc` falla si sus `Requires:` TRANSITIVOS no están. Medido en el artefacto:
+#        cairo.pc      Requires: zlib, libpng, fontconfig, freetype2, pixman-1
+#        pangocairo.pc Requires: … fribidi, harfbuzz, fontconfig, freetype2, cairo
+#        gio-2.0.pc    Requires: glib-2.0, gobject-2.0, gmodule-no-export-2.0, zlib
+#      Yo tenía `cairo` y `zlib`, y me faltaban los otros cuatro de cairo. Declarar la biblioteca
+#      que uno usa no alcanza: hay que declarar el cierre de su `.pc`.
+#
+# ⇒ Entran `glib`, `libpng`, `fontconfig`, `freetype`, `pixman`, `fribidi`, `harfbuzz`. Comprobado
+# ANTES de relanzar, armando el `PKG_CONFIG_PATH` de este conjunto a mano y preguntando a `pkgconf`:
+# los seis módulos que fcitx5 busca —`cairo`, `gio-2.0`, `pango`, `pangocairo`, `gdk-pixbuf-2.0`,
+# `gio-unix-2.0`— resuelven. Un build de cmake cuesta minutos; esa comprobación, segundos.
 build = ["cmake", "samurai", "extra-cmake-modules", "pkgconf", "iso-codes", "xkeyboard-config",
          "libxkbcommon", "wayland", "wayland-protocols", "cairo", "pango", "gdk-pixbuf",
+         "glib", "libpng", "fontconfig", "freetype", "pixman", "fribidi", "harfbuzz",
          "dbus", "libuv", "nlohmann-json", "expat", "zlib", "gettext-tiny", "util-linux",
          "libxml2", "json-c", "python3"]