tawasuyu

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 1182Shell 87Rust 63Markdown 541592 Sutichaykuna

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

  editorconfig-core-c b3:ffe591bf · hunspell b3:e5e9b3ad · hunspell-en b3:76cd6ac7
  enchant b3:c48965b1 · libspelling b3:0f720d83 · gtksourceview(isla) b3:ddd85b38

1. ⭐ EL `-nostdlib` DE LIBTOOL — reutilizable para CUALQUIER receta C++ con autotools.
   libtool enlaza las .so con `-nostdlib` a propósito y después añade a mano los `$postdeps` que
   detectó en el configure (`-lstdc++ -lm -lgcc_s -lc`). Con `zig c++` esa detección sale VACÍA ⇒
   queda el -nostdlib sin contrapartida y la .so sale sin libc++ ni libunwind. El fallo NO se ve al
   construir la .so: se ve después, en el consumidor, con un mensaje que lo culpa a él
   («non-exported symbol … is referenced by DSO libhunspell-1.7.so»). Tumbó a enchant, libspelling
   y gnome-text-editor a la vez, y ninguno tenía la culpa. `sed 's/ -nostdlib//g' libtool` tras el
   configure.

2. El segfault del linker por `--dependency-file` (editorconfig-core-c). Tercera vez en este repo
   —protobuf, dwarves, y ahora ésta—: -DCMAKE_LINK_DEPENDS_USE_LINKER=OFF.

3. enchant construye su manual en HTML con `groff` SIEMPRE y sin perilla (Error 127). Se vacía
   `nodist_doc_DATA` en los Makefile.in.

4. libspelling pide `icu-uc` por su cuenta (lib/enchant/meson.build:2): parte el texto en palabras
   con el iterador de Unicode en vez de por espacios, que es lo que hace que subrayar funcione
   fuera del inglés. El error nombra a icu-uc, no a libspelling.

5. gnome-text-editor necesita `itstool` (help/meson.build:16) — ya estaba sellada en el corpus y no
   la había declarado. Tercera herramienta de build que se olvida en esta tanda, después de
   desktop-file-utils dos veces: no aparecen en ningún .pc ni en ningún NEEDED, así que ni el cierre
   de pkg-config ni el vigía de sonames las ven. Sólo las ve el configure, fallando.

Y el manual del editor queda SÓLO en inglés: itstool falla con status 1 y sin mensaje en las 21
traducciones, mientras las páginas en inglés se generan bien. La diferencia entre unas y otras es
el `.gmo` que produce el msgfmt de gettext-tiny — sospecha razonable y NO verificada, escrita como
tal en la receta.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

