cosmic: la calculadora del lanzador ANDA — el stdin de qalc era el stdout

=123*456 → 56088 en el lanzador. libqalculate re-sellado b3:edb8d14d.

La causa del «no lee nada de la tubería» no era readline, ni el toolchain, ni la versión:
el binario salía DINÁMICO pese a link="static", porque libtool se come el -static que
inyecta el harness. Y en un musl dinámico stdin, stdout y stderr se resolvieron por copy
relocation a UNA SOLA ranura de BSS compartida —las tres en la misma dirección—, así que
fileno(stdin) daba 1: el stdin del programa era el stdout. Eso explica la asimetría que
parecía absurda, que qalc -f /dev/stdin funcionara (abre el fd por RUTA, sin tocar el
FILE* roto) y qalc leyendo stdin no.

Fix: make LDFLAGS="-all-static -no-pie", el mismo par que ya usa libxml2. Con él los tres
símbolos vuelven a tener direcciones distintas en .rodata. Regla para el runbook:
link="static" en la receta NO garantiza un binario estático — readelf -d y
nm -S | grep ' std' lo contestan en dos segundos.

Segundo muro: qalc pregunta si activar autocalc antes de leer nada, el plugin le manda la
expresión y cierra, la expresión se consume como respuesta y qalc nunca llega a guardar
config ⇒ vuelve a preguntar siempre. Se siembra qalc.cfg desde cosmic-start, política de
imagen como el color de fondo.

Y hay que repetir el -L de los alias de curses en el make: el LDFLAGS del make pisa al
del configure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-04 05:13:14 -04:00
co-authored by Claude Opus 5
parent 4d9f17dafb
commit 9665cc29d4
5 changed files with 95 additions and 48 deletions
+13
View File
@@ -157,6 +157,19 @@ RON
say "fondo: color liso (el wallpaper por defecto vive en git-lfs y no se empaqueta)"
fi
# ── SEMILLA DE CONFIG DE qalc, SIN LA CUAL LA CALCULADORA DEL LANZADOR NUNCA ANDA ────────────────
# En el primer arranque `qalc` hace una PREGUNTA interactiva («¿activar autocalc?») antes de leer
# nada. El plugin `calc` de pop-launcher le escribe la expresión y cierra el pipe, así que la
# expresión se consume como respuesta, no es un sí/no válido, y qalc **no llega a guardar config** ⇒
# la próxima vez vuelve a preguntar. O sea que sin sembrar esto no falla una vez: falla SIEMPRE.
# Es política de la imagen, no del paquete —igual que el color de fondo—: una distro de verdad lo
# pondría en el esqueleto de /etc/skel.
if [ ! -f "$HOME/.config/qalculate/qalc.cfg" ]; then
mkdir -p "$HOME/.config/qalculate"
printf '[General]\ncalculate_as_you_type=0\n' > "$HOME/.config/qalculate/qalc.cfg"
say "qalc: config sembrada (si no, la pregunta de primer arranque se come la cuenta)"
fi
# ── MODO: bare (default) o session ──────────────────────────────────────────────────────────────
# `cosmic-session` es el camino de producción, pero HOY no se puede usar: llama a
# `cosmic-settings-daemon` con `.expect("failed to start settings daemon")` (src/main.rs:255) y