chino: la distro escribe los TRES grandes, y sin tocar nada de GNOME
fcitx5-chinese-addons sella con 6 addons (pinyin, tabla, helper de trazos,
chttrans, puntuación, ancho completo), chttrans enlazado a libopencc de verdad y
chaizi.dict presente. Los 15 artefactos de la campaña verificados contra el
store CON CONTENIDO, no sólo por presencia (regla 3).
El último muro fue consecuencia directa de hacer libime estática, y es correcto:
en una biblioteca estática cmake no resuelve las deps, así que incluso las
PRIVATE quedan en la interfaz exportada como $<LINK_ONLY:…>, y los
*Targets.cmake nombran targets importados que el consumidor debe definir —
The link interface of target "LibIME::kenlm" contains: PkgConfig::ZSTD
but the target was not found.
libime nombra PkgConfig::ZSTD en cuatro targets y Boost::iostreams en tres; con
.so nada salía al exterior. Se parchea en el CONSUMIDOR a propósito: que una
estática pida su interfaz de enlace es su contrato, no un defecto.
DECLARADO en los 5 escritorios: fcitx5-chinese-addons, opencc, libime-lm,
libime-dict, libime-table, fcitx5-pinyin-stroke, fcitx5-pinyin-table. 189 MB.
⚠ libime NO se declara, y es medido: con BUILD_SHARED_LIBS=Off entra entera
dentro de los addons — comprobado con readelf que NINGÚN .so de los addons
declara libIME*. Declararla metería 159 MB por imagen para nada, y el 90 % de
eso es .debug_* (143 de 159 MB, sumado con readelf), que es la norma del corpus
y le toca al SDD 23.
⚠ Y la estimación vieja de targets.toml era FALSA por TERCERA vez con el mismo
defecto: decía «chino 6 (libime, libpinyin, opencc, fcitx5-lua, fcitx5-qt y
qt6-qtwebengine)» y que haría falta sacar Qt de incoming-kde al corpus. Medido
sobre los CMakeLists: cero Qt, cero libpinyin, cero fcitx5-lua, cero
qtwebengine. Qt sólo aparecía detrás de ENABLE_GUI y el navegador detrás de
ENABLE_BROWSER. El mismo error estaba ya anotado dos párrafos arriba para el
japonés — leer los makedepends de otra distro en vez del CMakeLists.
Queda afuera y se dice: sin ENABLE_GUI no hay ventana de configuración (es Qt y
no tenemos fcitx5-qt), así que elegir diccionarios se hace editando ficheros. Y
ENABLE_CLOUDPINYIN=Off es decisión y no falta de dep.
Semantic delta
No definition changed: this change is text, documentation or data.
2 files · +208 −0
- docs/state/targets.toml +180 −0
- recipes/fcitx5-chinese-addons.toml +28 −0
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 3a03d96f..1de0061f 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -546,6 +546,42 @@ paquetes = [
# menciona Qt ni una vez. `anthy-unicode` viaja por su DICCIONARIO (4 ficheros), igual que
# `libhangul` por el hanja: sin los datos el motor carga y no convierte nada.
"fcitx5", "fcitx5-hangul", "libhangul", "fcitx5-anthy", "anthy-unicode",
+ # Y el CHINO (2026-10-20), que cierra los tres grandes. ⚠ **La estimación de la nota de arriba era
+ # FALSA, y es la TERCERA vez con el mismo defecto**: decía «chino 6 (`libime`, `libpinyin`,
+ # `opencc`, `fcitx5-lua`, `fcitx5-qt` y **qt6-qtwebengine**)» y que haría falta sacar Qt de
+ # `incoming-kde` al corpus. Medido sobre los `CMakeLists` y no sobre los `makedepends` de Alpine:
+ # **cero Qt, cero libpinyin, cero fcitx5-lua, cero qtwebengine.** Qt sólo aparecía detrás de
+ # `ENABLE_GUI`, que es la ventana de configuración y se apaga; el navegador embebido, detrás de
+ # `ENABLE_BROWSER`. Mismo error que ya está anotado dos párrafos arriba para el japonés.
+ #
+ # ⚠ **`libime` NO se declara acá, y eso es medido, no un olvido.** Se construye con
+ # `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias de libc++), así que entra ENTERA
+ # dentro de los addons: comprobado con `readelf -d` que **ningún** `.so` de
+ # `fcitx5-chinese-addons` declara `libIME*`. Declararla metería 159 MB en cada imagen para nada.
+ # Lo que sí viaja son sus DATOS, que el addon busca en ejecución.
+ #
+ # `fcitx5-chinese-addons` pinyin + tabla + helper de trazos + chttrans + puntuación +
+ # ancho completo. 6 addons
+ # `opencc` simplificado ↔ tradicional. Viaja porque `libchttrans.so` enlaza
+ # `libopencc.so` de verdad (lo exige el guardián): sin él la mitad del
+ # chino escrito queda afuera, y no con un error sino en silencio
+ # `libime-lm` el modelo de lenguaje (`zh_CN.lm`, 35 MB). Sin esto el pinyin carga
+ # y **no ordena candidatos**
+ # `libime-dict` el diccionario de pinyin + la Extensión B de Unicode
+ # `libime-table` las 8 tablas (wubi, cangjie, erbi…): quien escribe por FORMA y no
+ # por pronunciación. Sin ellas el método por tabla existe y no carga nada
+ # `fcitx5-pinyin-stroke` buscar un carácter por sus TRAZOS — el caso de quien no sabe cómo se
+ # `fcitx5-pinyin-table` pronuncia, que es justo cuando un método por pinyin no sirve
+ #
+ # ⚠ PESO: 189 MB los siete. El gordo es el addon (105) y el modelo (35), y **el 90 % de libime es
+ # `.debug_*`** (143 de 159 MB, sumado con readelf) — la norma del corpus, cuyo sitio es el SDD 23.
+ #
+ # ⚠ QUEDA AFUERA Y SE DICE: `ENABLE_GUI=Off` ⇒ **no hay ventana de configuración** (es Qt y no
+ # tenemos `fcitx5-qt`), así que elegir diccionarios o disposición se hace editando ficheros. Y
+ # `ENABLE_CLOUDPINYIN=Off` es DECISIÓN y no falta de dep: manda lo que teclea el usuario a un
+ # servidor remoto.
+ "fcitx5-chinese-addons", "opencc", "libime-lm", "libime-dict", "libime-table",
+ "fcitx5-pinyin-stroke", "fcitx5-pinyin-table",
# ── LA MÁQUINA HABLA (2026-10-20) ────────────────────────────────────────────────────────────
# `censo-distro.py` marcaba «accesibilidad» **4 de 4 ausente**, y es el hueco que deja gente
# afuera de verdad: sin voz, una distro no es incómoda para quien no ve — es INUSABLE. Y ninguna
@@ -707,6 +743,42 @@ paquetes = [
# menciona Qt ni una vez. `anthy-unicode` viaja por su DICCIONARIO (4 ficheros), igual que
# `libhangul` por el hanja: sin los datos el motor carga y no convierte nada.
"fcitx5", "fcitx5-hangul", "libhangul", "fcitx5-anthy", "anthy-unicode",
+ # Y el CHINO (2026-10-20), que cierra los tres grandes. ⚠ **La estimación de la nota de arriba era
+ # FALSA, y es la TERCERA vez con el mismo defecto**: decía «chino 6 (`libime`, `libpinyin`,
+ # `opencc`, `fcitx5-lua`, `fcitx5-qt` y **qt6-qtwebengine**)» y que haría falta sacar Qt de
+ # `incoming-kde` al corpus. Medido sobre los `CMakeLists` y no sobre los `makedepends` de Alpine:
+ # **cero Qt, cero libpinyin, cero fcitx5-lua, cero qtwebengine.** Qt sólo aparecía detrás de
+ # `ENABLE_GUI`, que es la ventana de configuración y se apaga; el navegador embebido, detrás de
+ # `ENABLE_BROWSER`. Mismo error que ya está anotado dos párrafos arriba para el japonés.
+ #
+ # ⚠ **`libime` NO se declara acá, y eso es medido, no un olvido.** Se construye con
+ # `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias de libc++), así que entra ENTERA
+ # dentro de los addons: comprobado con `readelf -d` que **ningún** `.so` de
+ # `fcitx5-chinese-addons` declara `libIME*`. Declararla metería 159 MB en cada imagen para nada.
+ # Lo que sí viaja son sus DATOS, que el addon busca en ejecución.
+ #
+ # `fcitx5-chinese-addons` pinyin + tabla + helper de trazos + chttrans + puntuación +
+ # ancho completo. 6 addons
+ # `opencc` simplificado ↔ tradicional. Viaja porque `libchttrans.so` enlaza
+ # `libopencc.so` de verdad (lo exige el guardián): sin él la mitad del
+ # chino escrito queda afuera, y no con un error sino en silencio
+ # `libime-lm` el modelo de lenguaje (`zh_CN.lm`, 35 MB). Sin esto el pinyin carga
+ # y **no ordena candidatos**
+ # `libime-dict` el diccionario de pinyin + la Extensión B de Unicode
+ # `libime-table` las 8 tablas (wubi, cangjie, erbi…): quien escribe por FORMA y no
+ # por pronunciación. Sin ellas el método por tabla existe y no carga nada
+ # `fcitx5-pinyin-stroke` buscar un carácter por sus TRAZOS — el caso de quien no sabe cómo se
+ # `fcitx5-pinyin-table` pronuncia, que es justo cuando un método por pinyin no sirve
+ #
+ # ⚠ PESO: 189 MB los siete. El gordo es el addon (105) y el modelo (35), y **el 90 % de libime es
+ # `.debug_*`** (143 de 159 MB, sumado con readelf) — la norma del corpus, cuyo sitio es el SDD 23.
+ #
+ # ⚠ QUEDA AFUERA Y SE DICE: `ENABLE_GUI=Off` ⇒ **no hay ventana de configuración** (es Qt y no
+ # tenemos `fcitx5-qt`), así que elegir diccionarios o disposición se hace editando ficheros. Y
+ # `ENABLE_CLOUDPINYIN=Off` es DECISIÓN y no falta de dep: manda lo que teclea el usuario a un
+ # servidor remoto.
+ "fcitx5-chinese-addons", "opencc", "libime-lm", "libime-dict", "libime-table",
+ "fcitx5-pinyin-stroke", "fcitx5-pinyin-table",
# ── LA MÁQUINA HABLA (2026-10-20) ────────────────────────────────────────────────────────────
# `censo-distro.py` marcaba «accesibilidad» **4 de 4 ausente**, y es el hueco que deja gente
# afuera de verdad: sin voz, una distro no es incómoda para quien no ve — es INUSABLE. Y ninguna
@@ -1378,6 +1450,42 @@ paquetes = [
# menciona Qt ni una vez. `anthy-unicode` viaja por su DICCIONARIO (4 ficheros), igual que
# `libhangul` por el hanja: sin los datos el motor carga y no convierte nada.
"fcitx5", "fcitx5-hangul", "libhangul", "fcitx5-anthy", "anthy-unicode",
+ # Y el CHINO (2026-10-20), que cierra los tres grandes. ⚠ **La estimación de la nota de arriba era
+ # FALSA, y es la TERCERA vez con el mismo defecto**: decía «chino 6 (`libime`, `libpinyin`,
+ # `opencc`, `fcitx5-lua`, `fcitx5-qt` y **qt6-qtwebengine**)» y que haría falta sacar Qt de
+ # `incoming-kde` al corpus. Medido sobre los `CMakeLists` y no sobre los `makedepends` de Alpine:
+ # **cero Qt, cero libpinyin, cero fcitx5-lua, cero qtwebengine.** Qt sólo aparecía detrás de
+ # `ENABLE_GUI`, que es la ventana de configuración y se apaga; el navegador embebido, detrás de
+ # `ENABLE_BROWSER`. Mismo error que ya está anotado dos párrafos arriba para el japonés.
+ #
+ # ⚠ **`libime` NO se declara acá, y eso es medido, no un olvido.** Se construye con
+ # `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias de libc++), así que entra ENTERA
+ # dentro de los addons: comprobado con `readelf -d` que **ningún** `.so` de
+ # `fcitx5-chinese-addons` declara `libIME*`. Declararla metería 159 MB en cada imagen para nada.
+ # Lo que sí viaja son sus DATOS, que el addon busca en ejecución.
+ #
+ # `fcitx5-chinese-addons` pinyin + tabla + helper de trazos + chttrans + puntuación +
+ # ancho completo. 6 addons
+ # `opencc` simplificado ↔ tradicional. Viaja porque `libchttrans.so` enlaza
+ # `libopencc.so` de verdad (lo exige el guardián): sin él la mitad del
+ # chino escrito queda afuera, y no con un error sino en silencio
+ # `libime-lm` el modelo de lenguaje (`zh_CN.lm`, 35 MB). Sin esto el pinyin carga
+ # y **no ordena candidatos**
+ # `libime-dict` el diccionario de pinyin + la Extensión B de Unicode
+ # `libime-table` las 8 tablas (wubi, cangjie, erbi…): quien escribe por FORMA y no
+ # por pronunciación. Sin ellas el método por tabla existe y no carga nada
+ # `fcitx5-pinyin-stroke` buscar un carácter por sus TRAZOS — el caso de quien no sabe cómo se
+ # `fcitx5-pinyin-table` pronuncia, que es justo cuando un método por pinyin no sirve
+ #
+ # ⚠ PESO: 189 MB los siete. El gordo es el addon (105) y el modelo (35), y **el 90 % de libime es
+ # `.debug_*`** (143 de 159 MB, sumado con readelf) — la norma del corpus, cuyo sitio es el SDD 23.
+ #
+ # ⚠ QUEDA AFUERA Y SE DICE: `ENABLE_GUI=Off` ⇒ **no hay ventana de configuración** (es Qt y no
+ # tenemos `fcitx5-qt`), así que elegir diccionarios o disposición se hace editando ficheros. Y
+ # `ENABLE_CLOUDPINYIN=Off` es DECISIÓN y no falta de dep: manda lo que teclea el usuario a un
+ # servidor remoto.
+ "fcitx5-chinese-addons", "opencc", "libime-lm", "libime-dict", "libime-table",
+ "fcitx5-pinyin-stroke", "fcitx5-pinyin-table",
# ── LA MÁQUINA HABLA (2026-10-20) ────────────────────────────────────────────────────────────
# `censo-distro.py` marcaba «accesibilidad» **4 de 4 ausente**, y es el hueco que deja gente
# afuera de verdad: sin voz, una distro no es incómoda para quien no ve — es INUSABLE. Y ninguna
@@ -1689,6 +1797,42 @@ paquetes = [
# menciona Qt ni una vez. `anthy-unicode` viaja por su DICCIONARIO (4 ficheros), igual que
# `libhangul` por el hanja: sin los datos el motor carga y no convierte nada.
"fcitx5", "fcitx5-hangul", "libhangul", "fcitx5-anthy", "anthy-unicode",
+ # Y el CHINO (2026-10-20), que cierra los tres grandes. ⚠ **La estimación de la nota de arriba era
+ # FALSA, y es la TERCERA vez con el mismo defecto**: decía «chino 6 (`libime`, `libpinyin`,
+ # `opencc`, `fcitx5-lua`, `fcitx5-qt` y **qt6-qtwebengine**)» y que haría falta sacar Qt de
+ # `incoming-kde` al corpus. Medido sobre los `CMakeLists` y no sobre los `makedepends` de Alpine:
+ # **cero Qt, cero libpinyin, cero fcitx5-lua, cero qtwebengine.** Qt sólo aparecía detrás de
+ # `ENABLE_GUI`, que es la ventana de configuración y se apaga; el navegador embebido, detrás de
+ # `ENABLE_BROWSER`. Mismo error que ya está anotado dos párrafos arriba para el japonés.
+ #
+ # ⚠ **`libime` NO se declara acá, y eso es medido, no un olvido.** Se construye con
+ # `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias de libc++), así que entra ENTERA
+ # dentro de los addons: comprobado con `readelf -d` que **ningún** `.so` de
+ # `fcitx5-chinese-addons` declara `libIME*`. Declararla metería 159 MB en cada imagen para nada.
+ # Lo que sí viaja son sus DATOS, que el addon busca en ejecución.
+ #
+ # `fcitx5-chinese-addons` pinyin + tabla + helper de trazos + chttrans + puntuación +
+ # ancho completo. 6 addons
+ # `opencc` simplificado ↔ tradicional. Viaja porque `libchttrans.so` enlaza
+ # `libopencc.so` de verdad (lo exige el guardián): sin él la mitad del
+ # chino escrito queda afuera, y no con un error sino en silencio
+ # `libime-lm` el modelo de lenguaje (`zh_CN.lm`, 35 MB). Sin esto el pinyin carga
+ # y **no ordena candidatos**
+ # `libime-dict` el diccionario de pinyin + la Extensión B de Unicode
+ # `libime-table` las 8 tablas (wubi, cangjie, erbi…): quien escribe por FORMA y no
+ # por pronunciación. Sin ellas el método por tabla existe y no carga nada
+ # `fcitx5-pinyin-stroke` buscar un carácter por sus TRAZOS — el caso de quien no sabe cómo se
+ # `fcitx5-pinyin-table` pronuncia, que es justo cuando un método por pinyin no sirve
+ #
+ # ⚠ PESO: 189 MB los siete. El gordo es el addon (105) y el modelo (35), y **el 90 % de libime es
+ # `.debug_*`** (143 de 159 MB, sumado con readelf) — la norma del corpus, cuyo sitio es el SDD 23.
+ #
+ # ⚠ QUEDA AFUERA Y SE DICE: `ENABLE_GUI=Off` ⇒ **no hay ventana de configuración** (es Qt y no
+ # tenemos `fcitx5-qt`), así que elegir diccionarios o disposición se hace editando ficheros. Y
+ # `ENABLE_CLOUDPINYIN=Off` es DECISIÓN y no falta de dep: manda lo que teclea el usuario a un
+ # servidor remoto.
+ "fcitx5-chinese-addons", "opencc", "libime-lm", "libime-dict", "libime-table",
+ "fcitx5-pinyin-stroke", "fcitx5-pinyin-table",
# ── LA MÁQUINA HABLA (2026-10-20) ────────────────────────────────────────────────────────────
# `censo-distro.py` marcaba «accesibilidad» **4 de 4 ausente**, y es el hueco que deja gente
# afuera de verdad: sin voz, una distro no es incómoda para quien no ve — es INUSABLE. Y ninguna
@@ -2019,6 +2163,42 @@ paquetes = [
# menciona Qt ni una vez. `anthy-unicode` viaja por su DICCIONARIO (4 ficheros), igual que
# `libhangul` por el hanja: sin los datos el motor carga y no convierte nada.
"fcitx5", "fcitx5-hangul", "libhangul", "fcitx5-anthy", "anthy-unicode",
+ # Y el CHINO (2026-10-20), que cierra los tres grandes. ⚠ **La estimación de la nota de arriba era
+ # FALSA, y es la TERCERA vez con el mismo defecto**: decía «chino 6 (`libime`, `libpinyin`,
+ # `opencc`, `fcitx5-lua`, `fcitx5-qt` y **qt6-qtwebengine**)» y que haría falta sacar Qt de
+ # `incoming-kde` al corpus. Medido sobre los `CMakeLists` y no sobre los `makedepends` de Alpine:
+ # **cero Qt, cero libpinyin, cero fcitx5-lua, cero qtwebengine.** Qt sólo aparecía detrás de
+ # `ENABLE_GUI`, que es la ventana de configuración y se apaga; el navegador embebido, detrás de
+ # `ENABLE_BROWSER`. Mismo error que ya está anotado dos párrafos arriba para el japonés.
+ #
+ # ⚠ **`libime` NO se declara acá, y eso es medido, no un olvido.** Se construye con
+ # `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias de libc++), así que entra ENTERA
+ # dentro de los addons: comprobado con `readelf -d` que **ningún** `.so` de
+ # `fcitx5-chinese-addons` declara `libIME*`. Declararla metería 159 MB en cada imagen para nada.
+ # Lo que sí viaja son sus DATOS, que el addon busca en ejecución.
+ #
+ # `fcitx5-chinese-addons` pinyin + tabla + helper de trazos + chttrans + puntuación +
+ # ancho completo. 6 addons
+ # `opencc` simplificado ↔ tradicional. Viaja porque `libchttrans.so` enlaza
+ # `libopencc.so` de verdad (lo exige el guardián): sin él la mitad del
+ # chino escrito queda afuera, y no con un error sino en silencio
+ # `libime-lm` el modelo de lenguaje (`zh_CN.lm`, 35 MB). Sin esto el pinyin carga
+ # y **no ordena candidatos**
+ # `libime-dict` el diccionario de pinyin + la Extensión B de Unicode
+ # `libime-table` las 8 tablas (wubi, cangjie, erbi…): quien escribe por FORMA y no
+ # por pronunciación. Sin ellas el método por tabla existe y no carga nada
+ # `fcitx5-pinyin-stroke` buscar un carácter por sus TRAZOS — el caso de quien no sabe cómo se
+ # `fcitx5-pinyin-table` pronuncia, que es justo cuando un método por pinyin no sirve
+ #
+ # ⚠ PESO: 189 MB los siete. El gordo es el addon (105) y el modelo (35), y **el 90 % de libime es
+ # `.debug_*`** (143 de 159 MB, sumado con readelf) — la norma del corpus, cuyo sitio es el SDD 23.
+ #
+ # ⚠ QUEDA AFUERA Y SE DICE: `ENABLE_GUI=Off` ⇒ **no hay ventana de configuración** (es Qt y no
+ # tenemos `fcitx5-qt`), así que elegir diccionarios o disposición se hace editando ficheros. Y
+ # `ENABLE_CLOUDPINYIN=Off` es DECISIÓN y no falta de dep: manda lo que teclea el usuario a un
+ # servidor remoto.
+ "fcitx5-chinese-addons", "opencc", "libime-lm", "libime-dict", "libime-table",
+ "fcitx5-pinyin-stroke", "fcitx5-pinyin-table",
# ── LA MÁQUINA HABLA (2026-10-20) ────────────────────────────────────────────────────────────
# `censo-distro.py` marcaba «accesibilidad» **4 de 4 ausente**, y es el hueco que deja gente
# afuera de verdad: sin voz, una distro no es incómoda para quien no ve — es INUSABLE. Y ninguna
diff --git a/recipes/fcitx5-chinese-addons.toml b/recipes/fcitx5-chinese-addons.toml
index 2124f600..5798a5fb 100644
--- a/recipes/fcitx5-chinese-addons.toml
+++ b/recipes/fcitx5-chinese-addons.toml
@@ -115,6 +115,34 @@ PYEOF
grep -qE 'fcitx5_download|fcitx5_extract|download\.fcitx-im\.org' "$PH" && { echo "fcitx5-chinese-addons: $PH todavía referencia la red tras el parche" >&2; grep -nE 'fcitx5_download|fcitx5_extract|download' "$PH" >&2; exit 1; }
echo "fcitx5-chinese-addons: pinyinhelper sin descargas"
+# ⚠ **PARCHE 2: una libime ESTÁTICA exige que el consumidor provea su interfaz de enlace.**
+# `recipes/libime.toml` construye con `BUILD_SHARED_LIBS=Off` (por el segfault de las cuatro copias
+# de libc++; la nota larga está allá). Consecuencia directa: en una biblioteca estática cmake NO
+# resuelve las deps, así que **incluso las `PRIVATE` quedan en la interfaz exportada** como
+# `$<LINK_ONLY:…>` — y los `*Targets.cmake` instalados nombran targets importados que ESTA receta
+# tiene que definir antes de buscarlos:
+#
+# CMake Error at /usr/lib/cmake/LibIMECore/LibIMECoreTargets.cmake:70 (set_target_properties):
+# The link interface of target "LibIME::kenlm" contains: PkgConfig::ZSTD
+# but the target was not found.
+#
+# libime nombra `PkgConfig::ZSTD` en cuatro targets (`kenlm`, `IMECore`, `IMEPinyin`, `IMETable`) y
+# `Boost::iostreams` en tres. Con `.so` nada de eso salía al exterior; con `.a` sí.
+#
+# ⇒ Se parchea ACÁ y no en libime a propósito: que una estática pida su interfaz es correcto, no un
+# defecto. Lo que faltaba es que el consumidor la declare. Dos cambios, cada uno comprobado:
+# · `pkg_check_modules(ZSTD … IMPORTED_TARGET libzstd)` ANTES del `find_package(LibIMEPinyin…)`
+# · el `find_package(Boost …)` ya existente pasa a pedir el componente `iostreams`
+CA=CMakeLists.txt
+grep -q 'find_package(LibIMEPinyin' "$CA" || { echo "fcitx5-chinese-addons: no encuentro find_package(LibIMEPinyin …) donde insertar el target de zstd" >&2; exit 1; }
+sed -i 's|^find_package(LibIMEPinyin|pkg_check_modules(ZSTD REQUIRED IMPORTED_TARGET "libzstd")\nfind_package(LibIMEPinyin|' "$CA"
+grep -q 'pkg_check_modules(ZSTD REQUIRED IMPORTED_TARGET' "$CA" || { echo "fcitx5-chinese-addons: el parche del target PkgConfig::ZSTD no se aplicó" >&2; exit 1; }
+
+grep -q 'find_package(Boost 1.61 OPTIONAL_COMPONENTS json)' "$CA" || { echo "fcitx5-chinese-addons: el find_package(Boost …) no tiene la forma esperada; REVISAR" >&2; grep -n 'find_package(Boost' "$CA" >&2; exit 1; }
+sed -i 's|find_package(Boost 1.61 OPTIONAL_COMPONENTS json)|find_package(Boost 1.61 REQUIRED CONFIG COMPONENTS iostreams OPTIONAL_COMPONENTS json)|' "$CA"
+grep -q 'COMPONENTS iostreams' "$CA" || { echo "fcitx5-chinese-addons: el parche del componente iostreams no se aplicó" >&2; exit 1; }
+echo "fcitx5-chinese-addons: interfaz de enlace de la libime estática declarada (zstd + boost iostreams)"
+
rm -rf build
cmake -B build -G Ninja -Wno-dev \
-DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" \