new old winetests

Dimitrie O. Paun dpaun at rogers.com
Sat Nov 22 02:51:08 CST 2003


On November 21, 2003 12:16 pm, Ferenc Wagner wrote:
> I would be grateful for a review.

OK,

One more time, this round with a patch incorporating
most of my suggestions. What it does:
   -- better integration in the build system
   -- supports out of tree builds
   -- cleans up file when winetests fails
   -- more uniform naming convention in the Makefile
   -- tested on Linux, it builds just fine
   -- cross compilation not tested at this point
   -- fix indentation and a few cosmetic things in main.c
   -- indent util.c to 4-space indent
   -- send.c not indented, I'll let you deal with it :)
   -- supplies an automatic build label for unattended builds
   -- remove the WINELIB flag (was always present anyway)
   -- tries to deal with the mkdir() problem
   -- renames removeDir to remove_dir for consistency
   -- rename IsDotDir to is_dot_dir for the same reason
   -- turn is_dot_dir into an inline function for neatness
   -- merge all headers into winetests.h

And here is the patch (relative to what you've send):

Index: configure.ac
===================================================================
RCS file: /var/cvs/wine/configure.ac,v
retrieving revision 1.210
diff -u -r1.210 configure.ac
--- configure.ac	22 Nov 2003 00:08:26 -0000	1.210
+++ configure.ac	22 Nov 2003 02:33:16 -0000
@@ -1638,6 +1638,7 @@
 programs/winemenubuilder/Makefile
 programs/winemine/Makefile
 programs/winepath/Makefile
+programs/winetests/Makefile
 programs/winevdm/Makefile
 programs/winhelp/Makefile
 programs/winver/Makefile
Index: Make.rules.in
===================================================================
RCS file: /var/cvs/wine/Make.rules.in,v
retrieving revision 1.163
diff -u -r1.163 Make.rules.in
--- Make.rules.in	11 Oct 2003 01:05:18 -0000	1.163
+++ Make.rules.in	21 Nov 2003 19:44:04 -0000
@@ -53,6 +53,8 @@
 MV        = mv
 LINT      = @LINT@
 LINTFLAGS = @LINTFLAGS@
+CROSSCC      = @CROSSCC@
+CROSSWINDRES = @CROSSWINDRES@
 INCLUDES     = -I$(SRCDIR) -I. -I$(TOPSRCDIR)/include -I$(TOPOBJDIR)/include $(EXTRAINCL)
 EXTRACFLAGS  = @EXTRACFLAGS@
 ALLCFLAGS    = $(INCLUDES) $(DEFS) $(DLLFLAGS) $(EXTRACFLAGS) $(CPPFLAGS) $(CFLAGS)
@@ -105,18 +107,22 @@
 CLEAN_FILES     = *.o *.a *.so *.ln *.$(LIBEXT) \\\#*\\\# *~ *% .\\\#* *.bak *.orig *.rej \
                   *.flc *.spec.c *.spec.def *.dbg.c y.tab.c y.tab.h @LEX_OUTPUT_ROOT at .c core
 
-OBJS = $(C_SRCS:.c=.o) $(EXTRA_OBJS)
+OBJS      = $(C_SRCS:.c=.o) $(EXTRA_OBJS)
+CROSSOBJS = $(C_SRCS:.c=.cross.o) $(EXTRA_OBJS:.o=.cross.o) $(RC_SRCS:.rc=.res.cross.o)
 
 RCOBJS = $(RC_SRCS:.rc=.res.o)
 LINTS  = $(C_SRCS:.c=.ln)
 
 # Implicit rules
 
-.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .ok
+.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .ok .cross.o .res.cross.o
 
 .c.o:
 	$(CC) -c $(ALLCFLAGS) -o $@ $<
 
+.c.cross.o:
+	$(CROSSCC) -c $(ALLCFLAGS) -o $@ $<
+
 .s.o:
 	$(AS) -o $@ $<
 
@@ -128,6 +134,9 @@
 
 .res.res.o:
 	$(WINDRES) -i $< -o $@
+
+.res.res.cross.o:
+	$(CROSSWINDRES) -i $< -o $@
 
 .spec.spec.c:
 	$(WINEBUILD) $(DEFS) -o $@ --main-module $(MODULE) --spec $<
Index: dlls/Maketest.rules.in
===================================================================
RCS file: /var/cvs/wine/dlls/Maketest.rules.in,v
retrieving revision 1.28
diff -u -r1.28 Maketest.rules.in
--- dlls/Maketest.rules.in	11 Oct 2003 01:05:18 -0000	1.28
+++ dlls/Maketest.rules.in	21 Nov 2003 19:50:35 -0000
@@ -25,9 +25,6 @@
 IMPORTLIBS   = $(IMPORTS:%=$(DLLDIR)/lib%.$(IMPLIBEXT))
 
 CROSSTEST    = $(TESTDLL:%.dll=%)_crosstest.exe
-CROSSOBJS    = $(C_SRCS:.c=.cross.o) $(RC_SRCS:.rc=.res.cross.o) $(TESTLIST:.c=.cross.o)
-CROSSCC      = @CROSSCC@
-CROSSWINDRES = @CROSSWINDRES@
 
 @MAKE_RULES@
 
@@ -62,14 +59,6 @@
 $(TESTRESULTS): $(MODULE)$(DLLEXT) $(DLLDIR)/$(TESTDLL)$(DLLEXT)
 
 # Rules for cross-compiling tests
-
-.SUFFIXES: .cross.o .res.cross.o
-
-.c.cross.o:
-	$(CROSSCC) -c $(ALLCFLAGS) -o $@ $<
-
-.res.res.cross.o:
-	$(CROSSWINDRES) -i $< -o $@
 
 crosstest:: @CROSSTEST@
 
diff -uN programs/winetests.feri/main.c programs/winetests/main.c
--- programs/winetests.feri/main.c	2003-11-20 11:46:23.000000000 -0500
+++ programs/winetests/main.c	2003-11-21 19:10:02.000000000 -0500
@@ -23,22 +23,22 @@
  *
  */
 
-#ifdef WINELIB
-#  include "config.h"
-#  include "wine/port.h"
-#  define mkdir(d) mkdir (d, 0777)
-#  include <errno.h>
-#else
-#  include <stdlib.h>
-#  include <unistd.h>
-#endif
+#include "config.h"
+#include "wine/port.h"
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <wtypes.h>
+#include <errno.h>
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
 
 #include "winetests.h"
-#include "send.h"
-#include "util.h"
+
+#ifndef _WIN32
+#  define mkdir(d) mkdir (d, 0777)
+#endif
 
 void print_version ()
 {
@@ -58,43 +58,46 @@
              ver.dwMajorVersion, ver.dwMinorVersion, ver.dwBuildNumber,
              ver.dwPlatformId, ver.szCSDVersion);
 
-    if (ext)
-        xprintf ("    wServicePackMajor=%d\n    wServicePackMinor=%d\n"
-                 "    wSuiteMask=%d\n    wProductType=%d\n    wReserved=%d\n",
-                 ver.wServicePackMajor, ver.wServicePackMinor, ver.wSuiteMask,
-                 ver.wProductType, ver.wReserved);
-}
-
-#define IsDotDir(x)     ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0))))
-
-void removeDir (const char *dir)
-{
-  HANDLE  hFind;
-  WIN32_FIND_DATAA wfd;
-  char path[MAX_PATH];
-  size_t dirlen = strlen (dir);
-
-  /* Make sure the directory exists before going further */
-  memcpy (path, dir, dirlen);
-  strcpy (path + dirlen++, "\\*");
-  hFind = FindFirstFileA (path, &wfd);
-  if (hFind == INVALID_HANDLE_VALUE)
-    return;
-
-  do {
-    char *lp = wfd.cFileName;
-
-    if (!lp[0]) lp = wfd.cAlternateFileName; /* ? FIXME not (!lp) ? */
-    if (IsDotDir (lp)) continue;
-    strcpy (path + dirlen, lp);
-    if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
-        removeDir(path);
-    else if (!DeleteFileA (path))
-             fatal (strmake (NULL, "Can't delete file %s: error %d", path, GetLastError ()));
-  } while (FindNextFileA (hFind, &wfd));
-  FindClose (hFind);
-  if (!RemoveDirectoryA (dir))
-      fatal (strmake (NULL, "Can't remove directory %s: error %d", dir, GetLastError ()));
+    if (!ext) return;
+
+    xprintf ("    wServicePackMajor=%d\n    wServicePackMinor=%d\n"
+             "    wSuiteMask=%d\n    wProductType=%d\n    wReserved=%d\n",
+             ver.wServicePackMajor, ver.wServicePackMinor, ver.wSuiteMask,
+             ver.wProductType, ver.wReserved);
+}
+
+static inline int is_dot_dir(const char* x) 
+{
+    return ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0))));
+}
+
+void remove_dir (const char *dir)
+{
+    HANDLE  hFind;
+    WIN32_FIND_DATA wfd;
+    char path[MAX_PATH];
+    size_t dirlen = strlen (dir);
+
+    /* Make sure the directory exists before going further */
+    memcpy (path, dir, dirlen);
+    strcpy (path + dirlen++, "\\*");
+    hFind = FindFirstFile (path, &wfd);
+    if (hFind == INVALID_HANDLE_VALUE) return;
+
+    do {
+        char *lp = wfd.cFileName;
+
+        if (!lp[0]) lp = wfd.cAlternateFileName; /* ? FIXME not (!lp) ? */
+        if (is_dot_dir (lp)) continue;
+        strcpy (path + dirlen, lp);
+        if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
+            remove_dir(path);
+        else if (!DeleteFile (path))
+            fatal (strmake (NULL, "Can't delete file %s: error %d", path, GetLastError ()));
+    } while (FindNextFile (hFind, &wfd));
+    FindClose (hFind);
+    if (!RemoveDirectory (dir))
+        fatal (strmake (NULL, "Can't remove directory %s: error %d", dir, GetLastError ()));
 }
 
 int count_tests()
