#!/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" "$@"