runtest 3.87 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/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
22
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 24 25 26
#

usage()
{
27
    cat >&2 <<EOF
28

29
Usage: $0 [options] [input_file]
30

31 32
input_file:  the source code for the test program

33 34 35
Options:
    -q       quiet mode
    -v       verbose mode (can be specified multiple times)
36
    -i       interactive mode (runs even more tests)
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
    -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
52
while [ "$#" -gt 0 ]; do
53 54 55 56 57 58 59 60 61 62 63 64 65
    case "$1" in
    -h)
	usage
    ;;
    -p)
	shift; program="$1"
    ;;
    -q)
	WINETEST_DEBUG=0
    ;;
    -v)
	WINETEST_DEBUG=`expr $WINETEST_DEBUG + 1`
    ;;
66 67 68 69
    -i)
	WINETEST_INTERACTIVE=1
	export WINETEST_INTERACTIVE
    ;;
70 71 72 73 74 75 76 77 78 79 80 81
    -s)
	WINETEST_REPORT_SUCCESS=1
	export WINETEST_REPORT_SUCCESS
    ;;
    -P)
	shift; platform="$1"
    ;;
    -M)
	shift; modules="$1"
    ;;
    -T)
	shift; topobjdir="$1"
82 83
	if [ ! -d "$topobjdir" ]; then usage; fi
    ;;
84
    *)
85
	break
86 87 88 89 90 91
    ;;
    esac
    shift
done	    
	
if [ -z "$program" ]; then
92 93
    # try to autodetect the test program name based on the working directory
    working_path=`pwd`
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
    case $working_path in
        */dlls/*/tests)
          parent_path=`dirname "$working_path"`
          program=`basename "$parent_path"`_test.exe.so
          ;;
        */dlls/*)
          program=tests/`basename "$working_path"`_test.exe.so
          ;;
        */programs/*/tests)
          parent_path=`dirname "$working_path"`
          program=`basename "$parent_path"`.exe_test.exe.so
          ;;
        */programs/*)
          program=tests/`basename "$working_path"`.exe_test.exe.so
          ;;
    esac
110 111 112 113
fi
if [ ! -f "$program" ]; then
    echo "Can't find the test program, use the -p argument to specify one" 1>&2
    usage
114 115 116 117
fi

# check/detect topobjdir
if [ -n "$topobjdir" ]; then
118 119
    if [ ! -f "$topobjdir/server/wineserver" ]
    then
120
	echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 1>&2
121 122 123 124 125 126 127
	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="../../.."
128
    else
129
        echo "Can't find the top of the Wine tree (use the -T argument)" 1>&2
130
        usage
131 132 133 134 135
    fi
fi

# set environment variables needed for Wine

136 137 138
if [ -n "$modules" ]; then
    WINEDLLOVERRIDES="$WINEDLLOVERRIDES;$modules=b"
    export WINEDLLOVERRIDES
139 140 141 142
fi
WINETEST_PLATFORM=${platform:-wine}
export WINETEST_PLATFORM WINETEST_DEBUG

143 144 145 146 147 148
# WINETEST_WRAPPER is normally empty, but can be set by caller, e.g.
#  WINETEST_WRAPPER=time
# would give data about how long each test takes, and
#  WINETEST_WRAPPER=valgrind
# would run the tests under valgrind to look for memory errors.

149
exec $WINETEST_WRAPPER "$topobjdir/wine" "$program" "$@"