libstdc++.so.6 (20.850.968 bytes) y libgcc_s.so.1 (824.776), construidas desde
el tarball de GCC 15.2.0 — la MISMA versión del lab, porque firefox se enlaza
contra la libstdc++ compartida de ese gcc y otra versión traería de vuelta el
mismo fallo disfrazado. sha512 del tarball verificado byte a byte contra el
APKBUILD de Alpine.
Tres decisiones que no son de estilo:
--disable-symvers Alpine lo pasa. El versionado cambia la tabla de símbolos;
nuestros binarios se enlazaron contra la libstdc++ SIN
versionar del lab.
link = "dynamic" hammer inyecta LDFLAGS=-static por defecto y acá el
producto ES una librería compartida: con el default no
saldría ni un .so. Misma perilla que apagaba los threads
de openssl, vista desde el otro lado.
--disable-bootstrap Sólo `all-target-libgcc all-target-libstdc++-v3`. GCC
entero multiplica el tiempo por cinco para tirar el
compilador a la basura.
Los guardianes se ganaron el sueldo en las dos primeras corridas:
1ª «!! falta libstdc++.so.6» — y las librerías estaban perfectas: GCC instala
en /usr/lib64 porque su t-linux64 fija MULTILIB_OSDIRNAMES=../lib64, y
--disable-multilib NO lo apaga. Un .so impecable en el directorio que el
loader no mira es EXACTAMENTE el fallo que esta receta viene a arreglar,
un directorio más allá. Se normaliza a lib en el install.
2ª «!! no definen los símbolos» — y sí los definían. --disable-symvers apaga
el versionado de libstdc++, pero libgcc tiene su PROPIO libgcc.map y
versiona igual: nm los imprime como _Unwind_Backtrace@@GCC_3.3 y el grep
anclado al fin de línea no los veía. El fallo era del guardián. Verificado
contra el libgcc_s.so.1 DEL LAB —el que satisface a firefox hoy— y
coinciden hasta en la etiqueta de versión.
gmp/mpfr/mpc ya existían pero sólo en recipes/incoming-*, con DOS variantes cada
una. Promovidas las de incoming-kde y no las de cosmic: la terna tiene que ser
internamente coherente porque mpc enlaza su .so contra las otras dos, y con las
de cosmic (estáticas sin PIC) muere en «relocation R_X86_64_32 ... recompile
with -fPIC». La de kde va con link=dynamic las tres y además ya estaba SELLADA
entera, así que la promoción no costó ni un build.
53 lines
3.1 KiB
TOML
53 lines
3.1 KiB
TOML
# ── ⚠ HAY DOS `gmp` EN EL CORPUS, Y ES A PROPÓSITO (verificado 2026-09-01) ─────────────────────
|
|
# `incoming-kde/gmp.toml` (ésta) y `incoming-cosmic/gmp.toml` emiten el MISMO nombre de artefacto y
|
|
# sellan en direcciones distintas. NO es un duplicado rancio que haya que unificar — son dos
|
|
# variantes deliberadas, y la diferencia está en las dos líneas que importan:
|
|
#
|
|
# KDE link=dynamic --enable-shared --enable-cxx ⇒ libgmp.so + libgmpxx.so
|
|
# COSMIC link=static --disable-shared ⇒ libgmp.a, sin C++
|
|
#
|
|
# Y las dos citan a libqalculate como consumidor con conclusiones opuestas sobre `gmpxx.h`: acá se
|
|
# activa porque el libqalculate de la campaña KDE lo exige; allá se apaga a propósito para no
|
|
# arrastrar el runtime de C++. Las dos están selladas y las dos son correctas para su frente.
|
|
#
|
|
# ⚠ LO QUE SÍ CUESTA, Y CUÁNDO. Compartir nombre hace ambigua la clasificación de `store-gc.sh`: un
|
|
# artefacto rancio de UNA de las dos puede caer como SUPERADO porque la OTRA tiene sellado vigente,
|
|
# y ahí se perdería el único ejemplar. La condición es precisa: **sólo corre riesgo si el hash
|
|
# vigente de una de las dos NO está sellado**. Medido el 2026-09-01: las dos selladas ⇒ exposición
|
|
# CERO. Antes de podar con nombres compartidos, comprobar eso, no el nombre.
|
|
#
|
|
# `mpfr` tiene exactamente el mismo par (KDE dynamic / COSMIC static) por la misma razón.
|
|
# ⇒ Si algún día molesta de verdad, la salida NO es unificar sino renombrar la dinámica a
|
|
# `gmp-shared`, que es la convención que el corpus ya usa (zlib-shared, cairo-shared…). Cuesta
|
|
# re-hashear: `yupana radio` da 7 sellados de KDE que caen a deuda. No se hizo por eso.
|
|
# GNU GMP 6.3.0 — aritmética de enteros/racionales/floats de precisión arbitraria (libgmp.so + libgmpxx.so).
|
|
# Campaña KDE (ADR 0011): sustrato de libqalculate (motor matemático de KCalc/KRunner), que exige el
|
|
# interfaz C++ gmpxx.h además del C. También base de mpfr (#2 de esta tanda).
|
|
#
|
|
# compiler=zig-cc + --disable-assembly: GMP trae asm x86_64 a mano, pero el gueto-gcc del sandbox falla el
|
|
# test de configure ("cannot find -lssp_nonshared/-lgcc: file in wrong format" — libgcc/ssp del gcc de
|
|
# Alpine en formato incorrecto para el link musl). zig cc compila musl limpio; con --disable-assembly usa
|
|
# el mpn en C genérico (más lento, irrelevante para un build-dep de libqalculate). --enable-cxx = libgmpxx.so
|
|
# (gmpxx.h que libqalculate exige). La descarga es del mirror GNU (gmplib.org cuelga en TLS con hammer-fetch).
|
|
name = "gmp"
|
|
version = "6.3.0"
|
|
|
|
[source]
|
|
tarball = "https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz"
|
|
sha256 = "a3c2b80201b89e68616f4ad30bc66aee4927c3ce50e33929ca819d5c43538898"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
zig_version = "0.13.0"
|
|
flags = []
|
|
|
|
[build.phases]
|
|
configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-static --enable-shared --enable-cxx --disable-assembly'
|
|
compile = 'make -j"$(nproc)"'
|
|
install = "make install DESTDIR=/out && find /out -name '*.la' -delete"
|
|
|
|
[deps]
|
|
build = ["m4", "pkgconf"]
|