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…

fix(espeak-ng): las transitivas de audio van a mano — no hay `.pc` de donde sacarlas

`sonic` SELLÓ y con eso espeak-ng pasó el configure y llegó a enlazar. Murió así:

    Error relocating /src/build/src/libespeak-ng/libespeak-ng.so.1: pa_strerror: symbol not found
    Error relocating …: snd_strerror: symbol not found

`libpcaudio.a` referencia esos símbolos, pero espeak-ng la encuentra con
`find_library(PCAUDIO_LIB pcaudio)` — que devuelve **la ruta del `.a` y nada más**, sin las
transitivas. Medido con `nm`: `pa_strerror` vive en `libpulse.so` y `snd_strerror` en
`libasound.so`.

⇒ `-lpulse-simple -lpulse -lasound` en los dos `*_LINKER_FLAGS`.

Es la MISMA figura que `fontconfig.pc → Requires.private: expat` en fcitx5, **con una diferencia que
importa**: allá la cura fue `PKG_CONFIG_ARGN=--static`, porque el `.pc` existía y sabía declarar sus
privadas. Acá pcaudiolib **no publica `.pc`** (upstream no trae plantilla), así que no hay de dónde
sacarlas automáticamente: se escriben a mano o no hay forma. Esa asimetría es lo que vale guardar —
la misma clase de defecto tiene dos curas según si el `.pc` existe.

Y el síntoma engaña: sale «symbol not found» al EJECUTAR, no «undefined reference» al enlazar,
porque la fase de datos corre el propio `espeak-ng` para compilar los fonemas y es ahí donde el
cargador tropieza. Un enlace que «pasa» y revienta al primer uso es la forma más cara de este fallo.

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

8904c906278840d5462d9b8199d1489e319418b8 · por Sergio · (hace 1 d) · padre e218e2761 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +19 −1

diff --git a/recipes/espeak-ng.toml b/recipes/espeak-ng.toml
index 103ed5bb..bd5d3016 100644
--- a/recipes/espeak-ng.toml
+++ b/recipes/espeak-ng.toml
@@ -37,6 +37,22 @@
 # no significa «opcional»; hay que leer el `else()`.**
 #   ESPEAK_COMPAT=ON       instala también el nombre viejo `espeak`, que es el que invocan los
 #                          scripts y las apps que no se actualizaron a `espeak-ng`
+#
+# ⚠ **LOS `-l` DE PULSE Y ALSA VAN A MANO, y es el problema transitivo del corpus estático otra
+# vez.** Con `sonic` resuelto, el build llegó a enlazar y murió así:
+#     Error relocating /src/build/src/libespeak-ng/libespeak-ng.so.1: pa_strerror: symbol not found
+#     Error relocating …: snd_strerror: symbol not found
+# `libpcaudio.a` referencia esos símbolos, pero espeak-ng la encuentra con
+# `find_library(PCAUDIO_LIB pcaudio)` — que devuelve **la ruta del `.a` y nada más**, sin las
+# transitivas. Y pcaudiolib no publica `.pc` (upstream no trae plantilla), así que no hay de dónde
+# sacarlas automáticamente. Medido con `nm`: `pa_strerror` está en `libpulse.so` y `snd_strerror` en
+# `libasound.so`.
+#
+# ⇒ Es la MISMA figura que `fontconfig.pc → Requires.private: expat` en fcitx5, con una diferencia
+# que importa: allá la cura fue `PKG_CONFIG_ARGN=--static` porque el `.pc` existía y sabía sus
+# privadas; **acá no hay `.pc`, así que las transitivas se escriben a mano o no hay forma.** Y el
+# fallo sale al EJECUTAR, no al enlazar —la fase de datos corre el propio `espeak-ng` para compilar
+# los fonemas—, que es por qué el síntoma es «symbol not found» y no «undefined reference».
 name    = "espeak-ng"
 version = "1.52.0"
 license = "GPL-3.0-or-later"
@@ -64,7 +80,9 @@ cmake -B build -G Ninja -Wno-dev \
   -DCMAKE_C_COMPILER="$ZW/cc" -DCMAKE_CXX_COMPILER="$ZW/cxx" \
   -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \
   -DBUILD_SHARED_LIBS=ON -DUSE_MBROLA=OFF -DUSE_SPEECHPLAYER=OFF \
-  -DESPEAK_COMPAT=ON -DBUILD_TESTING=OFF
+  -DESPEAK_COMPAT=ON -DBUILD_TESTING=OFF \
+  -DCMAKE_SHARED_LINKER_FLAGS="-lpulse-simple -lpulse -lasound" \
+  -DCMAKE_EXE_LINKER_FLAGS="-lpulse-simple -lpulse -lasound"
 '''
 compile = "cmake --build build"
 install = '''