#!/bin/bash

ECHO="true"                        # should we echo the our command to stdout?
CHARJCHOME=${0%${0##*/}}            # location of charjc
ANTLRHOME=$CHARJCHOME/../lib        # location of antlr jars
ANTLR_VERSION="3.1"
ANTLR_CLASSPATH=""

if test "$ANTLR_VERSION" = "3.0"
then
    ANTLRJAR=$ANTLRHOME/antlr-3.0.1.jar
    ANTLR27JAR=$ANTLRHOME/antlr-2.7.7.jar
    ANTLR_RTJAR=$ANTLRHOME/antlr-runtime-3.0.1.jar
    STJAR=$ANTLRHOME/stringtemplate-3.1b1.jar
    ANTLR_CLASSPATH=$ANTLRJAR:$STJAR:$ANTLR_RTJAR:$ANTLR27JAR
fi

if test "$ANTLR_VERSION" = "3.1"
then
    ANTLRJAR=$ANTLRHOME/antlr-3.1b1.jar
    ANTLR27JAR=$ANTLRHOME/antlr-2.7.7.jar
    ANTLR_RTJAR=$ANTLRHOME/antlr-runtime-3.1b1.jar
    STJAR=$ANTLRHOME/stringtemplate-3.1.jar
    ANTLR_CLASSPATH=$ANTLRJAR:$STJAR:$ANTLR_RTJAR:$ANTLR27JAR
fi

JSAP_JAR=$CHARJCHOME/../lib/JSAP-2.1.jar
CHARJ_JAR=$CHARJCHOME/../build/lib/charj.jar
CHARJ_JFLAGS="-classpath $CLASSPATH:$ANTLR_CLASSPATH:$JSAP_JAR:$CHARJ_JAR"

# flag processing
# We need to aggregate all charmc options into one quoted string, while leaving
# the charjc options alone.
VERBOSE=false
CHARMC=$CHARJCHOME../../../../bin/charmc
STDLIB=$CHARJCHOME../src
CHARMC_ARGS=
FILES=
ARGS=
processArgs() {
    while [ ! $# -eq 0 ]
    do
        arg="$1"
        shift

        case "$arg" in
        "-v"|"--verbose")
            VERBOSE=true
            ARGS="$ARGS $arg"
            ;;
        "--AST")
            ARGS="$ARGS $arg"
            ;;
        "--debug")
            ARGS="$ARGS $arg"
            ;;
        "--stdout")
            ARGS="$ARGS $arg"
            ;;
        "--stdlib")
            STDLIB="$1"
            shift
            ;;
        "--lib")
            ARGS="$ARGS $arg $1"
            shift
            ;;
        "--charmc")
            CHARMC="$1"
            shift
            ;;
        *.cj)
            FILES="$FILES $arg"
            ;;
        --*|-*)
            # unrecognized options are passed through to charmc
            CHARMC_ARGS="$CHARMC_ARGS $arg"
            ;;
        esac
    done
    CHARMC="$CHARMC $CHARMC_ARGS"
}

processArgs "$@"
if test "$ECHO" = "true"
then
    echo "java $CHARJ_JFLAGS charj.Main --charmc \"$CHARMC\" \
    --stdlib $STDLIB $ARGS $FILES"
fi
java $CHARJ_JFLAGS charj.Main --charmc "$CHARMC" --stdlib $STDLIB $ARGS $FILES