@@ -108,7 +111,7 @@
     return total;
 }
 
-LPVOID extract_rcdata (const char *name, DWORD* size)
+void* extract_rcdata (const char *name, DWORD* size)
 {
     HRSRC rsrc;
     HGLOBAL hdl;
@@ -147,9 +150,9 @@
 
     xprintf ("%s:%s start\n", test->name, subtest);
     if (test->is_elf)
-      status = spawnvp (_P_WAIT, "/usr/local/src/wine/wine", argv);
+        status = spawnvp (_P_WAIT, "/usr/local/src/wine/wine", argv);
     else
-      status = spawnvp (_P_WAIT, test->exename, argv+1);
+        status = spawnvp (_P_WAIT, test->exename, argv+1);
     if (status)
         xprintf ("Exit status: %d, errno=%d: %s\n", status, errno, strerror (errno));
     xprintf ("%s:%s done\n", test->name, subtest);
@@ -196,13 +199,13 @@
     fclose (fp);
     close (1);                  /* Avoid sharing violation on Win */
 
-    removeDir (tempdir);
+    remove_dir (tempdir);
 
     if (send_file (logfile))
-      fatal ("Can't submit logfile (network of file error).");
+        fatal ("Can't submit logfile (network of file error).");
 
     if (remove (logfile))
-      fatal (strmake (NULL, "Can't remove logfile: %d.", errno));
+        fatal (strmake (NULL, "Can't remove logfile: %d.", errno));
 
     return 0;
 }
