#!/bin/sh

binpac_root="@ZEEK_CONFIG_BINPAC_ROOT_DIR@"
broker_root="@ZEEK_CONFIG_BROKER_ROOT_DIR@"
btest_tools_dir="@ZEEK_CONFIG_BTEST_TOOLS_DIR@"
build_type="@CMAKE_BUILD_TYPE_LOWER@"
cmake_dir="@ZEEK_CMAKE_CONFIG_DIR@"
config_dir="@ZEEK_ETC_INSTALL_DIR@"
have_af_packet="@ZEEK_HAVE_AF_PACKET@"
have_geoip="@USE_GEOIP@"
have_javascript="@ZEEK_HAVE_JAVASCRIPT@"
have_spicy="@USE_SPICY_ANALYZERS@"
include_dir="@CMAKE_INSTALL_PREFIX@/include"
lib_dir="@CMAKE_INSTALL_FULL_LIBDIR@"
plugin_dir="@ZEEK_PLUGIN_DIR@"
prefix="@CMAKE_INSTALL_PREFIX@"
python_dir="@PY_MOD_INSTALL_DIR@"
script_dir="@ZEEK_SCRIPT_INSTALL_PATH@"
site_dir="@ZEEK_SCRIPT_INSTALL_PATH@/site"
version="@ZEEK_VERSION_FULL_LOCAL@"
zeek_dist="@ZEEK_DIST@"
zeekpath="@DEFAULT_ZEEKPATH@"

report_feature() {
    # $1: cmake feature flag value
    input=$(echo "$1" | tr '[:lower:]' '[:upper:]')
    if [ "$input" = "1" ] || [ "$input" = "ON" ] || [ "$input" = "YES" ] || [ "$input" = "TRUE" ] || [ "$input" = "Y" ]; then
        echo "yes"
        exit 0
    fi

    echo "no"
    exit 1
}

add_path() {
    # $1: existing path
    # $2: path to add
    if test -z "$2" || test "$1" = "$2" ||
        echo "$1" | grep -q "^$2:" 2>/dev/null ||
        echo "$1" | grep -q ":$2:" 2>/dev/null ||
        echo "$1" | grep -q ":$2$" 2>/dev/null; then
        echo "$1"
        return
    fi

    echo "$1:$2"
}

# When changing any of these, also update "src/spicy/spicyz/config.h.in".
include_dir=$(add_path "$include_dir" "@ZEEK_CONFIG_PCAP_INCLUDE_DIR@")
include_dir=$(add_path "$include_dir" "@ZEEK_CONFIG_ZLIB_INCLUDE_DIR@")
include_dir=$(add_path "$include_dir" "@ZEEK_CONFIG_OPENSSL_INCLUDE_DIR@")
include_dir=$(add_path "$include_dir" "@ZEEK_CONFIG_LibKrb5_INCLUDE_DIR@")
include_dir=$(add_path "$include_dir" "@ZEEK_CONFIG_GooglePerftools_INCLUDE_DIR@")

usage() {
    echo "Usage: zeek-config [OPTIONS]

Basic options:

  --build_type          Zeek build type as per cmake, lower case (e.g. 'relwithdebinfo')
  --prefix              Toplevel Zeek distribution installation directory
  --version             Zeek version number
  --zeek_dist           Toplevel directory of source tree the distribution built from
  --zeekpath            ZEEKPATH environment variable paths for this distribution

Specific directories in the Zeek distribution:

  --btest_tools_dir     Zeek-related BTest tooling
  --cmake_dir           Zeek's cmake modules
  --config_dir          Configuration files for cluster topology, zkg, etc
  --include_dir         C/C++ header folders for Zeek and related components, colon-separated
  --lib_dir             Toplevel folder for shared libraries, Python packages, etc
  --plugin_dir          Native-code Zeek plugins
  --python_dir          Python packages (Broker, ZeekControl, zkg, etc)
  --script_dir          Toplevel folder for Zeek scripts
  --site_dir            Site-specific Zeek scripts

Toplevel installation directories for third-party components:

  --binpac_root         BinPAC compiler
  --broker_root         Broker communication framework

Feature tests (prints 'yes' if supported; exit code reflects result):

  --have-af-packet        Native AF_PACKET support
  --have-geoip            IP address geolocation & AS lookups
  --have-javascript       JavaScript support
  --have-spicy-analyzers  built-in Spicy analyzers
"
}

if [ $# -eq 0 ]; then
    usage 1>&2
    exit 1
fi

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

    case $1 in
        --binpac_root)
            echo $binpac_root
            ;;
        --bro_dist) # For compatibility with legacy Bro plugins.
            echo $zeek_dist
            ;;
        --broker_root)
            echo $broker_root
            ;;
        --bropath) # For compatibility with legacy Bro plugins.
            echo $zeekpath
            ;;
        --btest_tools_dir)
            echo $btest_tools_dir
            ;;
        --build_type)
            echo $build_type
            ;;
        --cmake_dir)
            echo $cmake_dir
            ;;
        --config_dir)
            echo $config_dir
            ;;
        --have-af-packet)
            report_feature "$have_af_packet"
            ;;
        --have-geoip)
            report_feature "$have_geoip"
            ;;
        --have-javascript)
            report_feature "$have_javascript"
            ;;
        --have-spicy-analyzers)
            report_feature "$have_spicy"
            ;;
        --include_dir)
            echo $include_dir
            ;;
        --lib_dir)
            echo $lib_dir
            ;;
        --plugin_dir)
            echo $plugin_dir
            ;;
        --prefix)
            echo $prefix
            ;;
        --python_dir)
            echo $python_dir
            ;;
        --script_dir)
            echo $script_dir
            ;;
        --site_dir)
            echo $site_dir
            ;;
        --version)
            echo $version
            ;;
        --zeek_dist)
            echo $zeek_dist
            ;;
        --zeekpath)
            echo $zeekpath
            ;;
        *)
            usage 1>&2
            exit 1
            ;;
    esac
    shift
done

exit 0
