#!/bin/sh
MYPATH="$(readlink -f "$0")"
NV_AGORA_PATH="$(dirname "$MYPATH")"
export NV_AGORA_PATH
export LD_LIBRARY_PATH="$NV_AGORA_PATH:$LD_LIBRARY_PATH"

NV_AGORA_KRB_OPENSSL_PRELOAD=false
if nm -D /lib64/libk5crypto.so.3 2>/dev/null | grep 'U\s\+EVP_KDF_ctrl' >/dev/null; then
  echo "libk5crypto.so.3 requires EVP_KDF_ctrl. Switching to system OpenSSL libraries" >&2
  export LD_PRELOAD=/lib64/libcrypto.so.1.1:/lib64/libssl.so.1.1
  NV_AGORA_KRB_OPENSSL_PRELOAD=true
fi

AGORA_USE_MESA_FALLBACK=false
if ! "$NV_AGORA_PATH/OpenGLVersionChecker" "--minGLVersion=2.0.0"; then
    AGORA_USE_MESA_FALLBACK=true
fi

if [ "$AGORA_USE_MESA_FALLBACK" = true ]; then
    echo "Warning: OpenGL Version check failed. Falling back to Mesa software rendering." >&2
    AGORA_SYSTEM_MESA_FALLBACK=false
    MESA_FALLBACK_PATH="$NV_AGORA_PATH/Mesa"
    # Bundled DeployMesaGLLibraries ships libGL only (no libEGL in Mesa/).
    _mesa_path_works_bundled() {
        _dir="$1"
        [ -d "$_dir" ] || return 1
        [ -f "$_dir/libGL.so.1" ] || [ -f "$_dir/libGL.so" ] || [ -f "$_dir/libGL.so.1.5.0" ] || return 1
        LD_LIBRARY_PATH="$_dir:$NV_AGORA_PATH" \
            "$NV_AGORA_PATH/OpenGLVersionChecker" "--minGLVersion=2.0.0" >/dev/null 2>&1
    }
    # Typical distro Mesa: GL + EGL in the same multiarch or lib64 tree.
    _mesa_path_works_system() {
        _dir="$1"
        [ -d "$_dir" ] || return 1
        [ -f "$_dir/libGL.so.1" ] || [ -f "$_dir/libGL.so" ] || return 1
        [ -f "$_dir/libEGL.so.1" ] || return 1
        LD_LIBRARY_PATH="$_dir:$NV_AGORA_PATH" \
            "$NV_AGORA_PATH/OpenGLVersionChecker" "--minGLVersion=2.0.0" >/dev/null 2>&1
    }

    MESA_PATH_SELECTED=false
    if _mesa_path_works_bundled "$MESA_FALLBACK_PATH"; then
        export LD_LIBRARY_PATH="$MESA_FALLBACK_PATH:$NV_AGORA_PATH"
        MESA_PATH_SELECTED=true
    else
        SYSTEM_MESA_PATHS="/usr/lib64 /lib64 /usr/lib \
            /usr/lib/aarch64-linux-gnu /usr/lib/arm-linux-gnueabihf \
            /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu"
        for mesa_lib_path in $SYSTEM_MESA_PATHS; do
            if _mesa_path_works_system "$mesa_lib_path"; then
                export LD_LIBRARY_PATH="$mesa_lib_path:$NV_AGORA_PATH"
                MESA_PATH_SELECTED=true
                AGORA_SYSTEM_MESA_FALLBACK=true
                break
            fi
        done
    fi
    if [ "$MESA_PATH_SELECTED" = false ]; then
        export LD_LIBRARY_PATH="$NV_AGORA_PATH"
    fi
    if [ "$AGORA_SYSTEM_MESA_FALLBACK" = true ] \
        && [ "$NV_AGORA_KRB_OPENSSL_PRELOAD" != true ] \
        && [ -f "$NV_AGORA_PATH/libcrypto.so.3" ] && [ -f "$NV_AGORA_PATH/libssl.so.3" ]; then
        # Do not combine with LD_PRELOAD OpenSSL 1.1 above (symbol clashes).
        export LD_PRELOAD="$NV_AGORA_PATH/libcrypto.so.3:$NV_AGORA_PATH/libssl.so.3${LD_PRELOAD:+:$LD_PRELOAD}"
    fi
fi

if [ "${NV_AGORA_FORCE_BREAKPAD:-0}" -ge 0 ]; then
    "$NV_AGORA_PATH/CrashReporter" "NVIDIA Nsight Compute" "NVIDIA Nsight Compute" "2026.3.1.0 (build 38829034) (public-release)" "$NV_AGORA_PATH/ncu-ui.bin" "$@"
else
    "$NV_AGORA_PATH/ncu-ui.bin" "$@"
fi
