#! /bin/bash

if [ -z "$1" -o -z "$2" ] ; then
    echo Usage $0 java-exe build-dir
    exit 0
fi

#set -x 

javaexe="$1"
shift
bdir="$1"
shift

if [ ! -x "$javaexe" ] ; then
    echo java-exe "$javaexe" is not an executable
    exit 1
fi
if [ ! -d "$bdir" ] ; then
    echo build-dir "$bdir" is not a directory
    exit 1
fi

rm -f java-demo-run.log

bdirb=`basename "$bdir"`

#export LIBGL_DEBUG=verbose 
#export MESA_DEBUG=true 
#export LIBGL_ALWAYS_SOFTWARE=true
#export INTEL_DEBUG="buf bat"
#export INTEL_STRICT_CONFORMANCE=1 

#X_ARGS="-Xcheck:jni $X_ARGS"
X_ARGS="-Djava.awt.headless=true $X_ARGS"

#D_ARGS="-Djogl.debug.GLProfile -Djogl.debug.GLContext"
#D_ARGS="-Djogl.debug.GLProfile"
#D_ARGS="-Djogl.debug.DebugGL"
#D_ARGS="-Djogl.debug.TraceGL"
#D_ARGS="-Djogl.debug.DebugGL -Djogl.debug.TraceGL"
#D_ARGS="-Djogl.debug.DebugGL -Djogl.debug.TraceGL -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
#D_ARGS="-Djogl.debug.GLProfile -Djogl.debug.GLContext -Djogl.quirks.force=GL3CompatNonCompliant,NoSurfacelessCtx -Djogl.disable.opengles" 
#D_ARGS="-Djogl.quirks.force=NoDoubleBufferedPBuffer" 
#D_ARGS="-Dnativewindow.debug.GraphicsConfiguration"
#D_ARGS="-Djogamp.common.utils.locks.Lock.timeout=600000"

#D_ARGS="-Djogamp.debug=all"
#D_ARGS="-Dnativewindow.debug=all"
#D_ARGS="-Djogl.debug=all"
#D_ARGS="-Djogl.debug=all -Dnewt.debug=all -Djogl.debug.DebugGL"
#D_ARGS="-Dnewt.debug=all"
#D_ARGS="-Dnewt.debug.Display.PointerIcon -Dnewt.debug.Window.KeyEvent -Dnewt.disable.PointerIcon"
#D_ARGS="-Dnewt.debug.Display.PointerIcon -Dnewt.debug.Window.KeyEvent"

#D_ARGS="-Dnewt.disable.LinuxKeyEventTracker -Dnewt.disable.LinuxMouseTracker"
#D_ARGS="-Dnewt.disable.LinuxKeyEventTracker"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Dnewt.disable.LinuxKeyEventTracker -Dnewt.disable.LinuxMouseTracker"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Dnewt.disable.LinuxKeyEventTracker"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Dnewt.disable.LinuxMouseTracker"
#D_ARGS="-Djogl.debug=all -Dnewt.debug=all"
#D_ARGS="-Djogl.debug=all -Dnativewindow.debug=all"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Djogl.disable.opengldesktop"
#D_ARGS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all -Djogl.disable.opengldesktop -Djogl.quirks.force=NoSurfacelessCtx"

USE_CLASSPATH="../../gluegen/$bdirb/gluegen-rt.jar:../../joal/$bdirb/jar/joal.jar:../$bdirb/jar/jogl-all-noawt.jar:../$bdirb/jar/atomic/oculusvr.jar:../$bdirb/jar/jogl-demos-mobile.jar"
JAR_CLASSPATH="../../gluegen/$bdirb/gluegen-rt.jar ../../joal/$bdirb/jar/joal.jar ../$bdirb/jar/jogl-all-noawt.jar ../$bdirb/jar/atomic/oculusvr.jar ../$bdirb/jar/jogl-demos-mobile.jar"

function inflate0() {
    echo building temp_classpath
    rm -rf temp_classpath
    mkdir temp_classpath
    for i in $JAR_CLASSPATH ; do
        echo Inflating $i
        unzip -q -o $i -d temp_classpath
    done
    for i in ../../gluegen/$bdirb/*natives*.jar ../../joal/$bdirb/jar/*natives*.jar ../$bdirb/jar/*natives*.jar ; do
        echo Inflating $i
        unzip -q -o $i -d temp_classpath
    done
}


function jrun0() {
    which "$javaexe" 2>&1 | tee -a java-run.log
    "$javaexe" -version 2>&1 | tee -a java-run.log
    echo LD_LIBRARY_PATH $LD_LIBRARY_PATH 2>&1 | tee -a java-run.log
    echo LIBXCB_ALLOW_SLOPPY_LOCK: $LIBXCB_ALLOW_SLOPPY_LOCK 2>&1 | tee -a java-run.log
    echo LIBGL_DRIVERS_PATH: $LIBGL_DRIVERS_PATH 2>&1 | tee -a java-run.log
    echo LIBGL_DEBUG: $LIBGL_DEBUG 2>&1 | tee -a java-run.log
    echo LIBGL_ALWAYS_INDIRECT: $LIBGL_ALWAYS_INDIRECT 2>&1 | tee -a java-run.log
    echo LIBGL_ALWAYS_SOFTWARE: $LIBGL_ALWAYS_SOFTWARE 2>&1 | tee -a java-run.log
    echo SWT_CLASSPATH: $SWT_CLASSPATH 2>&1 | tee -a java-run.log
    echo MacOsX $MOSX 2>&1 | tee -a java-run.log
    echo DISPLAY $DISPLAY 2>&1 | tee -a java-run.log
    echo WAYLAND_DISPLAY $WAYLAND_DISPLAY 2>&1 | tee -a java-run.log

    if [ -z "$JAR_CLASSPATH" ] ; then
        echo "$javaexe" $javaxargs $X_ARGS -cp $USE_CLASSPATH $D_ARGS $C_ARG $*
        #gdb --args "$javaexe" $javaxargs $X_ARGS -cp $USE_CLASSPATH $D_ARGS $C_ARG $*
        "$javaexe" $X_ARGS -cp $USE_CLASSPATH $D_ARGS $C_ARG $*
    else
        echo "$javaexe" $javaxargs $X_ARGS -cp temp_classpath $D_ARGS $C_ARG $*
        "$javaexe" $X_ARGS -cp temp_classpath $D_ARGS $C_ARG $*
    fi
}

function jrun() {
    if [ ! -z "$JAR_CLASSPATH" ] ; then
        inflate0 2>&1 | tee -a java-demo-run.log
        nlibdir=`find temp_classpath  -name libgluegen_rt.so -exec dirname \{\} \;`
        echo Native Libraries in $nlibdir 2>&1 | tee -a java-demo-run.log
        export LD_LIBRARY_PATH=$nlibdir
        export DYLD_LIBRARY_PATH=$nlibdir
    fi
    jrun0 $* 2>&1 | tee -a java-demo-run.log
}

jrun com.jogamp.opengl.demos.Launcher0 $*