#!/bin/sh
# Lanzador de atuq. Va a /usr/bin/atuq.
#
# ── POR QUÉ NO ES UN SYMLINK (que es lo que era en la v0.1) ────────────────────────────────────
# El motor carga sus propias librerías —libnspr4, libnss3, libmozsandbox…— desde `/usr/lib/atuq`, y
# ni el binario ni esas `.so` traen `RPATH`/`RUNPATH`: se comprobó con `readelf -d` y no hay
# ninguno. Con el symlink, el navegador moría antes de pintar nada:
#
#     XPCOMGlueLoad error for file /usr/lib/atuq/libmozsandbox.so:
#     Error loading shared library libnspr4.so: No such file or directory
#
# El `LD_LIBRARY_PATH` es además lo que necesitan los procesos HIJOS: Firefox lanza un proceso por
# pestaña y todos cargan las mismas librerías, así que tiene que heredarse.
#
# La alternativa más limpia sería grabar `RPATH=$ORIGIN` en los ELF —es lo que hace el APKBUILD de
# Alpine, que trae `patchelf` en sus makedepends—, pero `patchelf` no existe todavía como receta del
# corpus. Cuando exista, esto se puede simplificar a un symlink otra vez.
#
# `exec` y no una llamada normal: así el proceso que queda es el motor, `/proc/self/exe` apunta a
# `/usr/lib/atuq/atuq` y Gecko resuelve su appdir correctamente. Con un `sh` de por medio quedaría
# un proceso zombi de más y el nombre en `ps` sería el del script.
# ── ⚠ EL DIRECTORIO VA DOS VECES, Y NO ES UN DEDAZO (2026-09-07) ──────────────────────────────
# Gecko SE COME EL PRIMER ELEMENTO de `LD_LIBRARY_PATH` al lanzar el proceso RDD (el que decodifica
# vídeo). Con el appdir una sola vez —o sea, primero— el RDD arranca SIN él, no encuentra
# `libmozavcodec.so`/`libmozavutil.so` (el ffvpx bundleado, que es donde vive dav1d) y registra
#
#     PlatformDecoderModule  FFVPX: Link result: NoProvidedLib
#
# El navegador NO falla: se cae al ffmpeg del sistema, que cubre H.264/AAC/VP8/VP9/MP3/FLAC/Opus…
# pero **NO AV1 por software** —el decodificador `av1` de ffmpeg es sólo hwaccel y nuestra receta va
# sin dav1d—, así que un vídeo AV1 se queda en `readyState=1` para siempre. Es la forma de fallo de
# esta casa: media función apagada, cero mensajes de error.
#
# Medido con tres corridas que sólo cambian esta variable (matriz en `scripts/test-atuq-codecs.sh`):
#
#     LD=/usr/lib/atuq:/usr/lib:/lib             → RDD NoProvidedLib   AV1 ✗
#     LD=/usr/lib/atuq:/usr/lib/atuq:/usr/lib    → RDD Success         AV1 ✓
#     LD=/relleno:/usr/lib/atuq:/usr/lib         → RDD Success         AV1 ✓   (el relleno se lo come)
#
# Repetirlo es la mitigación correcta mientras no haya `patchelf` en el corpus para grabar
# `RUNPATH=$ORIGIN` en los ELF, que es lo que hace Alpine y lo que borraría esta variable entera.
LD_LIBRARY_PATH="/usr/lib/atuq:/usr/lib/atuq${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH
exec /usr/lib/atuq/atuq "$@"
