756928ageneralizó 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ía756928a. 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>
47 lines
2.3 KiB
TOML
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
|
|
'''
|