# 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
'''