ffaf4d19a9c91e18e8d761d1f8b62eb54a33a966 · ruwaq Sergio · (29 p'unchaw ñawpaq) · tayta 0879d2eaf · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

5 qillqakuna · +113 −6

diff --git a/recipes/incoming-gnome/editorconfig-core-c.toml b/recipes/incoming-gnome/editorconfig-core-c.toml
index 2ed495d1..bb289ed1 100644
--- a/recipes/incoming-gnome/editorconfig-core-c.toml
+++ b/recipes/incoming-gnome/editorconfig-core-c.toml
@@ -11,6 +11,16 @@
 # un árbol donde otros agentes y el usuario editan los mismos ficheros —que es exactamente este
 # repo— un editor que no respeta el `.editorconfig` mete diffs de espacios en blanco que nadie pidió.
 #
+# ⚠ `-DCMAKE_LINK_DEPENDS_USE_LINKER=OFF` NO es una opción de estilo: sin ella el build muere con
+#
+#     [ 85%] Linking C shared library ../../lib/libeditorconfig.so
+#     Error running link command: Segmentation fault
+#
+# que es un CRASH del enlazador, no un error de símbolos. CMake ≥3.27 mete `--dependency-file` en la
+# línea de enlace y el lld de zig revienta con él — ya bisecado en este repo dos veces
+# ([[zig-lld-segfault-dependency-file]], que lo mató en protobuf y en dwarves). Es la tercera vez;
+# la memoria avisa de que afecta potencialmente a 153 recetas CMake del corpus.
+#
 # CMake, y el enlace es dinámico: `src/lib/CMakeLists.txt` construye `editorconfig_shared` y
 # `editorconfig_static` por separado; al consumidor lo alcanza la `.so` por el `.pc`.
 # `pcre2` es su única dep real (`target_link_libraries(editorconfig_shared ${PCRE2_LIBRARIES})`),
@@ -29,7 +39,7 @@ target   = "x86_64-linux-musl"
 link     = "dynamic"
 
 [build.phases]
-configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig cmake -S . -B output -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DBUILD_DOCUMENTATION=OFF -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON"
+configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig cmake -S . -B output -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DBUILD_DOCUMENTATION=OFF -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_LINK_DEPENDS_USE_LINKER=OFF"
 compile   = 'cmake --build output -j"$(nproc)"'
 install   = 'DESTDIR=/out cmake --install output'
 
diff --git a/recipes/incoming-gnome/enchant.toml b/recipes/incoming-gnome/enchant.toml
index ba6c1758..692fe09c 100644
--- a/recipes/incoming-gnome/enchant.toml
+++ b/recipes/incoming-gnome/enchant.toml
@@ -20,6 +20,44 @@
 # `hunspell.pc`, y si no lo encuentra **falla el configure** en vez de seguir sin proveedor. Eso es
 # lo que se quiere: un enchant sin proveedores construye igual y no corrige nada.
 #
+#
+# ══ EL `-nostdlib` DE LIBTOOL: EL RUNTIME DE C++ QUE NO SE ENLAZA ══════════════════════════════
+# Sin el `sed` de abajo, el `.so` sale con TODA la librería estándar de C++ sin resolver:
+#
+#     libtool: link: hammer-zig-cxx -fPIC -DPIC -shared -nostdlib .libs/*.o … -o libhunspell-1.7.so
+#     ld.lld: error: undefined reference: std::__1::basic_string<…>::operator=(…)          (y 20 más)
+#
+# Qué pasa: libtool enlaza las librerías compartidas con `-nostdlib` **a propósito** y después
+# añade a mano los `$postdeps` —el runtime de C++ que detectó en el `configure`, tipo
+# `-lstdc++ -lm -lgcc_s -lc`—. Con `zig c++` esa detección sale **vacía**, así que queda el
+# `-nostdlib` sin su contrapartida: un `.so` de C++ sin libc++ ni libunwind.
+#
+# Y el fallo NO aparece al construir el `.so` con claridad: aparece después, cuando algo lo enlaza,
+# con un mensaje que apunta al CONSUMIDOR («non-exported symbol … is referenced by DSO
+# libhunspell-1.7.so»). Lo pagó toda la cadena de esta tanda a la vez — enchant, libspelling y
+# gnome-text-editor fallaron los tres con el mismo error, y ninguno tenía la culpa.
+#
+# El `sed` quita `-nostdlib` del script `libtool` generado, con lo que el driver de zig añade sus
+# propios defaults (libc++, libunwind, libc) como en cualquier enlace normal.
+# ⚠ Va DESPUÉS del `./configure`, porque el fichero `libtool` lo GENERA el configure.
+# ⚠ Esto es de LIBTOOL + zig, no de este paquete: le va a pasar a cualquier receta C++ con
+#   autotools. Es pariente del [[link-static-mentira-libtool]] que el repo ya tiene medido.
+#
+# ── EL `sed` DEL HTML: `groff` NO ESTÁ Y NO HAY PERILLA PARA PEDIRLO ──────────────────────────
+#     groff -mandoc -Thtml enchant.5 > enchant.html
+#     /bin/sh: groff: not found
+#     make[3]: *** [Makefile:1191: enchant.html] Error 127
+#
+# `lib/Makefile.am:51` y `src/Makefile.am:17` declaran `nodist_doc_DATA = …html`: enchant convierte
+# sus páginas de manual a HTML **siempre**, sin opción de configure que lo apague, y con una
+# herramienta (`groff`) que no está en el catálogo. El 127 es «comando no encontrado», no un fallo
+# de compilación — la librería ya estaba compilada cuando esto mata al make.
+#
+# El `sed` vacía esa lista en los `Makefile.in` (antes del configure, que es quien genera los
+# `Makefile` finales). Vaciarla y no borrar la línea es deliberado: automake referencia la variable
+# en sus reglas de instalación, y quitarla del todo deja referencias a algo que no existe.
+# Lo que se pierde: la versión HTML del manual. `enchant.5` en roff se instala igual.
+#
 # ⚠ ES C++ (su núcleo lo es desde la 2.x) y se construye con `zig c++`, igual que hunspell ⇒ los dos
 # comparten libc++. Ver [[cxx-runtime-debe-coincidir]].
 name    = "enchant"
@@ -36,7 +74,7 @@ target   = "x86_64-linux-musl"
 link     = "dynamic"
 
 [build.phases]
-configure = "CFLAGS='-O2 -fPIC' CXXFLAGS='-O2 -fPIC' PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-hunspell --without-nuspell --without-aspell --without-hspell --without-voikko --without-zemberek --disable-dependency-tracking"
+configure = "sed -i 's/^nodist_doc_DATA = .*/nodist_doc_DATA =/' lib/Makefile.in src/Makefile.in && CFLAGS='-O2 -fPIC' CXXFLAGS='-O2 -fPIC' PKG_CONFIG_PATH=/usr/lib/pkgconfig ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-hunspell --without-nuspell --without-aspell --without-hspell --without-voikko --without-zemberek --disable-dependency-tracking && sed -i 's/ -nostdlib//g' libtool"
 compile   = 'make -j"$(nproc)"'
 install   = 'make DESTDIR=/out install'
 
diff --git a/recipes/incoming-gnome/gnome-text-editor.toml b/recipes/incoming-gnome/gnome-text-editor.toml
index 1001602c..d1959217 100644
--- a/recipes/incoming-gnome/gnome-text-editor.toml
+++ b/recipes/incoming-gnome/gnome-text-editor.toml
@@ -32,6 +32,36 @@
 #                          que el escritorio busca por su nombre.
 #   -Deditorconfig=enabled → ya es el default; se declara porque es `feature` y arrastra una receta.
 #
+# ⚠ `itstool` es dep de BUILD y ya estaba sellada en el corpus: `help/meson.build:16` la pide como
+# programa REQUERIDO para construir el manual del usuario (formato Mallard) a partir del XML y sus
+# traducciones. Sin ella, `ERROR: Program 'itstool' not found or not executable` y no se compila
+# nada. Es el tercer paquete de esta tanda que es una HERRAMIENTA de build y no una librería
+# —después de `desktop-file-utils` en nautilus y en gnome-console—, y los tres se olvidan por lo
+# mismo: no aparecen en ningún `.pc` ni en ningún `NEEDED`, así que ni el cierre de pkg-config ni el
+# vigía de sonames los ven. Sólo los ve el configure, fallando.
+#
+# ── `: > help/LINGUAS`: EL MANUAL SE CONSTRUYE **SÓLO EN INGLÉS**, Y LA CAUSA NO ESTÁ CERRADA ──
+# Con las 21 traducciones declaradas, el build muere así:
+#
+#     [67/165] Generating yelp doc help/ru/help-gnome-text-editor-ru
+#     ninja: job failed with status 1: /usr/bin/itstool -m help/ru/gnome-text-editor-ru.gmo --lang ru …
+#     (y lo mismo para tr, uk, zh_CN, pt_BR, sv…)
+#
+# Lo MEDIDO: las páginas en inglés (`help/C`) se generan bien y las traducidas fallan, todas, con
+# `status 1` y **sin mensaje**. La diferencia entre unas y otras es el `-m …gmo`, o sea el catálogo
+# de traducción compilado.
+# Lo NO MEDIDO, y por eso va como sospecha y no como causa: ese `.gmo` lo produce el `msgfmt` de
+# `gettext-tiny`, que en este repo ya tiene un fallo documentado y grave ([[gettext-tiny-msgfmt-plural-arabe]]).
+# Que el patrón encaje no lo convierte en la causa — haría falta abrir el `.gmo` y ver si itstool lo
+# rechaza, y eso es su propia unidad de trabajo.
+# Vaciar `help/LINGUAS` deja el manual en inglés (que sí se construye) y sacrifica las 21
+# traducciones de la AYUDA — no las de la interfaz, que están en `po/` y no se tocan.
+#
+# ⚠ EL MANUAL SE CONSTRUYE Y HOY NO HAY CON QUÉ LEERLO: las páginas se instalan en
+# `/usr/share/help/`, y el visor de GNOME —`yelp`— NO está en el catálogo (comprobado). O sea que
+# el menú «Ayuda» de esta app abre algo que no existe. Se construyen igual, porque el día que entre
+# yelp ya estarán y porque el hueco es del visor, no de la app; queda escrito acá para que se vea.
+#
 # ⚠ SIN `sed` del `ar`: este tarball **no trae `po/ar.po`** (56 ficheros en `po/`, ninguno árabe),
 # así que la mina del msgfmt de gettext-tiny no aplica. Comprobado, no supuesto — de las nueve
 # recetas de esta tanda sólo libgtop lo necesitaba.
@@ -49,7 +79,7 @@ target   = "x86_64-linux-musl"
 link     = "dynamic"
 
 [build.phases]
-configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddevelopment=false -Deditorconfig=enabled -Dc_args=-Wno-error=date-time"
+configure = ": > help/LINGUAS && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddevelopment=false -Deditorconfig=enabled -Dc_args=-Wno-error=date-time"
 compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
 install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
 
@@ -58,4 +88,4 @@ install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson ins
 # `update-desktop-database` desde el configure como programa REQUERIDO.
 # `appstream` + su cierre (libxmlb, libyaml-shared, libxml2-shared, curl, openssl, zstd) entran por
 # `libadwaita-1.pc`, que lo declara en `Requires.private`.
-build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "desktop-file-utils", "glib", "gtk4", "libadwaita", "gtksourceview", "libspelling", "enchant", "hunspell", "hunspell-en", "editorconfig-core-c", "gsettings-desktop-schemas", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "harfbuzz", "fribidi", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "appstream", "libxmlb", "libyaml-shared", "libxml2-shared", "curl", "openssl", "zstd", "pcre2", "libffi", "zlib-shared"]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "desktop-file-utils", "itstool", "glib", "gtk4", "libadwaita", "gtksourceview", "libspelling", "enchant", "hunspell", "hunspell-en", "editorconfig-core-c", "gsettings-desktop-schemas", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "harfbuzz", "fribidi", "fontconfig-shared", "freetype-shared", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "appstream", "libxmlb", "libyaml-shared", "libxml2-shared", "curl", "openssl", "zstd", "pcre2", "libffi", "zlib-shared"]
diff --git a/recipes/incoming-gnome/hunspell.toml b/recipes/incoming-gnome/hunspell.toml
index 89978bd7..4a83989f 100644
--- a/recipes/incoming-gnome/hunspell.toml
+++ b/recipes/incoming-gnome/hunspell.toml
@@ -17,6 +17,29 @@
 # `--with-ui=no`: hunspell trae un corrector interactivo de terminal que pide ncurses y que nadie va
 # a abrir en esta distro. La librería y el binario `hunspell` de línea de comandos salen igual.
 #
