#!/bin/bash
# .gps_wrapper
#
# Copyright 2002-2022 AdaCore

prog="$(basename "$0")"
root="$(dirname "$0")"

## Run with "gps debug ..." to run under the debugger
debug=${1:-false}
if [ "$debug" = debug ]; then
   shift;
fi

# Get absolute directory and strip 'bin' directory to retrieve real root
root="$(cd "$root/.."; pwd)"
pixbuf_base="$root/lib/gnatstudio/gdk-pixbuf-2.0/2.10.0/"
immodules_base="$root/lib/gnatstudio/gtk-3.0/3.0.0/"

#
# For each arg - save old value as GPS_STARTUP_arg, then export new value
#
save_and_export ()
{
    while [ "$1" ]; do
        #  let 'GPS_STARTUP_$1' be ${!1} (aka double substitution of $1)
        eval "GPS_STARTUP_$1=\"\${$1-_ABSENT_VARIABLE_}\""
        export GPS_STARTUP_$1
        case $1 in
            LD_LIBRARY_PATH)
                LD_LIBRARY_PATH=$root/lib/gnatstudio:$root/lib:$LD_LIBRARY_PATH
                ;;
            DYLD_FALLBACK_LIBRARY_PATH)
                DYLD_FALLBACK_LIBRARY_PATH=$root/lib/gnatstudio:$root/lib:$DYLD_FALLBACK_LIBRARY_PATH
                ;;
            XDG_DATA_DIRS)
                XDG_DATA_DIRS=$root/share
                ;;
            XDG_CONFIG_HOME)
                XDG_CONFIG_HOME=$root/etc
                ;;
            GTK_DATA_PREFIX)
                GTK_DATA_PREFIX=$root
                ;;
            GTK_EXE_PREFIX)
                GTK_EXE_PREFIX=$root
                ;;
            GI_TYPELIB_PATH)
                GI_TYPELIB_PATH=$root/lib/girepository-1.0
                ;;
            GTK2_RC_FILES)
                unset GTK2_RC_FILES
                ;;
            FONTCONFIG_FILE)
                FONTCONFIG_FILE=$root/etc/fonts/fonts.conf
                ;;
            PANGO_RC_FILE)
                PANGO_RC_FILE=$root/etc/pango/pangorc
                ;;
            GDK_PIXBUF_MODULE_FILE)
                GDK_PIXBUF_MODULE_FILE=$pixbuf_base/loaders.cache
                ;;
            GTK_IM_MODULE_FILE)
                GTK_IM_MODULE_FILE=$immodules_base/immodules.cache
                ;;
            GDK_PIXBUF_MODULEDIR)
                GDK_PIXBUF_MODULEDIR=$pixbuf_base/loaders
                ;;
            CHARSET)
                CHARSET=ISO-8859-1
                ;;
            GSETTINGS_BACKEND)
                GSETTINGS_BACKEND=memory
                ;;
            DBUS_SESSION_BUS_ADDRESS)
                DBUS_SESSION_BUS_ADDRESS=null
                ;;
        esac

        eval "value=\"\${$1}\""
        if [ "value" ]; then
            export $1
        fi
        shift;
    done
}

if [ -d "$root/lib/gnatstudio" ]; then
  save_and_export GTK2_RC_FILES
fi

if [ -f "$root/etc/fonts/fonts.conf" ]; then
  save_and_export FONTCONFIG_FILE
fi

if [ -f "$root/etc/pango/pangorc" ]; then
  save_and_export PANGO_RC_FILE
fi

if [ -f "$pixbuf_base/loaders.cache" ]; then
  save_and_export GDK_PIXBUF_MODULE_FILE GDK_PIXBUF_MODULEDIR
fi

if [ "$CHARSET" = "" ]; then
  save_and_export CHARSET
fi

save_and_export LD_LIBRARY_PATH DYLD_FALLBACK_LIBRARY_PATH XDG_DATA_DIRS XDG_CONFIG_HOME GTK_DATA_PREFIX GTK_EXE_PREFIX GI_TYPELIB_PATH

save_and_export GSETTINGS_BACKEND

save_and_export DBUS_SESSION_BUS_ADDRESS

if [[ -v APPIMAGE ]] ; then
   # When run under AppImage, copy cache files to a temporary dir
   # and regenerate them to match new $root
   cache="$(mktemp -d)"
   cp $pixbuf_base/loaders.cache $cache
   export GDK_PIXBUF_MODULE_FILE=$cache/loaders.cache
   export GTK_IM_MODULE_FILE=$cache/immodules.cache
   $root/bin/gdk-pixbuf-query-loaders --update-cache
   $root/bin/gtk-query-immodules-3.0 --update-cache
fi

if [ "$debug" = debug ]; then
   gdb -args "$root/bin/${prog}_exe" "$@"
elif [ "$GPS_WRAPPER" = "" ]; then
   exec "$root/bin/${prog}_exe" "$@"
else
   $GPS_WRAPPER "$root/bin/${prog}_exe" "$@"
fi
