Rewrite make_ctests and runtest in shell.

This commit is contained in:
Dimitrie O. Paun 2002-11-11 20:25:54 +00:00 committed by Alexandre Julliard
parent 69f74dbf0e
commit e39e8a172b
4 changed files with 179 additions and 6 deletions

View File

@ -64,7 +64,7 @@ ALLLINTFLAGS = $(LINTFLAGS) $(DEFS) $(OPTIONS) $(DIVINCL)
MKINSTALLDIRS= $(TOPSRCDIR)/tools/mkinstalldirs
WINAPI_CHECK = $(TOPSRCDIR)/tools/winapi_check/winapi_check
WINEWRAPPER = $(TOPSRCDIR)/tools/winewrapper
RUNTEST = $(TOPSRCDIR)/programs/winetest/runtest
RUNTEST = $(TOPSRCDIR)/tools/runtest
WINEBUILD = $(TOOLSDIR)/tools/winebuild/winebuild
MAKEDEP = $(TOOLSDIR)/tools/makedep
WRC = $(TOOLSDIR)/tools/wrc/wrc
@ -105,7 +105,7 @@ LINTS = $(C_SRCS:.c=.ln)
# Implicit rules
.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .pl .ok .cross.o
.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .ok .cross.o
.c.o:
$(CC) -c $(ALLCFLAGS) -o $@ $<
@ -137,9 +137,6 @@ LINTS = $(C_SRCS:.c=.ln)
.c.ok:
$(RUNTEST) $(RUNTESTFLAGS) $< && touch $@
.pl.ok:
$(RUNTEST) $(RUNTESTFLAGS) $< && touch $@
# 'all' target first in case the enclosing Makefile didn't define any target
all: Makefile

View File

@ -45,7 +45,7 @@ $(MODULE): $(OBJS) $(RCOBJS) Makefile.in
# Rules for building test list
$(TESTLIST): Makefile.in
$(TOPSRCDIR)/programs/winetest/make_ctests $(CTESTS) >$(TESTLIST) || $(RM) $(TESTLIST)
$(TOPSRCDIR)/tools/make_ctests $(CTESTS) >$(TESTLIST) || $(RM) $(TESTLIST)
# Rules for checking that no imports are missing

60
tools/make_ctests Executable file
View File

@ -0,0 +1,60 @@
#!/bin/sh
#
# Script to generate a C file containing a list of tests
#
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
cat <<EOF
/* Automatically generated file; DO NOT EDIT!! */
#include <stdio.h>
#include <stdlib.h>
#include "winbase.h"
EOF
for file in "$@"; do
test=`basename "$file" .c`
echo "extern void func_$test(void);"
done
cat <<EOF
struct test
{
const char *name;
void (*func)(void);
};
static const struct test winetest_testlist[] =
{
EOF
for file in "$@"; do
test=`basename "$file" .c`
echo " { \"$test\", func_$test },"
done
cat <<EOF
{ 0, 0 }
};
#define WINETEST_WANT_MAIN
#include "wine/test.h"
EOF

116
tools/runtest Executable file
View File

@ -0,0 +1,116 @@
#!/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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
usage()
{
cat >2 <<EOF
Usage: $0 [options] input_file
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 :; else usage; fi
;;
*)
infile="$1"
esac
shift
done
# we must have found an input file
if [ -f "$infile" ]; then :; else 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 :
else
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
WINEOPTIONS="$WINEOPTIONS --dll $modules=b"
export WINEOPTIONS
fi
WINETEST_PLATFORM=${platform:-wine}
export WINETEST_PLATFORM WINETEST_DEBUG
exec "$topobjdir/wine" "$program" "$infile" "$@"