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 Definiciones

⎇ 7c794568a963b18b68d747959e6bbd07cf2ebff7 recipes/pcaudiolib.toml TOML · 80 líneas · 5.0 KB Historia crudo

fix(pcaudiolib): mi guardián estuvo mal dos veces, y las dos eran verificables antes dc18cd21b · 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# ⚠ **ESTE GUARDIÁN ESTUVO MAL DOS VECES EN LA MISMA PASADA, y las dos eran verificables antes.**
49#
50# 1. **Exigía un `pcaudiolib.pc` que upstream NO PUBLICA** (no hay `.pc.in` en el árbol, medido). Y
51#    además espeak-ng no lo necesita: la busca con `find_library(PCAUDIO_LIB pcaudio)` y
52#    `find_path(PCAUDIO_INC "pcaudiolib/audio.h")` — **nunca con pkg-config** (`cmake/deps.cmake:3`).
53#    O sea que inventé un requisito, y el guardián rechazó un build correcto. Es la tercera vez hoy
54#    que un guardián mío es demasiado estricto; el patrón de los tres es el mismo: afirmar un
55#    requisito sin haberlo leído en la fuente del consumidor.
56# 2. **Buscaba `have_pulseaudio=yes` en `config.log` y ese texto no existe.** Lo que sí escribe el
57#    configure es `HAVE_PULSE_SIMPLE_H` y `HAVE_ALSA_ASOUNDLIB_H` — y los DOS estaban ahí, o sea que
58#    los backends se detectaron y el control los habría denunciado como ausentes.
59#
60# ⇒ Ahora comprueba exactamente lo que el consumidor busca —la `.a` y la cabecera en la ruta que
61# `find_path` espera— y los backends por el marcador que el configure escribe de verdad.
62install = '''
63set -e
64make DESTDIR=/out install
65[ -f /out/usr/lib/libpcaudio.a ] || { echo "pcaudiolib: no quedó la .a — NO sello" >&2; exit 1; }
66# La RUTA de la cabecera importa: espeak-ng hace `find_path(PCAUDIO_INC "pcaudiolib/audio.h")`, así
67# que tiene que estar en ese subdirectorio y no suelta en /usr/include.
68[ -f /out/usr/include/pcaudiolib/audio.h ] || { echo "pcaudiolib: falta include/pcaudiolib/audio.h — es la ruta exacta que el find_path de espeak-ng busca" >&2; exit 1; }
69back=""
70grep -q 'HAVE_PULSE_SIMPLE_H' config.log 2>/dev/null && back="$back pulse"
71grep -q 'HAVE_ALSA_ASOUNDLIB_H' config.log 2>/dev/null && back="$back alsa"
72if [ -z "$back" ]; then
73  echo "pcaudiolib: CERO backends de audio — compilaría y no reproduciría nada" >&2
74  grep -oE 'HAVE_[A-Z_]*(PULSE|ALSA|SNDIO)[A-Z_]*' config.log 2>/dev/null | sort -u | head -5 >&2
75  exit 1
76fi
77echo "pcaudiolib: .a + include/pcaudiolib/audio.h · backends:$back"
78'''
79[deps]
80build = ["libtool", "make", "pkgconf", "pulseaudio", "alsa-lib"]