#!/bin/bash

#
# 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.
#

# Set up environment and run a test executable or script.
#
# Output nothing if test passes, show the output if it fails and
# leave output in <test>.log for examination.
#
# If qpidd.port exists run test with QPID_PORT=`cat qpidd.port`
#
# If $VALGRIND if is set run under valgrind. If there are valgrind
# erros show valgrind output, also leave it in <test>.valgrind for
# examination.
#

source `dirname $0`/vg_check

# Export variables from makefile.
export VALGRIND srcdir

# Export QPID_PORT if qpidd.port exists.
test -f qpidd.port && export QPID_PORT=`cat qpidd.port`

# Avoid silly libtool error messages if these are not defined
test -z "$LC_ALL" && export LC_ALL=
test -z "$LC_CTYPE" && export LC_CTYPE=
test -z "$LC_COLLATE" && export LC_COLLATE=
test -z "$LC_MESSAGES" && export LC_MESSAGES=

VG_LOG="$1.vglog"
rm -f $VG_LOG*

if grep -l "^# Generated by .*libtool" "$1" >/dev/null 2>&1; then
    # This is a libtool "executable". Valgrind it if VALGRIND specified.
    test -n "$VALGRIND" && VALGRIND="$VALGRIND --log-file=$VG_LOG --"
    # Hide output unless there's an error.
    libtool --mode=execute $VALGRIND "$@" 2>&1 || ERROR=$?
    test -n "$VALGRIND" && vg_check $VG_LOG*
else
    # This is a non-libtool shell script, just execute it.
    export VALGRIND srcdir
    exec "$@"
fi

if test -z "$ERROR"; then
    # Clean up logs if there was no error.
    rm -f $VG_LOG*
    exit 0
else
    exit $ERROR
fi
