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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

⎇ 534014c3ec69daea789a1d0523e1d00a69c6ed65 recipes/sonic.toml TOML · 73 siq'ikuna · 4.2 KB Ñawpa willay ch'uya

receta: sonic — un `find_library` sin REQUIRED no significa «opcional» e218e2761 · Sergio ·

1# sonic — cambia la velocidad del habla sin cambiar el tono. Dep OBLIGATORIA de espeak-ng, de hecho.
2#
3# ══ POR QUÉ ESTA RECETA EXISTE: ESPEAK-NG LA CLONA SI NO ESTÁ ══════════════════════════════════
4# `cmake/deps.cmake` de espeak-ng 1.52 dice esto, y es lo que obliga:
5#
6#     if (SONIC_LIB AND SONIC_INC)
7#       set(HAVE_LIBSONIC ON)
8#     else()
9#       FetchContent_Declare(sonic-git GIT_REPOSITORY https://github.com/waywardgeek/sonic.git
10#                            GIT_TAG fbf75c3d6d846bad3bb3d456cbc5d07d9fd8c104)
11#       FetchContent_MakeAvailable(sonic-git)   ← git clone en tiempo de build
12#
13# O sea que si sonic no está instalado, espeak-ng **la clona de git**, y el sandbox de takana no
14# tiene red (a propósito: una fuente que se baja al construir no es reproducible ni auditable). El
15# build murió exactamente ahí:
16#     CMake Error at sonic-git-subbuild/…/sonic-git-populate-gitclone.cmake:50 (message)
17#
18# ⚠ **Y `USE_LIBSONIC=OFF` NO lo evita**, que fue lo primero que probé mentalmente: el fetch está en
19# `deps.cmake`, ANTES de que la opción se evalúe, y la rama `else()` pone `HAVE_LIBSONIC ON` de
20# todas formas. No hay perilla: la única salida es que `find_library(SONIC_LIB sonic)` encuentre algo.
21#
22# ══ EL COMMIT ES EL QUE ESPEAK-NG PINEA, Y ESO ES DELIBERADO ═══════════════════════════════════
23# `fbf75c3d…` es exactamente el `GIT_TAG` de arriba — no el último tag de sonic (`release-0.2.0`,
24# que es anterior). Se pinea el mismo porque es el emparejamiento que upstream prueba: si algún día
25# espeak-ng mueve su `GIT_TAG`, esta receta lo sigue, y el `git log` dirá por qué.
26#
27# ══ ⚠ `CC=gcc` ESTÁ CODIFICADO EN EL MAKEFILE ══════════════════════════════════════════════════
28# Línea 41: `CC=gcc`, con `=` y no `?=`, así que la variable de entorno NO lo cambia — hay que
29# pasarlo en la LÍNEA DE `make`, que sí gana sobre una asignación del makefile. En este lab `gcc` no
30# existe (matar-gcc, 2026-07-16) y sin el override el build muere con «gcc: not found», que no
31# nombra la causa. Es la misma familia que el crate `autotools` adivinando el host del NOMBRE de
32# `$CC`: **un build que codifica su compilador miente sobre ser portable.**
33#
34# `-fPIC` ya lo trae su `CFLAGS` (línea 39), así que no hay que añadirlo: esta `.a` puede entrar en
35# un `.so`, que es justo lo que espeak-ng necesita.
36name    = "sonic"
37version = "0.3.0-fbf75c3"
38license = "Apache-2.0"
39
40[source]
41tarball = "https://github.com/waywardgeek/sonic/archive/fbf75c3d6d846bad3bb3d456cbc5d07d9fd8c104/sonic.tar.gz"
42sha256  = "715827b5a39b79e56e44397d7b845910df996d4cca74777b3b61629b1ddc98c1"
43
44[build]
45compiler = "zig-cc"
46target   = "x86_64-linux-musl"
47link     = "dynamic"
48flags    = []
49
50[build.phases]
51configure = '''
52printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec /opt/zig/zig cc -mcpu=baseline "$@"' > .zcc
53chmod +x .zcc
54'''
55# `CC` en la línea de make, no en el entorno: ver la nota de arriba.
56compile = 'make CC="$PWD/.zcc" PREFIX=/usr -j"$(nproc)"'
57# Guardián escrito MIRANDO qué busca el consumidor, no lo que un paquete «debería» publicar — es la
58# lección que me costó tres guardianes demasiado estrictos hoy. espeak-ng hace exactamente:
59#     find_library(SONIC_LIB sonic)      ⇒ un libsonic.{so,a} en una ruta de bibliotecas
60#     find_path(SONIC_INC "sonic.h")     ⇒ sonic.h alcanzable por -I
61# Nada de pkg-config: NO se exige un `.pc`, que es precisamente el requisito que me inventé con
62# pcaudiolib.
63install = '''
64set -e
65make install PREFIX=/usr DESTDIR=/out
66lib=$(find /out/usr/lib -name 'libsonic.*' 2>/dev/null | head -1)
67[ -n "$lib" ] || { echo "sonic: no quedó ninguna libsonic.* — el find_library de espeak-ng no la encontraría" >&2; ls -R /out/usr 2>/dev/null | head -20 >&2; exit 1; }
68[ -f /out/usr/include/sonic.h ] || { echo "sonic: falta include/sonic.h — es lo que busca el find_path de espeak-ng" >&2; exit 1; }
69echo "sonic: $(basename "$lib") + sonic.h"
70'''
71
72[deps]
73build = ["make"]