#!/bin/bash

# qftest license server start script

#----------------------------------------------------------------------
# Parse arguments and split them into
# - args for this script: -dbg and -java
# - args for java: everything starting with -J
# - qftest license server args: the rest
#----------------------------------------------------------------------
jexe=java
jargs=
qfargs=
mainclass=QFTestRunner
classpath=$CLASSPATH

# test for admin mode before actually parsing arguments
for arg in "$@"; do
    if [ "$arg" == "-admin" -o "$arg" == "-licenseserver.admin" ]; then
	admin=1
	mainclass=QFTest
	break
    fi
done

while [ $# -gt 0 ]; do
    case $1 in
	-dbg)
	    QFTEST_DEBUG=1; export QFTEST_DEBUG
	    ;;
	-batch)
	    ;;
	-java)
	    if [ $# -eq 1 ]; then
		echo Need argument for $1 >&2
		exit 254
	    fi
	    shift
	    jexe=$1
	    skipjexe=1
	    ;;
	-J-cp | -J-classpath)
	    if [ $# -eq 1 ]; then
		echo Need argument for $1 >&2
		exit 254
	    fi
	    shift
	    classpath=$1
	    ;;
	-J-Duser.language=*)
	    nolang=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    ;;
	-J-Dqftest.home=*)
	    noqftesthome=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    shift
	    ;;
	-J-Dqftest.versionhome=*)
	    noqftestversionhome=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    shift
	    ;;
	-J-Dqftest.java=*)
	    noqftestjava=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    shift
	    ;;
	-J-Dqftest.editor=*)
	    noeditor=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    shift
	    ;;
	-J-mx*|-J-Xmx*)
	    noxmem=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    ;;
	-J-ms*|-J-Xms*)
	    nosmem=1
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    ;;
	-J*)
	    arg=`expr "$1" : '-J\(.*\)'`
	    jargs="$jargs '$arg'"
	    ;;
	-options | -options=*)
	    noopts=1
	    qfargs="$qfargs '$1'"
	    ;;
	-logfile | -logfile=*)
	    nolog=1
	    qfargs="$qfargs '$1'"
	    ;;
	-*)
	    prefix=-
	    case $1 in
		-dump | -dumppeak | -dumptotal | -host | -password | -setpwd | -shutdown)
		    nolicenseserver=1
		    prefix=-licenseserver.
		    ;;
		-logfile | -setpwd | -verbose)
		    prefix=-licenseserver.
		    ;;
		-licenseserver | \
		    -licenseserver.dump | \
		    -licenseserver.dumppeak | \
		    -licenseserver.dumptotal | \
		    -licenseserver.host | \
		    -licenseserver.shutdown)
		    nolicenseserver=1
		    ;;
	    esac
	    qfargs="$qfargs '$prefix${1:1}'"
	    ;;
	*)
	    qfargs="$qfargs '$1'"
	    ;;
    esac
    shift
done

if [ -n "$QFTEST_DEBUG" ]; then
    echo --------------------------------------------------
    echo This is the QF-Test License Server
    echo Java executable: $jexe
    echo Java arguments: $jargs
    echo qftest arguments: $qfargs
fi

#----------------------------------------------------------------------
# Locate this shell skript
#----------------------------------------------------------------------
binary=$0
if [ -n "$QFTEST_DEBUG" ]; then
    echo binary: $binary
fi