+#
+# ══ EL `-nostdlib` DE LIBTOOL: EL RUNTIME DE C++ QUE NO SE ENLAZA ══════════════════════════════
+# Sin el `sed` de abajo, el `.so` sale con TODA la librería estándar de C++ sin resolver:
+#
+#     libtool: link: hammer-zig-cxx -fPIC -DPIC -shared -nostdlib .libs/*.o … -o libhunspell-1.7.so
+#     ld.lld: error: undefined reference: std::__1::basic_string<…>::operator=(…)          (y 20 más)
+#
+# Qué pasa: libtool enlaza las librerías compartidas con `-nostdlib` **a propósito** y después
+# añade a mano los `$postdeps` —el runtime de C++ que detectó en el `configure`, tipo
+# `-lstdc++ -lm -lgcc_s -lc`—. Con `zig c++` esa detección sale **vacía**, así que queda el
+# `-nostdlib` sin su contrapartida: un `.so` de C++ sin libc++ ni libunwind.
+#
+# Y el fallo NO aparece al construir el `.so` con claridad: aparece después, cuando algo lo enlaza,
+# con un mensaje que apunta al CONSUMIDOR («non-exported symbol … is referenced by DSO
+# libhunspell-1.7.so»). Lo pagó toda la cadena de esta tanda a la vez — enchant, libspelling y
+# gnome-text-editor fallaron los tres con el mismo error, y ninguno tenía la culpa.
+#
+# El `sed` quita `-nostdlib` del script `libtool` generado, con lo que el driver de zig añade sus
+# propios defaults (libc++, libunwind, libc) como en cualquier enlace normal.
+# ⚠ Va DESPUÉS del `./configure`, porque el fichero `libtool` lo GENERA el configure.
+# ⚠ Esto es de LIBTOOL + zig, no de este paquete: le va a pasar a cualquier receta C++ con
+#   autotools. Es pariente del [[link-static-mentira-libtool]] que el repo ya tiene medido.
+#
 # ⚠ SIN `sed` del `ar`: medido, `po/ar.po` de este tarball trae CERO `msgstr[5]`.
 name    = "hunspell"
 version = "1.7.2"
