#!/usr/bin/env bash
# AppRun entry point for the Lutris AppImage.
#
# Two responsibilities:
#   1. Source linuxdeploy-plugin-gtk's hook so GI_TYPELIB_PATH, GDK_PIXBUF_*,
#      XDG_DATA_DIRS, etc. point inside the AppDir.
#   2. Launch bin/lutris with the bundled Python interpreter.
#
# Lutris is intentionally NOT sandboxed: it must call host binaries (xrandr,
# 7z, fuser, wine, the user's installed runners), read the user's $HOME,
# and access mounted drives. We deliberately leave PATH and PYTHONPATH
# alone so host tools and host Python (used by host subprocesses like
# umu-run) work as they do outside the AppImage. The build script
# installs Lutris's package files via --install-layout=deb so the
# bundled Python finds them via its standard dist-packages search,
# without us needing to advertise an AppDir path on PYTHONPATH.
set -e

HERE="$(dirname "$(readlink -f "${0}")")"

# linuxdeploy-plugin-gtk writes its environment setup into apprun-hooks/.
# Source every hook it dropped so we inherit the GTK/Pixbuf/typelib paths.
if [ -d "$HERE/apprun-hooks" ]; then
    for hook in "$HERE"/apprun-hooks/*.sh; do
        # shellcheck disable=SC1090
        [ -r "$hook" ] && . "$hook"
    done
fi

export APPDIR="$HERE"

# Intentionally do NOT export LD_LIBRARY_PATH. linuxdeploy already set
# RPATH=$ORIGIN/.. on every bundled binary, so they find their sibling libs
# without an env override. Exporting LD_LIBRARY_PATH here would leak into
# subprocesses — and Lutris launches host binaries constantly (xrandr, 7z,
# fuser, /usr/bin/flatpak, wine, etc.). Forcing them to load our older
# bundled libssl/libcrypto/libstdc++ breaks any host tool whose own deps
# were built against newer symbols. The cost of this discipline is that
# anything we copied into the AppDir manually (PyGObject's _gi.so,
# python3-dbus' bindings) must have its RPATH patched by the build script,
# since linuxdeploy only patches files it deploys itself.
unset LD_LIBRARY_PATH

# Python: find the bundled interpreter and site-packages. We accept any
# python3.X under usr/bin so this script doesn't need to be rev'd when the
# build image's Python minor version changes.
PYTHON_BIN=""
for cand in "$HERE"/usr/bin/python3.* "$HERE"/usr/bin/python3; do
    if [ -x "$cand" ] && [ ! -L "$cand" ]; then
        PYTHON_BIN="$cand"
        break
    fi
done
if [ -z "$PYTHON_BIN" ]; then
    # Fallback: host python3. The AppImage is less portable this way, but
    # at least it boots so the user sees a real error rather than nothing.
    PYTHON_BIN="$(command -v python3 || true)"
fi
if [ -z "$PYTHON_BIN" ]; then
    echo "Lutris AppImage: no python3 interpreter found in AppDir or host" >&2
    exit 1
fi

# bin/lutris strips /home paths from sys.path unless this is set, which
# would also drop the AppDir paths Python auto-discovered when extracted
# AppImages live under /home (e.g. ~/Applications).
export LUTRIS_ALLOW_LOCAL_PYTHON_PACKAGES=1

exec "$PYTHON_BIN" "$HERE/usr/bin/lutris" "$@"
