# 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" license = "ISC" [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 '''