gioser

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 Definitions

⎇ main recipes/libime-table.toml TOML · 90 lines · 4.5 KB History raw

libime: estática y PIC, porque había CUATRO libc++ en un proceso bd9c765e1 · Sergio ·

1# libime-table — los diccionarios de los métodos de entrada POR TABLA (wubi, cangjie, zhengma…).
2#
3# Hermana de `libime-lm` y `libime-dict`; la nota larga del por qué está en `libime-lm.toml`.
4#
5# ══ QUÉ SON, Y POR QUÉ NO SE SALTAN ════════════════════════════════════════════════════════════
6# El pinyin se teclea por pronunciación; los métodos por TABLA se teclean por **forma** del
7# carácter, y son lo que usa mucha gente que escribe rápido o que escribe cantonés. Son ocho
8# tablas, y cada `.txt` se compila a un `.main.dict` con la misma herramienta:
9#
10#     libime_tabledict <tabla.txt> <tabla.main.dict>
11#
12#     db.txt  erbi.txt  qxm.txt  wanfeng.txt  wbpy.txt  wbx.txt  zrm.txt  cj.txt
13#
14# ⚠ **Si esta receta no existiera, `fcitx5-chinese-addons` publicaría igual su método por tabla y no
15# tendría ni una tabla que cargar** — la figura de «sellado, con contenido, reproducible y sin la
16# función que promete» que este catálogo persigue. Por eso entra junto con las otras dos y no
17# después.
18#
19# ⚠ **`libime_tabledict` es una CUARTA herramienta, y mi guardián de `libime` sólo exigía tres.**
20# Había escrito el control contra las herramientas que necesitaban `libime-lm` y `libime-dict`
21# (`libime_slm_build_binary`, `libime_prediction`, `libime_pinyindict`) sin mirar el `data/` completo
22# de upstream, que usa también `LibIME::tabledict`. Es la misma clase de defecto que los cuatro
23# guardianes demasiado estrictos del 20-oct, con el signo contrario: **un guardián escrito contra lo
24# que yo iba a usar, no contra lo que el paquete promete.** Arreglado allá.
25#
26# Los `.main.dict` caen en `/usr/share/libime/` (`LIBIME_INSTALL_PKGDATADIR`), con el nombre que sale
27# de sustituir `.txt` por `.main.dict`, que es lo que hace el `foreach` de upstream.
28name    = "libime-table"
29version = "20240108"
30license = "LGPL-2.1-or-later"
31
32[source]
33tarball = "https://download.fcitx-im.org/data/table-20240108.tar.zst"
34sha256  = "3e9d87b04a393f131723472c8eaa860dd23c378a3d4f6a9005513b2a95b3614b"
35# Los ocho `.txt` están en la raíz del tarball (comprobado con `tar -tf`).
36strip_components = 0
37
38[build]
39compiler = "zig-cc"
40target   = "x86_64-linux-musl"
41link     = "static"
42flags    = []
43
44[build.phases]
45# La lista es EXPLÍCITA y no un glob, por el mismo motivo que upstream la escribe a mano: si el
46# tarball trajera un `.txt` más, un glob lo compilaría en silencio y el artefacto cambiaría de
47# contenido sin que nadie lo decidiera; y si trajera uno menos, el glob no se queja.
48configure = '''
49set -e
50falta=""
51for f in db erbi qxm wanfeng wbpy wbx zrm cj; do
52  [ -f "$f.txt" ] || falta="$falta $f.txt"
53done
54[ -z "$falta" ] || { echo "libime-table: el tarball no trae:$falta — upstream cambió el juego de tablas" >&2; ls -la >&2; exit 1; }
55echo "libime-table: las 8 tablas presentes"
56'''
57compile = '''
58set -e
59for f in db erbi qxm wanfeng wbpy wbx zrm cj; do
60  libime_tabledict "$f.txt" "$f.main.dict"
61done
62'''
63install = '''
64set -e
65mkdir -p /out/usr/share/libime
66n=0
67for f in db erbi qxm wanfeng wbpy wbx zrm cj; do
68  cp "$f.main.dict" /out/usr/share/libime/
69  t=/out/usr/share/libime/$f.main.dict
70  [ -s "$t" ] || { echo "libime-table: $f.main.dict quedó vacío — ese método por tabla no tendría nada que cargar" >&2; exit 1; }
71  n=$((n+1))
72done
73[ "$n" -eq 8 ] || { echo "libime-table: salieron $n de 8 tablas" >&2; exit 1; }
74echo "libime-table: $n tabla(s) compiladas en /usr/share/libime"
75'''
76
77[deps]
78# ⚠ **`fcitx5` y `zstd` NO son opcionales acá, y el fallo NO dice que falten.** Las herramientas de
79# libime son binarios DINÁMICOS: `libime_pinyindict` declara
80# `NEEDED libIMEPinyin.so.0 libIMECore.so.0 libFcitx5Utils.so.2`. El sandbox sólo monta lo
81# declarado, así que con `libime` a secas el cargador no encuentra `libFcitx5Utils.so.2` y la fase
82# muere con **`exit 127`** — que se lee como «no existe el ejecutable» y es «no existe una de sus
83# bibliotecas». Cuesta un rato porque el ejecutable SÍ está.
84#
85# La lista no se adivinó: se recorrió el `NEEDED` recursivamente desde los tres binarios contra los
86# artefactos del store. Clausura completa = `libime` + `fcitx5` + `zstd`, cero sonames huérfanos.
87# Es la misma figura que la cadena de tres saltos de `espeak-ng`, con una diferencia: allá el `.a`
88# del medio CORTABA la propagación; acá todo es `.so` y propaga, pero **declarar sigue siendo
89# manual** porque el sandbox es hermético a propósito.
90build = ["libime", "fcitx5", "zstd"]