#!/bin/sh -f

makeAbsolute() {
    case $1 in
        /*)
            # already absolute, return it
            echo "$1"
            ;;
        *)
            # relative, prepend $2 made absolute
            echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
            ;;
    esac
}

me=`which "$0"` # Search $PATH if necessary
# if it's a symbolic link, get path of destination
if test -L "$me"; then
    # Try readlink(1)
    readlink=`type readlink 2>/dev/null` || readlink=
    if test -n "$readlink"; then
        # We have readlink(1), so we can use it. Assuming GNU readlink (for -f).
        me=`readlink -nf "$me"`
    else
        # No readlink(1), so let's try ls -l
        me=`ls -l "$me" | sed 's/^.*-> //'`
        base=`dirname "$me"`
        me=`makeAbsolute "$me" "$base"`
    fi
else
    #base=`dirname "$me"`
    base=""
    me=`makeAbsolute "$me" "$base"`
fi
# macOS does not like to have // in the middle of the path
me=`echo "$me" | sed -e "s/\/\//\//g"`

export BASEDIR="$(dirname "$me")"
export MY_STRINGS="$BASEDIR"/strings_static.exe

xdpyinfo=""
for donde in /usr/bin/X11/xdpyinfo /usr/X11/xdpyinfo /usr/bin/xdpyinfo; do
    if [ -x $donde ]; then
	xdpyinfo=$donde
	break
    fi
done

if [ "$xdpyinfo" = "" ]; then
    echo "Warning: couldn't find xdpyinfo to determine GLX availability. "
    glx_capable=""
else
    glx_capable=`vglrun $xdpyinfo | grep GLX`
fi

# miramos si se ha especificado Software OpenGL

if [ -f $HOME/.gidDefaults ]; then
    softOGL=`/bin/grep -s "SoftwareOpenGL *1" $HOME/.gidDefaults`
    if [ "$softOGL" != "" ]; then
	glx_capable=""
    fi
fi

# test if really glx is working !
if [ "$glx_capable" != "" ]; then
    glxinfo=""
    for donde in /usr/bin/glxinfo /usr/X11/glxinfo /usr/bin/X11/glxinfo; do
        if [ -x $donde ]; then
    	glxinfo=$donde
    	break
        fi
    done
    
    if [ "$glxinfo" != "" ]; then
        vglrun $glxinfo 2> /dev/null 1> /dev/null
        # return code == 0 --> is ok, 1 --> glx error, 127 --> command not found
        if [ $? != 0 ]; then
    	    glx_capable=""
	    echo "ERROR: glx configuration is not valid. Check if driver installation is correct!"
	    export GLX_ERROR=1
        fi
    fi
fi

export VTK_LIB_DIR="$BASEDIR"/scripts/vtk
export OBJARRAY_LIB_DIR="$BASEDIR"/scripts/objarray
export TLS_LIB_DIR="$BASEDIR"/scripts/tls
export TDBC_LIB_DIR="$BASEDIR"/lib/tdbc
export PYTHON_LIB_DIR="$BASEDIR"/scripts/tohil/python/x64/lib

# gid-python environment variables
export PYTHONHOME="$BASEDIR"/scripts/tohil/python
export PYTHONPATH="$PYTHONHOME"/bin:"$PYTHONHOME"/x64/bin:"$PYTHONHOME"/lib:"$PYTHONHOME"/x64/lib:"$PYTHONHOME"/lib/site-packages:"$PYTHONHOME"/x64/lib/:"$PYTHONHOME"/lib:"$PYTHONHOME"/x64/lib

if [ "$glx_capable" = "" ]; then
    echo "Configuring GiD for Software Rendering"
    # export MESA_BACK_BUFFER=p
    export ADD_LD_LIBRARY_PATH="$BASEDIR"/lib/mesa1306:"$BASEDIR"/lib:$VTK_LIB_DIR:$OBJARRAY_LIB_DIR:"$TLS_LIB_DIR":"$PYTHON_LIB_DIR":"$TDBC_LIB_DIR"
else
    echo "Configuring GiD for GLX Rendering"
    export ADD_LD_LIBRARY_PATH="$BASEDIR"/lib:"$VTK_LIB_DIR":"$OBJARRAY_LIB_DIR":"$TLS_LIB_DIR":"$PYTHON_LIB_DIR":"$TDBC_LIB_DIR"
fi

export GIDDEFAULT="$BASEDIR"
export GIDDEFAULTTCL="$GIDDEFAULT"/scripts
export GIDEXE="$BASEDIR"
# export TCL_LIBRARY=$GIDDEFAULTTCL
# export TK_LIBRARY=$GIDDEFAULTTCL

# Check if we've the correct version of gcc/stdc++
glib_not_found=`ldd "$GIDEXE"/gid.exe 2>&1 | grep GLIBC|grep "not found"`
if [ "$glib_not_found" != "" ]; then
    export ADD_LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH":"$BASEDIR"/lib/gcc_libs
fi

# Check if we've the correct version of stdc++
current_stdc=`ldd "$GIDEXE"/gid.exe 2>/dev/null | grep -w -o " /.*stdc++.*6 "`
system=`uname -p`
if [ "$system" = "aarch64" ]; then
    # on arm aarch64 looks for version 3.4.29
    proper_gcc=`"$MY_STRINGS" $current_stdc | grep GLIBCXX_3.4.29`
else
    proper_gcc=`"$MY_STRINGS" $current_stdc | grep GLIBCXX_3.4.26`
fi
if [ -z "$proper_gcc" ]; then
    export ADD_LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH":"$BASEDIR"/lib/gcc_libs
fi

# Check if we've the correct version of nss for gdal.so
current_nss=`ldd "$GIDEXE"/scripts/gdal/gdal_64.so 2>/dev/null | grep -w -o " /.*nss3.so "`
proper_nss=`"$MY_STRINGS" $current_stdc |grep NSS_3.34`
if [ -z "$proper_nss" ]; then
    export ADD_LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH":"$BASEDIR"/lib/GDAL_DEPENDENCIES
fi

# Check if zstd is present ( needed by mesa, netcdf, gdal, ...)
zstd_present=`zstd --version 2> /dev/null`

if [ "$zstd_present" = "" ]; then
    # echo no zstd
    export ADD_LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH":"$BASEDIR"/lib/zstd
fi

# trick, sometimes, althoug OLD_LD_LIBRARY_PATH_DEFINED was not defined, bash handles it
# as defined but with empty value...
if [ -z $OLD_LD_LIBRARY_PATH_DEFINED ]; then
    export OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
    export OLD_LD_LIBRARY_PATH_DEFINED=1
fi
if [ "$LD_LIBRARY_PATH" != "" ]; then
    export LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH":"$LD_LIBRARY_PATH"
else
    export LD_LIBRARY_PATH="$ADD_LD_LIBRARY_PATH"
fi

vglrun "$GIDEXE"/gid.exe "$@"

