cosmic: libqalculate + gmp + mpfr — qalc anda, y el plugin del lanzador igual no lo puede usar

Las tres selladas a la primera (gmp b3:d99a0a5d, mpfr b3:13982d20, libqalculate
b3:6bb435a7). La cadena entera desde una tecla está en el catálogo: Super →
cosmic-launcher → pop-launcher → plugin calc → qalc → mpfr → gmp. Cola 30/30,
escritorio-cosmic 68/68.

qalc FUNCIONA: -t '2+2' da 4, -f fichero anda, e interactivo sobre terminal calcula.
Pero el plugin lo invoca SIN expresión, con stdin en tubería, le escribe la cuenta y
cierra — y en ese modo nuestro binario no lee nada. Acotado a que, con el EOF ya
pendiente en un stdin que no es terminal, readline() devuelve NULL antes de entregar la
línea que sí está en el búfer.

Descartado midiendo, para no repetirlo: no es el toolchain (una sonda estática musl del
sandbox lee la tubería en C y en C++); no es readline vs no-readline (sin ella es peor:
no lee nunca); no es la versión de readline (una 8.3 sombra no movió el síntoma, y se
descartó en vez de dejar una receta duplicada inútil); y no es el descriptor 0, porque
Could not open "/dev/stdin". —el mismo pipe reabierto por ruta— sí funciona. El que no sirve es
el FILE* stdin, y ahí queda la pista.

Dos gotchas del empaquetado: gmp va con --disable-assembly (elige rutinas mirando la CPU
de quien compila, o sea hornearía la ISA del laptop en el hash), y el configure de
libqalculate no encuentra readline porque prueba -lncurses/-lcurses/-ltinfo y el corpus
sólo empaqueta libncursesw.a — los alias van en un directorio local, no ensuciando
/usr/lib, que es la evidencia de qué se declaró.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-04 04:47:55 -04:00
co-authored by Claude Opus 5
parent 3a7347634d
commit 03ec0e6827
7 changed files with 213 additions and 17 deletions
+45
View File
@@ -0,0 +1,45 @@
# gmp — aritmética de precisión arbitraria. Entra al corpus por abajo del lanzador: el plugin de la
# calculadora de pop-launcher llama al binario `qalc`, `qalc` es libqalculate, y libqalculate corta el
# configure con «libgmp not found» si no está. O sea que la cadena de una tecla del escritorio baja
# hasta la aritmética de enteros grandes — y ese es justo el tipo de dep que no se ve venir mirando
# el paquete de arriba.
#
# ── `--disable-assembly` NO ES PEREZA ───────────────────────────────────────────────────────────
# GMP trae rutinas en ensamblador por microarquitectura y su `configfsf.guess` elige una mirando la
# CPU de QUIEN COMPILA. Eso es exactamente lo que este lab no puede permitir: hornearía la ISA del
# laptop en el artefacto y el hash dejaría de significar lo mismo en la granja (el mismo modo de
# falla que `-mcpu=baseline` corrige en el wrapper de zig). Con `--disable-assembly` GMP usa su
# implementación en C portable: más lenta, y a nadie le importa — acá la usa una calculadora de
# escritorio, no un criptosistema.
# Además zig/clang no digiere varias de esas rutinas (`.align` y sintaxis de gas antigua), así que
# la alternativa realista tampoco era «assembly sí».
name = "gmp"
version = "6.3.0"
[source]
tarball = "https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz"
sha256 = "a3c2b80201b89e68616f4ad30bc66aee4927c3ce50e33929ca819d5c43538898"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[build.phases]
# `--enable-cxx` va APAGADO: libqalculate usa la API C de GMP (`__gmpz_init` es lo que su configure
# busca), y `libgmpxx` arrastraría el runtime de C++ a un paquete que no lo necesita — justo la deuda
# que la campaña «matar gcc» viene pagando en el resto del árbol.
configure = '''
./configure \
--build=$CBUILD --host=$CHOST \
--prefix=/usr \
--disable-shared --enable-static \
--disable-assembly \
--enable-fat=no
'''
compile = 'make -j"$(nproc)"'
install = 'make DESTDIR=/out install'
[deps]
build = ["make", "m4"]