gioser

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 1430Shell 145Markdown 87Rust 852973 Sutichaykuna

⎇ b53d91edfadc953291e76e7d53e58a99b162f2da recipes/expat-shared.toml TOML · 51 siq'ikuna · 3.4 KB Ñawpa willay ch'uya

corpus: expat-shared y libffi-shared cierran la fuga al Alpine del lab f8f679d03 · Sergio ·

1# expat-shared 2.8.1 — variante DINÁMICA de expat.
2#
3# ── POR QUÉ EXISTE ─────────────────────────────────────────────────────────────────────────────
4# El expat canónico (recipes/expat.toml) es `--disable-shared`: sólo `libexpat.a`, que es lo que
5# quiere el enlace estático del corpus. Pero `sway` es `link = "dynamic"` A PROPÓSITO —un compositor
6# dlopea los drivers DRI de mesa en runtime, así que estático no sirve— y sale con
7# `NEEDED libexpat.so.1`. Ese `.so` no lo producía NINGÚN artefacto sellado ⇒ el rootfs hidratado
8# caía al `libexpat.so.1` del sysroot Alpine del lab. Es la misma fuga de soberanía que documenta
9# `zlib-shared`, y con el agravante de [[lab-fuera-de-hash-inputs]]: el lab NO entra en `hash_inputs`,
10# así que la dependencia era invisible para el store — el artefacto se daba por bueno y sólo
11# arrancaba en una máquina que tuviera Alpine debajo.
12#
13# ── POR QUÉ UNA VARIANTE Y NO `link = "dynamic"` EN LA CANÓNICA ────────────────────────────────
14# `link` entra en `hash_inputs`. Tocar `recipes/expat.toml` re-hashearía expat y, en cascada, todo
15# lo que lo lista en deps — fontconfig, dbus, mesa, los crates `-sys`… cientos de recetas selladas
16# a reconstruir por una lib que ya está bien. El patrón `*-shared` deja intacta la canónica: el
17# nombre es DISTINTO (`expat-shared` no pisa a `expat`), así que conviven en el mismo store y cada
18# consumidor toma la que necesita. Mismo criterio que zlib-shared / freetype-shared / libpng-shared.
19#
20# ── EN EL CORPUS, NO EN UNA COLA ───────────────────────────────────────────────────────────────
21# La resolución de deps es hermano→padre: una receta del corpus NO ve las de `incoming-*`. Las
22# variantes compartidas genéricas (zlib-shared, fontconfig-shared, freetype-shared, libpng-shared…)
23# ya viven acá por esa razón. Ponerla en `incoming-wlr/` la haría invisible para todo lo demás y
24# obligaría a una cuarta copia en cuanto otro escritorio la necesite.
25#
26# ── EL BUILD ES EL DE AUTOTOOLS, SIN EL TRUCO DE zlib ──────────────────────────────────────────
27# zlib-shared fabrica su `.so` a mano con `--whole-archive` porque el configure de zlib aborta bajo
28# zig cc. Acá no hace falta: el configure de expat acepta `--enable-shared` y libtool emite el
29# `libexpat.so.1` con su SONAME correcto. Se cae el `-all-static -no-pie` de la canónica, que es
30# justamente lo que impide producir una compartida.
31
32name    = "expat-shared"
33version = "2.8.1"
34license = "MIT"
35
36[source]
37tarball = "https://github.com/libexpat/libexpat/releases/download/R_2_8_1/expat-2.8.1.tar.xz"
38sha256  = "10b195ee78160a908388180a8fe3603d4e9a12f4755fbf5f3816b23a9d750da0"
39
40[build]
41compiler = "zig-cc"
42target   = "x86_64-linux-musl"
43link     = "dynamic"
44
45[deps]
46build = ["binutils", "make"]
47
48[build.phases]
49configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-pic --without-docbook'
50compile   = 'make -j"$(nproc)"'
51install   = 'make DESTDIR=/out install'