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 Sutichaykuna

⎇ main recipes/opencc.toml TOML · 89 siq'ikuna · 5.7 KB Ñawpa willay ch'uya

opencc: faltaba declarar python3, y la perilla me engañó 52e854a97 · Sergio ·

1# OpenCC 1.4.2 — conversión entre chino SIMPLIFICADO y TRADICIONAL.
2#
3# ══ POR QUÉ ENTRA ══════════════════════════════════════════════════════════════════════════════
4# Es la dep de `chttrans`, el addon de `fcitx5-chinese-addons` que convierte al vuelo lo que
5# escribís. Sin él, `ENABLE_OPENCC=Off` y la distro sabe escribir chino **simplificado y nada más**:
6# quien escribe en Taiwán, Hong Kong o Macao teclea el mismo pinyin y obtiene los caracteres
7# equivocados. No es un adorno regional — es la mitad de los usuarios de chino escrito.
8#
9# ⚠ Y no es «un idioma más con otra fuente»: la conversión no es carácter a carácter. Hay
10# correspondencias de uno a varios que dependen del SENTIDO de la palabra (el clásico 发 → 髮 pelo o
11# 發 emitir), y por eso OpenCC lleva diccionarios de frases y no una tabla. Eso es lo que se compila
12# en su fase `data`.
13#
14# ══ ES AUTOCONTENIDO, Y ESO SE COMPROBÓ ANTES DE ESCRIBIR LA RECETA ════════════════════════════
15# OpenCC vendoriza TODAS sus deps dentro del árbol, con contenido real y sin un solo submódulo
16# (medido sobre el tarball: `darts-clone` 4 ficheros, `marisa` 111, `rapidjson` 39, `tclap` 29; cero
17# directorios vacíos; cero `FetchContent`/`file(DOWNLOAD)`). Sus perillas `USE_SYSTEM_*` vienen
18# todas en `OFF`, así que por defecto usa lo vendorizado.
19#
20# ⇒ **Cero deps nuevas en el corpus.** Eso es lo que hace que valga la pena: el tradicional sale por
21# una sola receta. Lo contrario de `librsvg`, que arrastraba la pila de introspección de GNOME.
22#
23# `BUILD_SHARED_LIBS=ON`: `chttrans` es un addon `.so` que el daemon abre con `dlopen`, y enlazarlo
24# contra una `libopencc.a` no-PIC es el muro del 19-oct. Con `ON`, `marisa` y compañía se compilan
25# PIC como objetos de la compartida.
26#
27# `ENABLE_GTEST=OFF` / `ENABLE_BENCHMARK=OFF`: los dos están ya en `OFF` por defecto, pero se pasan
28# explícitos porque los árboles vendorizados de googletest y google-benchmark SÍ están presentes —
29# o sea que un cambio de default los construiría de verdad, y serían minutos de compilación que no
30# van a ninguna parte.
31name    = "opencc"
32version = "1.4.2"
33license = "Apache-2.0"
34
35[source]
36tarball = "https://github.com/BYVoid/OpenCC/archive/refs/tags/ver.1.4.2/opencc-1.4.2.tar.gz"
37sha256  = "8e5f5cf7fe195bd9b9be851adc9738c1ef7dc5c24441dd5878a56db4087a9a70"
38
39[build]
40compiler = "zig-cc"
41target   = "x86_64-linux-musl"
42link     = "dynamic"
43flags    = []
44
45[build.phases]
46configure = '''
47ZW="$PWD/.zwrap"; mkdir -p "$ZW"
48# Envoltorio que reescribe `--target`: patrón canónico del repo para builds que inventan su triple.
49printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec /opt/zig/zig cc -mcpu=baseline "$@"' > "$ZW/cc"
50printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec /opt/zig/zig c++ -mcpu=baseline "$@"' > "$ZW/cxx"
51chmod +x "$ZW/cc" "$ZW/cxx"
52# `rm -rf build`: un `build/` fallido sobrevive en el árbol de fuentes reutilizado y el caché de
53# cmake hace que el reintento repita el error viejo en dos segundos. Deuda latente de TODAS las
54# recetas cmake del repo; acá se paga.
55rm -rf build
56cmake -B build -G Ninja -Wno-dev \
57  -DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" \
58  -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
59  -DCMAKE_INSTALL_LIBDIR=lib \
60  -DBUILD_SHARED_LIBS=ON -DOPENCC_ENABLE_INSTALL=ON \
61  -DENABLE_GTEST=OFF -DENABLE_BENCHMARK=OFF \
62  -DBUILD_DOCUMENTATION=OFF -DBUILD_PYTHON=OFF
63'''
64compile = "cmake --build build"
65# Guardián: la `.so`, el `.pc` que busca el consumidor, y los DICCIONARIOS. El tercero es el que
66# importa de verdad: `find_package(OpenCC 1.0.1 REQUIRED)` pasa con la biblioteca sola, y una
67# OpenCC sin sus `.ocd2` **carga y no convierte nada** — simplificado entraría y simplificado
68# saldría, sin error. Es la figura del artefacto que promete una función y no la tiene.
69install = '''
70set -e
71DESTDIR=/out cmake --install build
72so=$(find /out/usr/lib -name 'libopencc.so*' -type f 2>/dev/null | head -1)
73[ -n "$so" ] || { echo "opencc: no quedó libopencc.so — chttrans es un .so y necesita la compartida" >&2; find /out -name 'libopencc*' >&2; exit 1; }
74pc=$(find /out/usr/lib -name 'opencc.pc' 2>/dev/null | head -1)
75[ -n "$pc" ] || echo "opencc: aviso — no hay opencc.pc; el consumidor usa find_package, así que no es fatal" >&2
76d=$(find /out/usr/share/opencc -name '*.ocd2' 2>/dev/null | wc -l)
77[ "$d" -gt 5 ] || { echo "opencc: sólo $d diccionario(s) .ocd2 — esperaba más de 5; sin ellos convierte la identidad en silencio" >&2; find /out/usr/share -maxdepth 3 2>/dev/null | head -20 >&2; exit 1; }
78c=$(find /out/usr/share/opencc -name '*.json' 2>/dev/null | wc -l)
79[ "$c" -gt 0 ] || { echo "opencc: no hay ninguna configuración .json (s2t, t2s…) — la API se nombra por config, no por diccionario" >&2; exit 1; }
80echo "opencc: $(basename "$so") + $d diccionario(s) + $c configuración(es)"
81'''
82
83[deps]
84# ⚠ `python3`: su CMakeLists hace `find_package(Python3 … Interpreter)` y el build murió con
85# «Could NOT find Python3 (missing: Python3_EXECUTABLE Interpreter)». No lo había declarado porque
86# `BUILD_PYTHON=OFF` me hizo pensar que python no entraba — y esa perilla sólo apaga los *bindings*;
87# el intérprete lo usa igual para generar datos. Misma figura que `meson exige python3`: **una
88# perilla que dice «sin python» no significa que el build no lo invoque.**
89build = ["cmake", "samurai", "pkgconf", "python3"]