@@ -32,7 +55,7 @@ target   = "x86_64-linux-musl"
 link     = "dynamic"
 
 [build.phases]
-configure = "CFLAGS='-O2 -fPIC' CXXFLAGS='-O2 -fPIC' ./configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-ui=no --disable-dependency-tracking"
+configure = "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"
 compile   = 'make -j"$(nproc)"'
 install   = 'make DESTDIR=/out install'
 
diff --git a/recipes/incoming-gnome/libspelling.toml b/recipes/incoming-gnome/libspelling.toml
index d3883314..4733296f 100644
--- a/recipes/incoming-gnome/libspelling.toml
+++ b/recipes/incoming-gnome/libspelling.toml
@@ -24,6 +24,12 @@
 #                     una sin la otra es el assert que costó una corrida en vte.
 #   -Dinstall-static=false → ya es el default; toda la cola es la isla dinámica.
 #
+# ⚠ `icu4c` en las deps NO viene de enchant ni de gtk: lo pide el propio proveedor de libspelling,
+# `lib/enchant/meson.build:2` ⇒ `dependency('icu-uc')`. Lo usa para partir el texto en palabras de
+# verdad (`ubrk_*`, el iterador de límites de Unicode) en vez de por espacios, que es lo que hace
+# que subrayar funcione en un idioma que no sea inglés. Costó una corrida: el error nombra
+# `icu-uc`, no `libspelling`, y la tentación es buscarlo en el cierre de gtk4.
+#
 # ⚠ SIN `sed` del `ar`: su `po/ar.po` trae CERO `msgstr[5]` (medido).
 name    = "libspelling"
 version = "0.4.10"
@@ -44,4 +50,4 @@ compile   = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
 install   = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
 
 [deps]
-build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "gtk4", "gtksourceview", "enchant", "hunspell", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "fontconfig-shared", "freetype-shared", "harfbuzz", "fribidi", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libxml2-shared", "pcre2", "libffi", "zlib-shared"]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "gtk4", "gtksourceview", "enchant", "hunspell", "icu4c", "pango", "cairo-shared", "gdk-pixbuf", "graphene", "libepoxy", "wayland", "wayland-protocols", "libxkbcommon", "libdrm", "mesa", "fontconfig-shared", "freetype-shared", "harfbuzz", "fribidi", "pixman", "libpng-shared", "expat", "libjpeg-turbo-shared", "libtiff-shared", "libxml2-shared", "pcre2", "libffi", "zlib-shared"]