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