Files
SergioandClaude Opus 5 2b4999f682 libpng-pic: la variante que faltaba entre la estatica y la .so
gdk-pixbuf no sellaba, y las dos libpng del corpus fallaban por extremos
OPUESTOS — probadas las dos hoy, una detras de otra:

  libpng         .a sin PIC   → «relocation R_X86_64_64 cannot be used against
                                local symbol; recompile with -fPIC», porque ese
                                link acaba siendo dinamico (aparece libc.so)
                                pese al `link = "static"` de la receta.
  libpng-shared  solo la .so  → «unable to find static system library 'png16'»,
                                porque la receta pide --prefer-static.

Es la misma tenaza que el `bz2` de freetype: los -dev traen .so pero no .a. La
salida no es elegir un extremo sino una .a que TAMBIEN sea PIC. `libpng-pic` es
copia literal del canonico con `--with-pic` en el configure; nada mas.

EVIDENCIA de que es PIC, y hay que medirla bien: 0 relocs R_X86_64_32/32S
contra 706 del canonico — EXCLUYENDO las secciones .debug_*. Sin ese filtro
ambas dan >13000 y parecen identicas; es la correccion de la regla del .a
no-PIC que ya nos mordio en GNOME.

El canonico NO se toca (decision del usuario): 12 dependientes en cuatro colas
y es estatico por diseño. Se añade una SOMBRA en incoming-wlr que cambia una
sola linea de deps. libpng-pic si va al corpus, porque la resolucion es
HERMANO→PADRE y una receta del corpus no veria una variante en incoming-*.

⚠ ALCANCE: la sombra la ve su cola. gtk4, libadwaita, gtksourceview y otras 4
son del CORPUS y siguen resolviendo el gdk-pixbuf canonico roto.

⚠ NO ERA UN FALLO NUEVO: gdk-pixbuf tenia artefacto sellado y se servia por
cache-hit. La reconstruccion no lo rompio, lo DESTAPO.

Verificado: sombra SELLADA, 71 MB, con .a, .pc y los loaders .so reales — no un
directorio vacio haciendose pasar por artefacto.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xd5DComN9Nu47TBpYMBHBn
2026-08-21 13:08:49 +00:00

41 lines
2.5 KiB
TOML

# libpng-pic 1.6.58 — variante ESTÁTICA pero PIC (`libpng16.a` compilada con -fPIC).
#
# ── EL HUECO QUE LLENA, ENTRE EL CANÓNICO Y LA -shared ──────────────────────────────────────────
# El corpus tenía dos libpng y ninguna sirve para el caso de gdk-pixbuf:
#
# `libpng` → `--disable-shared`, objetos SIN PIC. Si el link acaba siendo dinámico:
# «relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC».
# `libpng-shared` → sólo `libpng16.so`. Si el consumidor pide estático (`--prefer-static`):
# «unable to find static system library 'png16'».
#
# Las dos las probé con gdk-pixbuf el 2026-08-21 y fallan por los extremos opuestos. La salida no es
# elegir un extremo, es una `.a` que TAMBIÉN sea PIC: satisface a quien pide la estática por nombre
# y además se puede reubicar dentro de un link dinámico. Es la misma clase de muro que deja a CPython
# sin `_curses` («relocation R_X86_64_PC32 against symbol 'stdscr'»), así que esta variante es un
# primer ladrillo de ese frente, no un parche de una receta.
#
# ── QUÉ CAMBIA RESPECTO A `recipes/libpng.toml` ─────────────────────────────────────────────────
# Sólo el `configure`: se añade `--with-pic` (autoconf/libtool: compila los objetos del archivo
# estático con -fPIC). Nada más — mismo tarball, mismo sha256, mismo compilador, mismas deps.
#
# NO toca al canónico ni lo reemplaza: nombre distinto ⇒ sin colisión, igual que `libpng-shared`
# (ver la nota de promoción ahí). Vive en el CORPUS, no en una cola, porque la resolución de deps es
# HERMANO→PADRE: una receta del corpus no vería una variante metida en `incoming-*`.
name = "libpng-pic"
version = "1.6.58"
license = "Libpng"
[source]
tarball = "https://downloads.sourceforge.net/libpng/libpng-1.6.58.tar.gz"
sha256 = "8c9b05b675ca7301a458df2c2e46f26e1d41ff36b8863f8c33530bc58c2e6225"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
flags = []
[build.phases]
configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --with-pic CPPFLAGS=-I/usr/include LDFLAGS=-L/usr/lib'
compile = 'make LDFLAGS="-all-static -no-pie" -j"$(nproc)"'
install = 'make DESTDIR=/out install LDFLAGS="-all-static -no-pie"'
[deps]
build = ["zlib", "make"]