diff -uN programs/winetests.feri/Makefile.in programs/winetests/Makefile.in
--- programs/winetests.feri/Makefile.in	2003-11-19 22:01:05.000000000 -0500
+++ programs/winetests/Makefile.in	2003-11-22 03:21:49.000000000 -0500
@@ -5,48 +5,36 @@
 MODULE    = winetests.exe
 APPMODE   = gui
 IMPORTS   = user32 ws2_32
-EXTRADEFS = -DWINELIB
 
 C_SRCS = main.c send.c util.c
 EXTRA_OBJS = winetests.o
-RC_SRCS = winetests.rc
-
-CROSS_GCC = i586-mingw32msvc-gcc
-CROSS_RC  = i586-mingw32msvc-windres
-CROSS_CFLAGS = -Wall -W -O2
-CROSS_OBJS = $(C_SRCS:.c=_cross.o) winetests_cross.o
+RC_SRCS = winetests_so.rc
 
 @MAKE_PROG_RULES@
 
 # Special rules
 
-winetests.rc: maketests tests.list
-	$(SRCDIR)/maketests -r_so > $@
+winetests_so.rc: maketests tests.list
+	$(SRCDIR)/maketests -r_so $(SRCDIR)/tests.list > $@ || ( $(RM) $@ && exit 1 )
+
+winetests_pe.rc: maketests tests.list
+	$(SRCDIR)/maketests -r_so $(SRCDIR)/tests.list > $@ || ( $(RM) $@ && exit 1 )
 
 winetests.subtests: maketests tests.list
