Files
hammer/recipes/samurai.toml
T
sergioandClaude Opus 4.8 87e0fc331d static: pkgconf arreglada + CORRIJO el alcance del hallazgo de 756928a
756928a generalizó de más. El alcance real, medido dentro del sandbox con readelf sobre un
`int main(){return 0;}` trivial:

    zig 0.13.0:  -static                           → NEEDED=1  (dinámico)  ← el bug
    zig 0.13.0:  -target x86_64-linux-musl -static → NEEDED=0  (estático)
    zig 0.16.0:  -static                           → NEEDED=0  (estático)  ← default, sano

O sea: el -static roto es de ZIG 0.13.0, NO del framework. Con el zig default el -static que el
lab exporta por link="static" funciona ⇒ CC sin -target (sandbox.rs:415) está BIEN y NO hay que
re-hashear los 841 sellados, al revés de lo que decía 756928a. samurai lo sufría por caer en la
intersección de dos rarezas: pinea zig 0.13.0 Y no usa libtool (nada absorbía el -static).

Las otras 4 recetas con zig 0.13.0 + link=static (mtools/openssh/openssl/xorriso): auditadas,
0 mienten — usan libtool, que absorbe el -static por su cuenta.

pkgconf: el diagnóstico ORIGINAL (libtool se come el -static) era el correcto. Usaba el BuildSys
automático ⇒ fases explícitas sólo para meter -all-static en compile Y en install. Estático de
verdad (NEEDED=0).

Van 2 de 11: samurai, pkgconf.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:35:48 -04:00

47 lines
2.3 KiB
TOML

# samurai 1.3 — clon C de ninja (lo que usa Alpine como `ninja`). Build-tool del stack meson
# (libdrm/wayland/mesa lo invocan como backend). Provee /usr/bin/samu + symlink /usr/bin/ninja.
# zig 0.13.0: con el zig default (0.16/clang21) el binario musl miscompila y falla en runtime
# con "reallocarray: No error information" — el patrón conocido (binutils/elfutils/flex).
name = "samurai"
version = "1.3"
[source]
tarball = "https://github.com/michaelforney/samurai/releases/download/1.3/samurai-1.3.tar.gz"
sha256 = "1bc020a9e133432df51911ac71cc34322f828934d9a2282ba2916d88c15976af"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
zig_version = "0.13.0"
[deps]
build = ["make"]
[build.phases]
# `-target x86_64-linux-musl` en LDFLAGS. Samurai cae en la INTERSECCIÓN de dos rarezas, y por eso es
# la única receta que necesita esto:
#
# 1. NO usa libtool (Makefile pelado) ⇒ el `-all-static` de jq/parted/shadow/expat no aplica acá:
# sería un flag desconocido para zig-cc. El `-static` llega crudo al driver.
# 2. Pinea `zig_version = "0.13.0"` (ver arriba: el zig default miscompila el musl acá) — y el
# `-static` de zig 0.13 está ROTO para el target NATIVO dentro del sandbox: compila nativo,
# detecta la musl de Alpine del rootfs (/usr/lib/libc.a existe) y enlaza contra ella IGNORANDO
# el -static. `-target` fuerza la musl BUNDLEADA de zig ⇒ el -static se respeta.
#
# Medido DENTRO del sandbox con readelf, sobre un `int main(){return 0;}` trivial:
# zig 0.13.0: -static → NEEDED=1 (dinámico) ← el bug
# zig 0.13.0: -target x86_64-linux-musl -static → NEEDED=0 (estático)
# zig 0.16.0: -static → NEEDED=0 (estático) ← default, sano
#
# NO es un agujero de framework: con el zig default el -static del lab funciona, así que `CC` sin
# `-target` (sandbox.rs) está bien y NO hay que re-hashear el store. Las otras 4 recetas que pinean
# 0.13.0 con link=static (mtools/openssh/openssl/xorriso) están sanas: usan libtool, que absorbe el
# -static por su cuenta. Auditadas, 0 mienten.
compile = 'make CFLAGS="-O2" LDFLAGS="-target x86_64-linux-musl -static"'
install = '''
set -e
make install PREFIX="/usr" DESTDIR="/out"
ln -s samu /out/usr/bin/ninja
'''