#!/bin/sh
#
# Wrapper script to run tests from inside the Wine tree
#
# Usage: runtest [options] input_file
#
# Copyright 2002 Alexandre Julliard
# Copyright 2002 Dimitrie O. Paun
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#

usage()
{
    cat >&2 <<EOF

Usage: $0 [options] input_file

input_file:  the source code for the test program

Options:
    -q       quiet mode
    -v       verbose mode (can be specified multiple times)
    -s       announce successful tests
    -p prog  name of the program to run for C tests
    -P name  set the current platform name
    -M names set the module names to be tested
    -T dir   set Wine tree top directory (autodetected if not specified)

EOF
    exit 1
}

# Default values
platform=$WINETEST_PLATFORM
WINETEST_DEBUG=${WINETEST_DEBUG:-1}

# parse command-line options
while [ "$#" != 0 ]; do
    case "$1" in
    -h)
	usage
    ;;
    -p)
	shift; program="$1"
    ;;
    -q)
	WINETEST_DEBUG=0
    ;;
    -v)
	WINETEST_DEBUG=`expr $WINETEST_DEBUG + 1`
    ;;
    -s)
	WINETEST_REPORT_SUCCESS=1
	export WINETEST_REPORT_SUCCESS
    ;;
    -P)
	shift; platform="$1"
    ;;
    -M)
	shift; modules="$1"
    ;;
    -T)
	shift; topobjdir="$1"
	if [ ! -d "$topobjdir" ]; then usage; fi
    ;;
    --)
	break
    ;;
    *)
	infile="$1"
    ;;
    esac
    shift
done	    
	
# we must have found an input file
if [ ! -f "$infile" ]; then usage; fi

# set program to the .c file base name if not specified otherwise
if [ -z "$program" ]; then
    program=`basename "$infile" .c`
fi

# check/detect topobjdir
if [ -n "$topobjdir" ]; then
    if [ ! -f "$topobjdir/server/wineserver" ]
    then
	echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 2>&1
	usage
    fi
else
    if [ -f "./server/wineserver" ]; then topobjdir="."
    elif [ -f "../server/wineserver" ]; then topobjdir=".."
    elif [ -f "../../server/wineserver" ]; then topobjdir="../.."
    elif [ -f "../../../server/wineserver" ]; then topobjdir="../../.."
    fi
fi

# set environment variables needed for Wine

if [ -n "$modules" ]; then
    WINEDLLOVERRIDES="$WINEDLLOVERRIDES;$modules=b"
    export WINEDLLOVERRIDES
fi
WINETEST_PLATFORM=${platform:-wine}
export WINETEST_PLATFORM WINETEST_DEBUG

exec "$topobjdir/wine" "$program" "$infile" "$@"