while [ -L "$binary" ]; do
    link=`ls -ld "$binary"`
    link=`expr "$link" : '.*-> \(.*\)$'`
    if [ -n "$QFTEST_DEBUG" ]; then
        echo following link: $link
    fi
    case $link in
    /*)
	binary=$link
	;;
    *)
	binary=`dirname "$binary"`/$link
	;;
    esac
done

bindir=`dirname "$binary"`
bindir=`cd "$bindir"; pwd`
basedir=`dirname "$bindir"`
topdir=`dirname "$basedir"`
logdir=$topdir/log
if [ -n "$QFTEST_DEBUG" ]; then
    echo bindir: $bindir
    echo basedir: $basedir
    echo topdir: $topdir
    echo logdir: $logdir
fi

if [ -z "$QFTEST_BIN" ]; then
    QFTEST_BIN=$bindir; export QFTEST_BIN
fi

#----------------------------------------------------------------------
# Possibly load launcher.cfg
#----------------------------------------------------------------------
javamem=512
if [ -f "$topdir/launcher.cfg" ]; then
    usemyjre=
    myjre=
    java=
    jdk=
    lang=
    . "$topdir/launcher.cfg"
fi
if [ -z "$skipjexe" ]; then
    if [ "$usemyjre" != no ]; then
	# Look for own JRE
	uname -a | grep -q Linux
	if [ $? ]; then
	    uname -a | grep -q x86_64
	    if [ $? ]; then
		if [ -d "$basedir/jre/linux-64" ]; then
		    myjre="$basedir/jre/linux-64"
		elif [ -d "$basedir/jre/linux" ]; then
		    myjre="$basedir/jre/linux"
		fi
	    elif [ -d "$basedir/jre/linux" ]; then
		myjre="$basedir/jre/linux"
	    fi
	    # echo myjre: $myjre
	fi
        if [ "$(uname)" = "Darwin" ]; then
          if [ -d "$basedir/../../Plugins/jdk*.jdk/Contents/Home/jre" ]; then
              myjre="$basedir/../../Plugins/jdk*.jdk/Contents/Home/jre"
          fi
        fi
	if [ -n "$myjre" ]; then
	    jexe="$myjre/bin/java"
	    if [ -n "$QFTEST_DEBUG" ]; then
		echo "Using my own java: $jexe"
	    fi
	fi
    fi
    if [ -z "$myjre" ]; then
	if [ -n "$java" ]; then
	    jexe=$java
	fi
	if [ -n "$QFTEST_DEBUG" ]; then
	    echo "Using configured java: $jexe"
	fi
    fi
fi
if [ -z "$nolang" -a -n "$lang" ]; then
    jargs="$jargs '-Duser.language=$lang'"
    if [ -n "$QFTEST_DEBUG" ]; then
	echo "Using language: $lang"
    fi
fi
if [ -n "$QFTEST_DEBUG" ]; then
    echo javamem: $javamem
fi

#----------------------------------------------------------------------
# Setup PATH and CLASSPATH
# use -classpath for the qftest server jars
#----------------------------------------------------------------------
CPTMP=$CLASSPATH
CLASSPATH=$classpath
client=0
. "$bindir/fixcp"
classpath="-classpath '$CLASSPATH'"
CLASSPATH=$CPTMP

if [ -n "$javaopt" ]; then
    jargs="$jargs $javaopt"
fi

# if [ `basename "$jexe"` != "$jexe" ]; then
    # # Put the directory of the java executable on the PATH
    # dir=`dirname "$jexe"`
    # dir=`cd "$dir"; pwd`
    # PATH="$dir:$PATH"
    # # make java executable absolute
    # jbase=`basename "$jexe"`
    # jexe="$dir/$jbase"
# fi

# PATH="$bindir:$PATH"

# export PATH

#----------------------------------------------------------------------
# Test whether logging is enabled
#----------------------------------------------------------------------
if [ -d "$logdir" ]; then
    if [ -z "$nolog" ]; then
	qfargs="'-logfile=$logdir/qftest.log' $qfargs"
    fi
    if [ -n "$QFTEST_DEBUG" ]; then
	echo Logging internal output to $logdir/qftest.log
    fi
fi

if [ -z "$noopts" ]; then
    if [ -f "$topdir/qftest.options" ]; then
	qfargs="'-options=$topdir/qftest.options' $qfargs"
    else
	qfargs="'-options=$bindir/qftest.options' $qfargs"
    fi
fi

#----------------------------------------------------------------------
# Add qftest.home and qftest.home definitions
#----------------------------------------------------------------------
if [ -z "$noqftesthome" ]; then
    jargs="$jargs -Dqftest.home='$topdir'"
fi
if [ -z "$noqftestversionhome" ]; then
    jargs="$jargs -Dqftest.versionhome='$basedir'"
fi
if [ -n "$skipjexe" -a -z "$noqftestjava" ]; then
    jargs="$jargs -Dqftest.java='$jexe'"
fi

#----------------------------------------------------------------------
# Add Mac specific options
#----------------------------------------------------------------------
if [ "$(uname)" = "Darwin" ]; then
    jargs="$jargs -Xdock:name=QF-Test -Xdock:icon=$basedir/misc/qfs.icns"
fi

#----------------------------------------------------------------------
# Make sure there's enough memory
#----------------------------------------------------------------------
if [ -z "$noxmem" ]; then
    jargs="$jargs -Xmx${javamem}m"
fi

#----------------------------------------------------------------------
# Auto-add -licenseserver if necessary
#----------------------------------------------------------------------
if [ -z "$admin" -a -z "$nolicenseserver" ]; then
	qfargs="'-licenseserver' $qfargs"
fi

#----------------------------------------------------------------------
# That's it
#----------------------------------------------------------------------
if [ -n "$QFTEST_DEBUG" ]; then
    echo executing "'$jexe'" $jargs $classpath \
	de.qfs.apps.qftest.start.$mainclass $qfargs
    echo --------------------------------------------------
fi
eval exec "'$jexe'" $jargs $classpath \
    de.qfs.apps.qftest.start.$mainclass $qfargs
