#!/bin/sh
#
# Wrapper for viewing/setting options that the plugin's CMake
# scripts will recognize.
#
# Don't edit this. Edit configure.plugin to add plugin-specific options.
#

set -e
command="$0 $*"

if [ -e `dirname $0`/configure.plugin ]; then
    # Include custom additions.
    . `dirname $0`/configure.plugin
fi

# Check for `cmake` command.
type cmake > /dev/null 2>&1 || {
    echo "\
This package requires CMake, please install it first, then you may
use this configure script to access CMake equivalent functionality.\
" >&2;
    exit 1;
}

usage() {

cat 1>&2 <<EOF
Usage: $0 [OPTIONS]

  Plugin Options:
    --bro-dist=DIR             Path to Bro source tree
    --install-root=DIR         Path where to install plugin into
    --with-binpac=DIR          Path to BinPAC installation root
    --with-broker=DIR          Path to Broker installation root
    --with-caf=DIR             Path to CAF installation root
    --with-bifcl=PATH          Path to bifcl executable
    --enable-debug             Compile in debugging mode
EOF

if type plugin_usage >/dev/null 2>&1; then
    plugin_usage 1>&2
fi

echo

exit 1
}

# Function to append a CMake cache entry definition to the
# CMakeCacheEntries variable
#   $1 is the cache entry variable name
#   $2 is the cache entry variable type
#   $3 is the cache entry variable value
append_cache_entry () {
    CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3"
}

# set defaults
builddir=build
brodist=""
installroot="default"
CMakeCacheEntries=""

while [ $# -ne 0 ]; do
    case "$1" in
        -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
        *) optarg= ;;
    esac

    case "$1" in
        --help|-h)
            usage
            ;;

        --bro-dist=*)
            brodist=`cd $optarg && pwd`
            ;;

        --install-root=*)
            installroot=$optarg
            ;;

        --with-binpac=*)
            append_cache_entry BinPAC_ROOT_DIR PATH $optarg
            binpac_root=$optarg
            ;;

        --with-broker=*)
            append_cache_entry BROKER_ROOT_DIR PATH $optarg
            broker_root=$optarg
            ;;

        --with-caf=*)
            append_cache_entry CAF_ROOT_DIR PATH $optarg
            caf_root=$optarg
            ;;

        --with-bifcl=*)
            append_cache_entry BifCl_EXE PATH $optarg
            ;;

        --enable-debug)
            append_cache_entry BRO_PLUGIN_ENABLE_DEBUG         BOOL   true
            ;;

        *)
            if type plugin_option >/dev/null 2>&1; then
                plugin_option $1 && shift && continue;
            fi

            echo "Invalid option '$1'.  Try $0 --help to see available options."
            exit 1
            ;;
    esac
    shift
done

if [ -z "$brodist" ]; then
    if type bro-config >/dev/null 2>&1; then
        if bro-config --cmake_dir >/dev/null 2>&1; then
            # Have a newer version of bro-config that has needed flags
            append_cache_entry BRO_CONFIG_PREFIX PATH `bro-config --prefix`
            append_cache_entry BRO_CONFIG_INCLUDE_DIR PATH `bro-config --include_dir`
            append_cache_entry BRO_CONFIG_PLUGIN_DIR PATH `bro-config --plugin_dir`
            append_cache_entry BRO_CONFIG_CMAKE_DIR PATH `bro-config --cmake_dir`
            append_cache_entry CMAKE_MODULE_PATH PATH `bro-config --cmake_dir`

            build_type=`bro-config --build_type`

            if [ "$build_type" = "debug" ]; then
                append_cache_entry BRO_PLUGIN_ENABLE_DEBUG BOOL true
            fi

            if [ -z "$binpac_root" ]; then
                append_cache_entry BinPAC_ROOT_DIR PATH `bro-config --binpac_root`
            fi

            if [ -z "$broker_root" ]; then
                append_cache_entry BROKER_ROOT_DIR PATH `bro-config --broker_root`
            fi

            if [ -z "$caf_root" ]; then
                append_cache_entry CAF_ROOT_DIR PATH `bro-config --caf_root`
            fi
        else
            brodist=`bro-config --bro_dist 2> /dev/null`

            if [ ! -e "$brodist/bro-path-dev.in" ]; then
                echo "$brodist does not appear to be a valid Bro source tree."
                exit 1
            fi

            append_cache_entry BRO_DIST PATH $brodist
            append_cache_entry CMAKE_MODULE_PATH PATH $brodist/cmake
        fi
    else
        echo "Either 'bro-config' must be in PATH or '--bro-dist=<path>' used"
        exit 1
    fi
else
    if [ ! -e "$brodist/bro-path-dev.in" ]; then
      echo "$brodist does not appear to be a valid Bro source tree."
      exit 1
    fi

    append_cache_entry BRO_DIST PATH $brodist
    append_cache_entry CMAKE_MODULE_PATH PATH $brodist/cmake
fi

if [ "$installroot" != "default" ]; then
    mkdir -p $installroot
    append_cache_entry BRO_PLUGIN_INSTALL_ROOT PATH $installroot
fi

echo "Build Directory        : $builddir"
echo "Bro Source Directory   : $brodist"

mkdir -p $builddir
cd $builddir

cmake $CMakeCacheEntries ..

echo "# This is the command used to configure this build" > config.status
echo $command >> config.status
chmod u+x config.status