-	$(SRCDIR)/maketests -s > $@
+	$(SRCDIR)/maketests -s $(SRCDIR)/tests.list > $@ || ( $(RM) $@ && exit 1 )
 
 winetests.tests: maketests tests.list
-	$(SRCDIR)/maketests -t $(BUILD) > $@
+	$(SRCDIR)/maketests -t $(SRCDIR)/tests.list > $@ || ( $(RM) $@ && exit 1 )
 
 winetests.c: winetests.tests winetests.subtests
 	(echo '#include "winetests.h"'; cat winetests.{sub,}tests) > $@
 
-res_cross.rc: maketests tests.list
-	$(SRCDIR)/maketests -r_pe > $@
-
-$(CROSS_OBJS): %_cross.o: %.c
-	$(CROSS_GCC) $(CROSS_CFLAGS) -o $@ -c $<
-
-res_cross.o: res_cross.rc
-	$(CROSS_RC) -o $@ $<
-
-winetests_cross.exe: $(CROSS_OBJS) res_cross.o
-	$(CROSS_GCC) $^ -lws2_32 -o $@
+winetests_cross.exe: $(CROSSOBJS:_so.res.cross.o=_pe.res.cross.o)
+	$(CROSSCC) $^ -o $@ $(IMPORTS:%=-l%) $(LIBS)
 
 clean::
 	rm -f winetests.c winetests.rc winetests.subtests \
-              winetests.tests winetests_cross.exe $(CROSS_OBJS) \
-              res_cross.rc res_cross.o
+              winetests.tests winetests_cross.exe $(CROSSOBJS) \
+              winetests_pe.rc winetests_pe.res.cross.o
 
 ### Dependencies:
diff -uN programs/winetests.feri/maketests programs/winetests/maketests
--- programs/winetests.feri/maketests	2003-11-21 08:15:09.000000000 -0500
+++ programs/winetests/maketests	2003-11-22 03:20:52.000000000 -0500
@@ -3,16 +3,16 @@
 MODE="$1"
 
 BINDIR="../.."
-TEST_EXES=`sed 's/#.*//' tests.list`
+TEST_EXES=`sed 's/#.*//' "$2"`
 
 echo "/* Automatically generated -- do not edit! */"
 case $MODE in
     -t)
-	if [ -z "$2" ]; then
-	    echo Please supply a build tag. >/dev/stderr
-	    exit 1
+	if [ -z "$WINE_BUILD" ]; then
+	    WINE_BUILD="`date`"
+	    echo "warning: using automatically generated BUILD tag: $WINE_BUILD" >/dev/stderr
 	fi
-        echo "const char build_tag[] = \"$2\";"
+        echo "const char build_tag[] = \"$WINE_BUILD\";"
 	echo "struct wine_test wine_tests[] = {"
     ;;
 esac
diff -uN programs/winetests.feri/send.c programs/winetests/send.c
--- programs/winetests.feri/send.c	2003-11-19 21:12:21.000000000 -0500
+++ programs/winetests/send.c	2003-11-21 19:11:01.000000000 -0500
@@ -1,8 +1,7 @@
 #include <winsock.h>
 #include <stdio.h>
 
-#include "util.h"
-#include "send.h"
+#include "winetests.h"
 
 SOCKET
 open_http (const char *ipnum)
diff -uN programs/winetests.feri/send.h programs/winetests/send.h
--- programs/winetests.feri/send.h	2003-11-15 09:31:51.000000000 -0500
+++ programs/winetests/send.h	1969-12-31 19:00:00.000000000 -0500
@@ -1,6 +0,0 @@
-#ifndef __SEND_H
-#define __SEND_H
-
-int send_file (const char *name);
-
-#endif /* __SEND_H */
diff -uN programs/winetests.feri/util.c programs/winetests/util.c
--- programs/winetests.feri/util.c	2003-11-17 14:36:33.000000000 -0500
+++ programs/winetests/util.c	2003-11-22 03:33:15.000000000 -0500
@@ -1,70 +1,70 @@
 #include <windows.h>
 
