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>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +24 −0
- recipes/fcitx5.toml +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"]