| #!/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) |
| -i interactive mode (runs even more tests) |
| -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 [ "$#" -gt 0 ]; do |
| case "$1" in |
| -h) |
| usage |
| ;; |
| -p) |
| shift; program="$1" |
| ;; |
| -q) |
| WINETEST_DEBUG=0 |
| ;; |
| -v) |
| WINETEST_DEBUG=`expr $WINETEST_DEBUG + 1` |
| ;; |
| -i) |
| WINETEST_INTERACTIVE=1 |
| export WINETEST_INTERACTIVE |
| ;; |
| -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 |
| ;; |
| esac |
| shift |
| done |
| |
| if [ -z "$program" ]; then |
| # try to autodetect the test program name based on the working directory |
| working_path=`pwd` |
| 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 |
| fi |
| if [ ! -f "$program" ]; then |
| echo "Can't find the test program, use the -p argument to specify one" 1>&2 |
| usage |
| fi |
| |
| # check/detect topobjdir |
| if [ -n "$topobjdir" ]; then |
| if [ ! -f "$topobjdir/server/wineserver" ] |
| then |
| echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 1>&2 |
| 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="../../.." |
| else |
| echo "Can't find the top of the Wine tree (use the -T argument)" 1>&2 |
| usage |
| 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 |
| |
| # 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. |
| |
| exec $WINETEST_WRAPPER "$topobjdir/wine" "$program" "$@" |