-#include "util.h"
+#include "winetests.h"
 
 void fatal (const char* msg)
 {
-  MessageBox (NULL, msg, "Fatal Error", MB_ICONERROR | MB_OK);
-  exit (1);
+    MessageBox (NULL, msg, "Fatal Error", MB_ICONERROR | MB_OK);
+    exit (1);
 }
 
 void *xmalloc (size_t len)
 {
-  void *p = malloc (len);
+    void *p = malloc (len);
 
-  if (!p) fatal ("Out of memory.");
-  return p;
+    if (!p) fatal ("Out of memory.");
+    return p;
 }
 
 void *xrealloc (void *op, size_t len)
 {
-  void *p = realloc (op, len);
+    void *p = realloc (op, len);
 
-  if (!p) fatal ("Out of memory.");
-  return p;
+    if (!p) fatal ("Out of memory.");
+    return p;
 }
 
 void xprintf (const char *fmt, ...)
 {
-  va_list ap;
+    va_list ap;
 
-  va_start (ap, fmt);
-  if (vprintf (fmt, ap) < 0) fatal ("Can't write logs.");
-  va_end (ap);
+    va_start (ap, fmt);
+    if (vprintf (fmt, ap) < 0) fatal ("Can't write logs.");
+    va_end (ap);
 }
 
 char *vstrmake (size_t *lenp, const char *fmt, va_list ap)
 {
-  size_t size = 1000;
-  char *p, *q;
-  int n;
-
-  p = malloc (size);
-  if (!p) return NULL;
-  while (1) {
-    n = vsnprintf (p, size, fmt, ap);
-    if (n < 0) size *= 2;   /* Windows */
-    else if ((unsigned)n >= size) size = n+1; /* glibc */
-    else break;
-    q = realloc (p, size);
-    if (!q) {
-      free (p);
-      return NULL;
+    size_t size = 1000;
+    char *p, *q;
+    int n;
+
+    p = malloc (size);
+    if (!p) return NULL;
+    while (1) {
+        n = vsnprintf (p, size, fmt, ap);
+        if (n < 0) size *= 2;   /* Windows */
+        else if ((unsigned)n >= size) size = n+1; /* glibc */
+        else break;
+        q = realloc (p, size);
+        if (!q) {
+          free (p);
+          return NULL;
+       }
+       p = q;
     }
-    p = q;
-  }
-  if (lenp) *lenp = n;
-  return p;
+    if (lenp) *lenp = n;
+    return p;
 }
 
 char *strmake (size_t *lenp, const char *fmt, ...)
 {
-  va_list ap;
-  char *p;
+    va_list ap;
+    char *p;
 
-  va_start (ap, fmt);
-  p = vstrmake (lenp, fmt, ap);
-  if (!p) fatal ("Out of memory.");
-  va_end (ap);
-  return p;
+    va_start (ap, fmt);
+    p = vstrmake (lenp, fmt, ap);
+    if (!p) fatal ("Out of memory.");
+    va_end (ap);
+    return p;
 }
diff -uN programs/winetests.feri/util.h programs/winetests/util.h
--- programs/winetests.feri/util.h	2003-11-17 14:36:43.000000000 -0500
+++ programs/winetests/util.h	1969-12-31 19:00:00.000000000 -0500
@@ -1,16 +0,0 @@
-#ifndef __UTIL_H
-#define __UTIL_H
-
-#include <stdio.h>
-#ifndef WINELIB
-#  include <stdlib.h>
-#endif
-
-void fatal (const char* msg);
-void *xmalloc (size_t len);
-void *xrealloc (void *op, size_t len);
-void xprintf (const char *fmt, ...);
-char *vstrmake (size_t *lenp, const char *fmt, va_list ap);
-char *strmake (size_t *lenp, const char *fmt, ...);
-
-#endif /* __UTIL_H */
diff -uN programs/winetests.feri/winetests.h programs/winetests/winetests.h
--- programs/winetests.feri/winetests.h	2003-11-21 08:15:59.000000000 -0500
+++ programs/winetests/winetests.h	2003-11-22 03:05:10.000000000 -0500
@@ -1,6 +1,10 @@
 #ifndef __WINETESTS_H
 #define __WINETESTS_H
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
 struct wine_test
 {
     const char *name;
@@ -17,4 +21,13 @@
 
 extern const char build_tag[];
 
+void fatal (const char* msg);
+void *xmalloc (size_t len);
+void *xrealloc (void *op, size_t len);
+void xprintf (const char *fmt, ...);
+char *vstrmake (size_t *lenp, const char *fmt, va_list ap);
+char *strmake (size_t *lenp, const char *fmt, ...);
+
+int send_file (const char *name);
+
 #endif /* __WINETESTS_H */


-- 
Dimi.




More information about the wine-devel mailing list