diff --git a/scripts/servidor/cc-por-zig.sh b/scripts/servidor/cc-por-zig.sh index 3b87d793..b3baa398 100755 --- a/scripts/servidor/cc-por-zig.sh +++ b/scripts/servidor/cc-por-zig.sh @@ -45,6 +45,7 @@ done # directo. Las tres banderas son necesarias —y `link-self-contained=no` lo es porque este toolchain # no trae `rust-lld` (incompatible con el llvm-config externo); la variante fina `=-linker` es # INESTABLE en este triple y exige `-Z`. +mkdir -p /etc/profile.d cat > /etc/profile.d/rust-enlazador.sh <<'EOF' # El enlace de rust pasa por el driver de C (ver /usr/bin/cc). Sin esto no enlaza ninguna dylib, # o sea ninguna proc-macro. SDD 28 §6.52. @@ -52,6 +53,25 @@ export RUSTFLAGS="${RUSTFLAGS:-} -C linker=cc -C linker-flavor=gcc -C link-self- EOF chmod 644 /etc/profile.d/rust-enlazador.sh +# ⚠ …Y RESULTA QUE EN ESTA CAJA `/etc/profile.d` NO LO LEÍA NADIE: `/etc/profile` **no existía**. +# O sea que dejar ahí el fichero habría sido exactamente la avería que este repo persigue —presente, +# con contenido, y sin efecto—. Se descubrió con el control de abajo, que pregunta por la VARIABLE en +# una shell de login y no por el fichero. De paso revive el `bash_completion.sh` que ya estaba ahí, +# igual de mudo. No se toca el PATH: el de la caja lo fija el init y pisarlo desde acá sería cambiar +# algo que nadie pidió. +if [ ! -f /etc/profile ]; then + cat > /etc/profile <<'EOF' +# /etc/profile — lo lee toda shell de LOGIN. Existe para que `/etc/profile.d/*.sh` sirva de algo: +# el directorio estaba y nadie lo leía (2026-09-18). +for _f in /etc/profile.d/*.sh; do + [ -r "$_f" ] && . "$_f" +done +unset _f +EOF + chmod 644 /etc/profile + echo " (creado /etc/profile: el directorio profile.d existía y no lo leía nadie)" +fi + # ── CONTROLES: lo que importa es que COMPILE, no que el fichero exista ─────────────────────────── T=$(mktemp -d); trap 'rm -rf "$T"' EXIT printf '#include \nint main(void){ puts("C en takana"); return 0; }\n' > "$T/h.c" @@ -81,4 +101,11 @@ if [ -n "$R" ] && [ -x "$R/usr/bin/rustc" ]; then else echo " (no hay rust en el store: me salto sus controles)" fi +# ── CONTROL DEL ENTORNO: la variable, no el fichero ───────────────────────────────────────────── +# Que el `.sh` exista no dice nada; lo que importa es que una shell de LOGIN lo traiga puesto. +rf=$(sh -lc 'printf "%s" "$RUSTFLAGS"' 2>/dev/null || true) +case "$rf" in + *"linker-flavor=gcc"*) echo " ✓ entorno: una shell de login trae RUSTFLAGS puesto" ;; + *) echo "✗ /etc/profile.d/rust-enlazador.sh existe pero una shell de login NO lo recoge (RUSTFLAGS='$rf')" >&2; exit 1 ;; +esac echo "la caja tiene driver de C"