# libime-dict — el DICCIONARIO de pinyin. Es lo que convierte la pronunciación en caracteres. # # Hermana de `libime-lm`: el `data/CMakeLists.txt` de libime baja tres tarballs en tiempo de build y # el sandbox de takana no tiene red, así que los datos salen a recetas con su sha pineado. El # `[source]` admite una sola fuente ⇒ un tarball, una receta. La nota larga está en `libime-lm.toml`. # # ══ QUÉ TRAE Y QUÉ SALE ════════════════════════════════════════════════════════════════════════ # El tarball deja DOS ficheros de texto en la raíz, y los dos se compilan con la misma herramienta: # # dict_sc.txt → sc.dict el diccionario del chino simplificado, el que se usa a diario # dict_extb.txt → extb.dict la Extensión B de Unicode: caracteres raros e históricos # # libime_pinyindict # # Los dos se instalan, que es lo que hace upstream: `extb.dict` es opcional en el uso y el motor lo # carga sólo si hace falta, pero dejarlo afuera significa que un carácter poco común simplemente no # aparece entre los candidatos — un fallo silencioso y rarísimo de diagnosticar. # # `LIBIME_INSTALL_PKGDATADIR` = `${CMAKE_INSTALL_FULL_DATADIR}/libime` ⇒ `/usr/share/libime/`, y acá # **no se renombran** (a diferencia del modelo de lenguaje, que viaja como `zh_CN.lm`): el motor los # busca por estos nombres exactos. name = "libime-dict" version = "20260907" license = "LGPL-2.1-or-later" [source] tarball = "https://download.fcitx-im.org/data/dict-20260907.tar.zst" sha256 = "fb75a179065e690dfc4559ce1807cbaf4fbe4f0111a5005615be9f435e6b9d76" # Los dos `.txt` están en la raíz del tarball (comprobado con `tar -tf`), sin directorio contenedor. strip_components = 0 [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" flags = [] [build.phases] configure = ''' set -e for f in dict_sc.txt dict_extb.txt; do [ -f "$f" ] || { echo "libime-dict: el tarball no dejó $f en la raíz — ¿cambió strip_components?" >&2; ls -la >&2; exit 1; } done echo "libime-dict: dict_sc.txt $(stat -c%s dict_sc.txt) B · dict_extb.txt $(stat -c%s dict_extb.txt) B" ''' compile = ''' set -e libime_pinyindict dict_sc.txt sc.dict libime_pinyindict dict_extb.txt extb.dict ''' # Guardián con piso de tamaño, por lo de siempre: un `.dict` de cero bytes se sella igual y deja al # motor cargando un diccionario sin palabras — teclearías pinyin y no saldría ningún candidato. install = ''' set -e mkdir -p /out/usr/share/libime cp sc.dict extb.dict /out/usr/share/libime/ for f in sc.dict extb.dict; do t=/out/usr/share/libime/$f [ -s "$t" ] || { echo "libime-dict: $f quedó vacío o ausente — NO sello" >&2; exit 1; } n=$(stat -c%s "$t") [ "$n" -gt 102400 ] || { echo "libime-dict: $f son sólo $n bytes — esperaba >100 KiB; no se escribió" >&2; exit 1; } done echo "libime-dict: sc.dict $(stat -c%s /out/usr/share/libime/sc.dict) B + extb.dict $(stat -c%s /out/usr/share/libime/extb.dict) B" ''' [deps] # ⚠ **`fcitx5` y `zstd` NO son opcionales acá, y el fallo NO dice que falten.** Las herramientas de # libime son binarios DINÁMICOS: `libime_pinyindict` declara # `NEEDED libIMEPinyin.so.0 libIMECore.so.0 libFcitx5Utils.so.2`. El sandbox sólo monta lo # declarado, así que con `libime` a secas el cargador no encuentra `libFcitx5Utils.so.2` y la fase # muere con **`exit 127`** — que se lee como «no existe el ejecutable» y es «no existe una de sus # bibliotecas». Cuesta un rato porque el ejecutable SÍ está. # # La lista no se adivinó: se recorrió el `NEEDED` recursivamente desde los tres binarios contra los # artefactos del store. Clausura completa = `libime` + `fcitx5` + `zstd`, cero sonames huérfanos. # Es la misma figura que la cadena de tres saltos de `espeak-ng`, con una diferencia: allá el `.a` # del medio CORTABA la propagación; acá todo es `.so` y propaga, pero **declarar sigue siendo # manual** porque el sandbox es hermético a propósito. build = ["libime", "fcitx5", "zstd"]