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 1574Shell 204Rust 111Markdown 993763 Definitions

⎇ 3130016927a7d2613298687c350d113a6a38ed00 recipes/pcaudiolib.toml TOML · 69 lines · 4.1 KB History raw

receta: la distro HABLA — espeak-ng y su salida de audio 313001692 · Sergio ·

1# pcaudiolib 1.3 — la capa de salida de audio de espeak-ng. Sin esto, la distro no SUENA.
2#
3# ══ POR QUÉ ES SU PROPIA RECETA Y NO UN DETALLE DE espeak-ng ═══════════════════════════════════
4# `espeak-ng` la busca con `find_library(PCAUDIO_LIB pcaudio)` — **opcional, sin REQUIRED**
5# (`cmake/deps.cmake:3`). O sea que espeak-ng construye sin ella y sella tranquilamente… y entonces
6# sintetiza a un `.wav` y **no puede reproducir**: `espeak-ng "hola"` no hace ruido.
7#
8# Eso es exactamente la figura que este catálogo persigue —sellado, con contenido, reproducible y
9# sin la función que promete— y en el frente de accesibilidad es peor que en otros: la promesa es
10# «la máquina habla», no «la máquina genera un fichero de audio».
11#
12# ⇒ Entra como dep de espeak-ng, cuyo guardián comprueba que el binario resultante SÍ la enlace.
13#
14# ══ LOS BACKENDS ═══════════════════════════════════════════════════════════════════════════════
15# `configure.ac` ofrece PulseAudio (`libpulse-simple`) y ALSA, los dos con `--with-*` y default
16# `yes`. Los dos están en el corpus, así que se dejan los dos encendidos: **el servidor de audio de
17# esta distro es PipeWire**, que habla el protocolo de PulseAudio por su capa de compatibilidad, y
18# ALSA queda como camino directo si alguien corre sin servidor (un instalador, una consola).
19#
20# `--without-sndio`: no está en el corpus y es el camino de OpenBSD.
21name    = "pcaudiolib"
22version = "1.3"
23license = "GPL-3.0-or-later"
24
25[source]
26tarball = "https://github.com/espeak-ng/pcaudiolib/releases/download/1.3/pcaudiolib-1.3.tar.gz"
27sha256  = "e8bd15f460ea171ccd0769ea432e188532a7fb27fa73ec2d526088a082abaaad"
28
29[build]
30compiler = "zig-cc"
31target   = "x86_64-linux-musl"
32link     = "static"
33flags    = []
34
35[build.phases]
36# ⚠ **SE USA EL TARBALL DEL RELEASE, NO EL ARCHIVE DEL TAG — y eso evita dos recetas.**
37# El archive de un tag (`/archive/refs/tags/…`) trae sólo `configure.ac`, así que haría falta
38# `autogen.sh` y con él **autoconf y automake, que NO están en el corpus** (el censo los tiene como
39# hueco; `libtool` y `m4` sí están). El asset del release (`/releases/download/…`) es un `make dist`
40# con `configure` y `Makefile.in` ya generados — 384 KB contra 36 KB del tag, y ahí está la
41# diferencia. Comprobado antes de cambiarlo: el tarball trae `pcaudiolib-1.3/configure`.
42#
43# La lección general: **cuando un proyecto autotools no construye por falta de autoconf, mirar si
44# publica un tarball de release antes de escribir el autoconf.** No siempre existe, pero cuando
45# existe ahorra una campaña.
46configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic --without-sndio'
47compile   = 'make -j"$(nproc)"'
48# Guardián: la `.a`, su `.pc` —que es como espeak-ng la encuentra— y **al menos un backend de
49# audio compilado**. Lo último es el punto: una pcaudiolib sin pulse ni alsa compila, instala y no
50# reproduce nada, y entonces el problema se traslada a espeak-ng disfrazado de otra cosa.
51install = '''
52set -e
53make DESTDIR=/out install
54[ -f /out/usr/lib/libpcaudio.a ] || { echo "pcaudiolib: no quedó la .a — NO sello" >&2; exit 1; }
55[ -f /out/usr/lib/pkgconfig/pcaudiolib.pc ] || { echo "pcaudiolib: falta pcaudiolib.pc — espeak-ng la busca por ahí" >&2; exit 1; }
56# `config.log` dice qué backends detectó el configure; si ninguno, esta receta no sirve para nada.
57back=""
58grep -q 'have_pulseaudio=.\{0,1\}yes' config.log 2>/dev/null && back="$back pulse"
59grep -q 'have_alsa=.\{0,1\}yes' config.log 2>/dev/null && back="$back alsa"
60if [ -z "$back" ]; then
61  echo "pcaudiolib: CERO backends de audio detectados — compilaría y no reproduciría nada" >&2
62  grep -iE 'have_(pulseaudio|alsa)=' config.log 2>/dev/null | head -4 >&2
63  exit 1
64fi
65echo "pcaudiolib: .a + .pc · backends:$back"
66'''
67
68[deps]
69build = ["libtool", "make", "pkgconf", "pulseaudio", "alsa-lib"]