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-hangul): mi guardián era demasiado literal y paró un build que había salido bien

El motor **compiló y se instaló entero** —`[21/21] Linking CXX shared module bin/libhangul.so`, el
`.conf`, los datos de símbolos, las traducciones, los iconos— y mi guardián lo rechazó:

    fcitx5-hangul: no quedó el addon hangul.so — NO sello un motor que el daemon no puede cargar

Pedía `hangul.so` y el build instala **`libhangul.so`**. La convención de fcitx5 es `lib<nombre>.so`
y estaba a la vista en su propio artefacto —`libclassicui.so`, `libclipboard.so`, `libdbus.so`— o
sea que la supuse en vez de mirarla, teniéndola a un `ls` de distancia.

⇒ **Un guardián demasiado literal rechaza trabajo bueno, que es la otra forma de ser inútil.** He
pasado el día cazando lo contrario —cosas selladas con contenido y sin función— y acá produje el
error simétrico. Ahora busca por SUBCADENA (`*hangul*.so`) dentro del directorio de addons, que es
lo que de verdad importa, y sigue exigiendo el `hangul.conf` por nombre exacto porque ése sí lo fija
fcitx5. Si falla, lista `/usr/lib` para que el siguiente vea qué hay en vez de adivinar.

Lo que el intento SÍ demostró, y es lo que importa: con `fcitx5` reconstruido con
`ENABLE_TESTING_ADDONS=On` (radio 1), el motor **atraviesa el configure, compila y enlaza** —
incluido el `.so` contra `libhangul.a`, que nació PIC justamente para esto. Las piezas instaladas:

    usr/lib/fcitx5/libhangul.so
    usr/share/fcitx5/addon/hangul.conf
    usr/share/fcitx5/hangul/symbol.txt
    + metainfo y 12 traducciones

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

a1ef64ee420e881f780b507f2ba6fa16b3f7fb70 · por Sergio · (hace 2 d) · padre 8a64763d4 · ver el árbol en este commit

Delta semántico

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

1 archivos · +14 −6

diff --git a/recipes/fcitx5-hangul.toml b/recipes/fcitx5-hangul.toml
index 86b96701..e26fff2c 100644
--- a/recipes/fcitx5-hangul.toml
+++ b/recipes/fcitx5-hangul.toml
@@ -65,17 +65,25 @@ cmake -B build -G Ninja -Wno-dev \
 compile = "cmake --build build"
 # El guardián pide el `.so` del addon Y su `.conf`. Las dos piezas hacen falta y por razones
 # distintas: sin el `.so` no hay motor; sin el `.conf` en `share/fcitx5/addon/` el daemon no sabe
-# que existe y no lo carga nunca — sellaría con contenido, reproducible e inerte, que es
-# exactamente lo que la regla 3 persigue.
+# que existe y no lo carga nunca — sellaría con contenido, reproducible e inerte, que es lo que la
+# regla 3 persigue.
+#
+# ⚠ **Y NO SE CODIFICA EL NOMBRE EXACTO DEL FICHERO, porque mi primera versión lo hizo y dio un
+# FALSO POSITIVO.** Pedía `hangul.so` y el build instala **`libhangul.so`**: la convención de fcitx5
+# es `lib<nombre>.so` —estaba a la vista en su propio artefacto (`libclassicui.so`,
+# `libclipboard.so`, `libdbus.so`…)— y yo la supuse en vez de mirarla. El build había salido BIEN y
+# el guardián lo paró: un guardián demasiado literal rechaza trabajo bueno, que es la otra forma de
+# ser inútil. Se busca por SUBCADENA dentro del directorio de addons, que es lo que de verdad
+# importa (que haya un módulo de hangul ahí), y se exige el `.conf` por su nombre porque ése sí lo
+# fija fcitx5.
 install = '''
 set -e
 DESTDIR=/out cmake --install build
-so=$(find /out/usr/lib/fcitx5 -name 'hangul.so' 2>/dev/null | head -1)
-[ -n "$so" ] || { echo "fcitx5-hangul: no quedó el addon hangul.so — NO sello un motor que el daemon no puede cargar" >&2; exit 1; }
+so=$(find /out/usr/lib/fcitx5 -name '*hangul*.so' 2>/dev/null | head -1)
+[ -n "$so" ] || { echo "fcitx5-hangul: no hay ningún *hangul*.so en /usr/lib/fcitx5 — NO sello un motor que el daemon no puede cargar" >&2; ls -R /out/usr/lib 2>/dev/null | head -20 >&2; exit 1; }
 [ -f /out/usr/share/fcitx5/addon/hangul.conf ] || { echo "fcitx5-hangul: falta share/fcitx5/addon/hangul.conf — sin él el daemon no sabe que el addon existe" >&2; exit 1; }
-echo "fcitx5-hangul: addon $so + su .conf · $(ls /out/usr/share/fcitx5/inputmethod/*.conf 2>/dev/null | wc -l) método(s) de entrada declarado(s)"
+echo "fcitx5-hangul: addon $(basename "$so") + hangul.conf · datos: $(ls /out/usr/share/fcitx5/hangul/ 2>/dev/null | tr '\n' ' ')"
 '''
-
 [deps]
 # `fcitx5` provee las cabeceras y los `.cmake` de `Fcitx5Core`/`Fcitx5Utils`; `libhangul`, el motor.
 # El resto es el cierre de `.pc` que el enlace de un `.so` necesita — la lección de ayer: declarar