#!/bin/bash
# Copyright 2022-2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.

DCV_RUN_PORTABLE=0

if [ "${DCV_RUN_PORTABLE}" = "1" ]; then
    _dir=`dirname $0`

    pushd "${_dir}" > /dev/null
    # get the absolute path
    _dir=`pwd`
    popd > /dev/null

    basedir="${_dir}/usr"
else
    basedir=/usr
fi

bindir=${basedir}/bin
libdir=${basedir}/lib64
libexecdir=${basedir}/libexec
datadir=${basedir}/share
sysconfdir=/etc
buildvariant=generic

if [ "${buildvariant}" = "workspaces" ]; then
    variant="workspacesclientdcv"
else
    variant="dcvviewer"
fi

dcvviewer_bin="${libexecdir}/${variant}/dcvviewer"

export LD_LIBRARY_PATH="${libdir}/${variant}:${libdir}:/usr/share/${variant}/cef:${LD_LIBRARY_PATH}"
export XDG_DATA_DIRS="${datadir}:${XDG_DATA_DIRS}:/usr/share:/usr/local/share"
export GIO_EXTRA_MODULES="${libdir}/${variant}/gio/modules"
export GST_PLUGIN_SCANNER="${libexecdir}/${variant}/gst-plugin-scanner"
export GST_PLUGIN_SYSTEM_PATH="${libdir}/${variant}/gstreamer-1.0"
export GTK_PATH="${libdir}/${variant}"
export PANGO_LIBDIR="${libdir}/${variant}"
export GDK_PIXBUF_MODULE_FILE="${libdir}/${variant}/gdk-pixbuf-2.0/2.10.0/loaders.cache"
export GSETTINGS_SCHEMA_DIR="${datadir}/${variant}/schemas"
export FONTCONFIG_PATH="${sysconfdir}/fonts"
export DCV_SASL_PLUGIN_DIR="${libdir}/dcvviewer/sasl2"

case "$1" in
    --gdb)
        shift
        ;&
    --gdb-script)
        if [ "$1" == "--gdb-script" ]; then
            script_file="$2"
            shift; shift

            if [ -n "${script_file}" -a -f "${script_file}" ]; then
                export G_DEBUG=fatal-critical
                # Sets pending breakpoints on by default so that we don't get asked about them
                rust-gdb -ex 'set breakpoint pending on' -x "${script_file}" --args "${dcvviewer_bin}" "$@"
            else
                echo "GDB script not found: ${script_file}"
                _exit=1
            fi
        else # No gdb script provided
            export G_DEBUG=fatal-critical
            rust-gdb -ex run --args "${dcvviewer_bin}" "$@"
        fi

        _exit=$?
        ;;
    --valgrind)
        shift
        export G_DEBUG=resident-modules
        valgrind --tool=memcheck --leak-check=full --leak-resolution=high --num-callers=20 --log-file=vgdump "${dcvviewer_bin}" "$@"
        _exit=$?
        ;;
    --sanitizer)
        shift
        export ASAN_OPTIONS="log_path=/tmp/dcvviewer-asan.log:fast_unwind_on_malloc=0"
        "${dcvviewer_bin}" "$@"
        _exit=$?
        ;;
    *)
        "${dcvviewer_bin}" "$@"
        _exit=$?
        ;;
esac

exit ${_exit}

# ex: set ts=4 sw=4 et syntax=sh :
