fix(fcitx5): el cierre de `.pc` tiene más de un nivel, y mi comprobación daba un falso verde
Tercer fallo con el MISMO mensaje de target ausente, y la causa real estaba en el log del configure
cuatro líneas más arriba, sin llamar la atención:
-- Checking for module 'cairo' → Found cairo, version 1.18.4
-- Checking for modules 'pango;pangocairo' → Package 'libpcre2-8', required by 'glib-2.0', not found
O sea: **cairo sí resolvía** —mi corrección anterior era correcta— y lo que faltaba era `pcre2`, DOS
saltos por debajo: `pango` → `glib-2.0` → `libpcre2-8`. Como `pkg_check_modules` va sin REQUIRED, no
grita: el único síntoma visible es el target que no existe, a dos niveles de distancia de la causa.
⚠⚠ **Y MI COMPROBACIÓN ANTERIOR DIO UN FALSO VERDE, por dos errores de método a la vez:**
1. **Usé `pkgconf --exists`, que no valida los `Requires:` transitivos.** Lo que hace cmake es
`--cflags --libs`, que sí. Hay que preguntar lo mismo que pregunta el que falla.
2. **Exporté sólo `PKG_CONFIG_PATH` y no `PKG_CONFIG_LIBDIR`.** Sin LIBDIR, pkgconf busca ADEMÁS en
el camino del sistema — y esta jaula es una imagen de Arch que sí trae pcre2. **La comprobación
estaba leyendo el anfitrión.** Es exactamente el apagón que `jaula-sysroot.sh` ya documenta: «con
el sysroot a medias eso "andaba" porque lld caía al /usr/lib de Arch». Lo tenía escrito en el
repo y lo repetí igual.
⇒ Entran `pcre2` y `libffi`. Y el chequeo que queda documentado en la receta es el FUERTE: LIBDIR
puesto y `--cflags --libs`, sobre los doce módulos que este build pide (cairo, gio-2.0, gio-unix-2.0,
pango, pangocairo, gdk-pixbuf-2.0, wayland-client, wayland-cursor, xkbcommon, dbus-1, libuv,
json-c). **Los doce resuelven, cero fallan.**
El balance honesto de los tres viajes: el primero encontró un hueco real (glib y el cierre de cairo),
el segundo no encontró nada porque el cache de cmake repetía el error viejo, y el tercero encontró el
nivel que faltaba. Dos de los tres se habrían evitado con el chequeo fuerte desde el principio, que
cuesta segundos.
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 · +22 −4
- recipes/fcitx5.toml +22 −4
diff --git a/recipes/fcitx5.toml b/recipes/fcitx5.toml
index e3d8d308..ae475d16 100644
--- a/recipes/fcitx5.toml
+++ b/recipes/fcitx5.toml
@@ -130,12 +130,30 @@ echo "fcitx5: daemon + $n addon(s) de fábrica"
# 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.
+# ⚠ **Y EL CIERRE TIENE MÁS DE UN NIVEL: `glib-2.0.pc` exige `libpcre2-8`.** El build volvió a
+# morir con el MISMO mensaje de target ausente, y el motivo real estaba cuatro líneas más arriba en
+# el log del configure, sin llamar la atención:
+# -- Checking for module 'cairo' → Found cairo, version 1.18.4
+# -- Checking for modules 'pango;pangocairo' → Package 'libpcre2-8', required by 'glib-2.0', not found
+# O sea: cairo SÍ resolvía, y lo que faltaba era `pcre2`, dos saltos por debajo. `pkg_check_modules`
+# sin REQUIRED no grita, así que el único síntoma es el target que no existe.
+#
+# ⚠⚠ **Y MI PRIMERA COMPROBACIÓN DIO UN FALSO VERDE, por dos errores de método a la vez:**
+# 1. Usé `pkgconf --exists`, que NO valida los `Requires:` transitivos. Lo que hace cmake es
+# `--cflags --libs`, que sí. Hay que preguntar lo mismo que pregunta el que falla.
+# 2. Exporté sólo `PKG_CONFIG_PATH` y no `PKG_CONFIG_LIBDIR`. Sin LIBDIR, pkgconf **además**
+# busca en el camino del SISTEMA — y esta jaula es una imagen de Arch que SÍ trae pcre2. La
+# comprobación estaba leyendo el anfitrión. Es exactamente el apagón que `jaula-sysroot.sh`
+# documenta («con el sysroot a medias eso "andaba" porque lld caía al /usr/lib de Arch»).
+#
+# ⇒ Entran `glib`, `libpng`, `fontconfig`, `freetype`, `pixman`, `fribidi`, `harfbuzz`, `pcre2`,
+# `libffi`. Verificado con el chequeo FUERTE —`PKG_CONFIG_LIBDIR` puesto y `--cflags --libs`— sobre
+# los doce módulos que este build pide: `cairo`, `gio-2.0`, `gio-unix-2.0`, `pango`, `pangocairo`,
+# `gdk-pixbuf-2.0`, `wayland-client`, `wayland-cursor`, `xkbcommon`, `dbus-1`, `libuv`, `json-c`.
+# Los doce resuelven, cero fallan.
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",
+ "pcre2", "libffi",
"dbus", "libuv", "nlohmann-json", "expat", "zlib", "gettext-tiny", "util-linux",
"libxml2", "json-c", "python3"]