widl: Add printf format attribute on all printf-like functions and fix resulting...
[wine] / tools / runtest
index 43f513f..ad8ef72 100755 (executable)
@@ -26,7 +26,7 @@ usage()
 {
     cat >&2 <<EOF
 
-Usage: $0 [options] input_file
+Usage: $0 [options] [input_file]
 
 input_file:  the source code for the test program
 
@@ -48,7 +48,7 @@ platform=$WINETEST_PLATFORM
 WINETEST_DEBUG=${WINETEST_DEBUG:-1}
 
 # parse command-line options
-while [ "$#" != 0 ]; do
+while [ "$#" -gt 0 ]; do
     case "$1" in
     -h)
        usage
@@ -76,29 +76,35 @@ while [ "$#" != 0 ]; do
        shift; topobjdir="$1"
        if [ ! -d "$topobjdir" ]; then usage; fi
     ;;
-    --)
-       break
-    ;;
     *)
-       infile="$1"
+       break
     ;;
     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`
+    # try to autodetect the test program name based on the working directory
+    working_path=`pwd`
+    working_basename=`basename "$working_path"`
+    if [ "$working_basename" = "tests" ]; then
+        parent_path=`dirname "$working_path"`
+        parent_basename=`basename "$parent_path"`
+        program="${parent_basename}_test.exe.so"
+    elif [ -d "tests" ]; then
+        program="tests/${working_basename}_test.exe.so"
+    fi
+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" 2>&1
+       echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 1>&2
        usage
     fi
 else
@@ -106,6 +112,9 @@ else
     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
 
@@ -118,4 +127,10 @@ fi
 WINETEST_PLATFORM=${platform:-wine}
 export WINETEST_PLATFORM WINETEST_DEBUG
 
-exec "$topobjdir/wine" "$program" "$infile" "$@"
+# 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" "$@"