#! /bin/sh
#
#  Licensed to the Apache Software Foundation (ASF) under one or more
#  contributor license agreements.  See the NOTICE file distributed with
#  this work for additional information regarding copyright ownership.
#  The ASF licenses this file to You under the Apache License, Version 2.0
#  (the "License"); you may not use this file except in compliance with
#  the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
# BTest helper for getting values for Bro-related environment variables.

base=`dirname $0`
bro=`cat ${base}/../../build/CMakeCache.txt | grep BRO_DIST | cut -d = -f 2`

if [ "$1" = "brobase" ]; then
    echo ${bro}
elif [ "$1" = "bropath" ]; then
    ${bro}/build/bro-path-dev
elif [ "$1" = "bro_plugin_path" ]; then
    ( cd ${base}/../.. && pwd )
elif [ "$1" = "bro_seed_file" ]; then
    echo ${bro}/testing/btest/random.seed
elif [ "$1" = "path" ]; then
    echo ${bro}/build/src:${bro}/aux/btest:${base}/:${bro}/aux/bro-cut:$PATH
else
    echo "usage: `basename $0` <var>" >&2
    exit 1
fi
