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…

Rust 45TOML 36Markdown 26Shell 7878 Definitions

⎇ main recipes/incoming-gnome/hunspell.toml TOML · 63 lines · 3.9 KB History raw

la cadena del corrector: cinco muros, y el gordo es de libtool con zig ffaf4d19a · Sergio ·

1# hunspell 1.7.2 — el corrector ortográfico. Es el motor que hay debajo de casi todo: LibreOffice,
2# Firefox, Chrome y —por el camino `libspelling → enchant → hunspell`— el editor de texto de GNOME.
3#
4# ── POR QUÉ ESTÁ ACÁ: PORQUE SIN ÉL, CORREGIR ORTOGRAFÍA ES UN INTERRUPTOR QUE NO HACE NADA ────
5# `libspelling` (la que pide `gnome-text-editor`) construye SIEMPRE, con o sin corrector: si no
6# encuentra a `enchant`, compila `spelling-empty-provider.c` y expone un proveedor vacío. El editor
7# sigue mostrando su preferencia «spellcheck» (`editor-preferences-dialog.ui:112`), el usuario la
8# enciende, y no pasa nada — ni subrayados, ni sugerencias, ni lista de idiomas. Es exactamente la
9# papelera dibujada que no existe. Por eso esta cadena entra entera o no entra: hunspell (el motor)
10# + `hunspell-en` (los datos) + `enchant` (el intermediario que GNOME sabe usar).
11#
12# ⚠ ES C++, y eso importa en esta distro: el `.so` lo construye `zig c++`, o sea contra **libc++**.
13# `enchant` —su único consumidor acá— se construye con la misma cadena, así que los dos hablan el
14# mismo runtime. Mezclarlo con algo compilado por gcc (libstdc++) es el fallo documentado en
15# [[cxx-runtime-debe-coincidir]]; no aplica hoy, y conviene que siga sin aplicar.
16#
17# `--with-ui=no`: hunspell trae un corrector interactivo de terminal que pide ncurses y que nadie va
18# a abrir en esta distro. La librería y el binario `hunspell` de línea de comandos salen igual.
19#
20#
21# ══ EL `-nostdlib` DE LIBTOOL: EL RUNTIME DE C++ QUE NO SE ENLAZA ══════════════════════════════
22# Sin el `sed` de abajo, el `.so` sale con TODA la librería estándar de C++ sin resolver:
23#
24#     libtool: link: hammer-zig-cxx -fPIC -DPIC -shared -nostdlib .libs/*.o … -o libhunspell-1.7.so
25#     ld.lld: error: undefined reference: std::__1::basic_string<…>::operator=(…)          (y 20 más)
26#
27# Qué pasa: libtool enlaza las librerías compartidas con `-nostdlib` **a propósito** y después
28# añade a mano los `$postdeps` —el runtime de C++ que detectó en el `configure`, tipo
29# `-lstdc++ -lm -lgcc_s -lc`—. Con `zig c++` esa detección sale **vacía**, así que queda el
30# `-nostdlib` sin su contrapartida: un `.so` de C++ sin libc++ ni libunwind.
31#
32# Y el fallo NO aparece al construir el `.so` con claridad: aparece después, cuando algo lo enlaza,
33# con un mensaje que apunta al CONSUMIDOR («non-exported symbol … is referenced by DSO
34# libhunspell-1.7.so»). Lo pagó toda la cadena de esta tanda a la vez — enchant, libspelling y
35# gnome-text-editor fallaron los tres con el mismo error, y ninguno tenía la culpa.
36#
37# El `sed` quita `-nostdlib` del script `libtool` generado, con lo que el driver de zig añade sus
38# propios defaults (libc++, libunwind, libc) como en cualquier enlace normal.
39# ⚠ Va DESPUÉS del `./configure`, porque el fichero `libtool` lo GENERA el configure.
40# ⚠ Esto es de LIBTOOL + zig, no de este paquete: le va a pasar a cualquier receta C++ con
41#   autotools. Es pariente del [[link-static-mentira-libtool]] que el repo ya tiene medido.
42#
43# ⚠ SIN `sed` del `ar`: medido, `po/ar.po` de este tarball trae CERO `msgstr[5]`.
44name    = "hunspell"
45version = "1.7.2"
46license = "GPL-2.0-or-later OR LGPL-2.1-or-later OR MPL-1.1"
47
48[source]
49tarball = "https://github.com/hunspell/hunspell/releases/download/v1.7.2/hunspell-1.7.2.tar.gz"
50sha256  = "11ddfa39afe28c28539fe65fc4f1592d410c1e9b6dd7d8a91ca25d85e9ec65b8"
51
52[build]
53compiler = "zig-cc"
54target   = "x86_64-linux-musl"
55link     = "dynamic"
56
57[build.phases]
58configure = "CFLAGS='-O2 -fPIC' CXXFLAGS='-O2 -fPIC' ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-ui=no --disable-dependency-tracking && sed -i 's/ -nostdlib//g' libtool"
59compile   = 'make -j"$(nproc)"'
60install   = 'make DESTDIR=/out install'
61
62[deps]
63build = ["make", "pkgconf", "gettext-tiny"]