This patch goes somewhat against Dimi's. Instead of invoking cvs, it extracts the working revision info from the CVS/Entries files resulting in speedy operation. Thus I incorporated all the stuff into maketest, executing unconditionally. Hope it is still portable.
ChangeLog: - Extract revision info from CVS/Entries. - #include "winetest.rc" into gui.rc. MinGW can't link in more than one resource files. - Enlarge chunk size of network transfer.
Index: Makefile.in =================================================================== RCS file: /home/wine/wine/programs/winetest/Makefile.in,v retrieving revision 1.23 diff -u -r1.23 Makefile.in --- Makefile.in 20 Mar 2004 19:21:39 -0000 1.23 +++ Makefile.in 22 Mar 2004 23:03:43 -0000 @@ -1,4 +1,5 @@ TOPSRCDIR = @top_srcdir@ +export TOPSRCDIR TOPOBJDIR = ../.. SRCDIR = @srcdir@ VPATH = @srcdir@ @@ -13,8 +14,7 @@ util.c
RC_SRCS = \ - gui.rc \ - winetest.rc + gui.rc
RC_BINSRC = gui.rc RC_BINARIES = wine.ico @@ -46,9 +46,6 @@
winetest.rc: maketest Makefile.in $(SRCDIR)/maketest $(TESTBINS) > $@ || ( $(RM) $@ && exit 1 ) - -revision.info: - (cd $(TOPSRCDIR); for file in dlls/*/tests/*.c; do rev=`cvs stat "$$file" | grep "Working" | awk '{print $$3}'`; echo "$$file:$$rev"; done) > $@ || ( $(RM) $@ && exit 1 )
winetest.res: $(TESTBINS)
Index: gui.rc =================================================================== RCS file: /home/wine/wine/programs/winetest/gui.rc,v retrieving revision 1.2 diff -u -r1.2 gui.rc --- gui.rc 2 Mar 2004 20:56:35 -0000 1.2 +++ gui.rc 22 Mar 2004 23:03:43 -0000 @@ -21,6 +21,7 @@ #include <windows.h> #include <winres.h> #include "guires.h" +#include "winetest.rc" /* for the MinGW cross-compiler */
IDD_STATUS DIALOG 0, 0, 160, 140 STYLE WS_OVERLAPPEDWINDOW Index: main.c =================================================================== RCS file: /home/wine/wine/programs/winetest/main.c,v retrieving revision 1.7 diff -u -r1.7 main.c --- main.c 20 Mar 2004 19:21:39 -0000 1.7 +++ main.c 22 Mar 2004 23:03:43 -0000 @@ -140,7 +140,6 @@ }
snprintf(buffer, sizeof(buffer), "dlls/%s/tests/%s.c", test, subtest); - fprintf(stderr, "file=%s\n", buffer); return buffer; }
@@ -149,36 +148,35 @@ const struct rev_info* rev;
for(rev = rev_infos; rev->file; rev++) { - fprintf(stderr, " ?{%s:%s)\n", rev->file, rev->rev); if (strcmp(rev->file, file) == 0) return rev->rev; }
- return ""; + return "-"; }
void extract_rev_infos () { char revinfo[256], *p; - int size = 0, i = 0, len; + int size = 0, i, len; HMODULE module = GetModuleHandle (NULL);
for (i = 0; TRUE; i++) { if (i >= size) { size += 100; - rev_infos = xrealloc(rev_infos, size); + rev_infos = xrealloc (rev_infos, size * sizeof (*rev_infos)); } memset(rev_infos + i, 0, sizeof(rev_infos[i]));
len = LoadStringA (module, i + 30000, revinfo, sizeof(revinfo)); if (len == 0) break; /* end of revision info */ - if (len >= sizeof(revinfo)) + if (len >= sizeof(revinfo) - 1) report (R_FATAL, "Revision info too long."); if(!(p = strrchr(revinfo, ':'))) report (R_FATAL, "Revision info malformed (i=%d)", i); *p = 0; rev_infos[i].file = strdup(revinfo); rev_infos[i].rev = strdup(p + 1); - } while(1); + } }
void* extract_rcdata (int id, DWORD* size) @@ -196,7 +194,7 @@ return addr; }
-/* Fills out the name, is_elf and exename fields */ +/* Fills in the name, is_elf and exename fields */ void extract_test (struct wine_test *test, const char *dir, int id) { @@ -459,48 +457,45 @@
cmdLine = mystrtok (cmdLine); while (cmdLine) { - if (*cmdLine == '-') - if (cmdLine[2]) { - report (R_ERROR, "Not a single letter option: %s", - cmdLine); - usage (); - exit (2); - } - cmdLine++; - switch (*cmdLine) { - case 'c': - report (R_TEXTMODE); - break; - case 'h': - usage (); - exit (0); - case 'q': - report (R_QUIET); - break; - case 's': - submit = mystrtok (NULL); - if (tag) - report (R_WARNING, "ignoring tag for submit"); - send_file (submit); - break; - case 'o': - logname = mystrtok (NULL); - run_tests (logname, tag); - break; - case 't': - tag = mystrtok (NULL); - cp = badtagchar (tag); - if (cp) { - report (R_ERROR, "invalid char in tag: %c", *cp); - usage (); - exit (2); - } - break; - default: - report (R_ERROR, "invalid option: -%c", *cmdLine); + if (cmdLine[0] != '-' || cmdLine[2]) { + report (R_ERROR, "Not a single letter option: %s", cmdLine); + usage (); + exit (2); + } + switch (cmdLine[1]) { + case 'c': + report (R_TEXTMODE); + break; + case 'h': + usage (); + exit (0); + case 'q': + report (R_QUIET); + break; + case 's': + submit = mystrtok (NULL); + if (tag) + report (R_WARNING, "ignoring tag for submit"); + send_file (submit); + break; + case 'o': + logname = mystrtok (NULL); + run_tests (logname, tag); + break; + case 't': + tag = mystrtok (NULL); + cp = badtagchar (tag); + if (cp) { + report (R_ERROR, "invalid char in tag: %c", *cp); usage (); exit (2); } + break; + default: + report (R_ERROR, "invalid option: -%c", cmdLine[1]); + usage (); + exit (2); + } cmdLine = mystrtok (NULL); } if (!logname && !submit) { Index: maketest =================================================================== RCS file: /home/wine/wine/programs/winetest/maketest,v retrieving revision 1.4 diff -u -r1.4 maketest --- maketest 20 Mar 2004 19:21:39 -0000 1.4 +++ maketest 22 Mar 2004 23:03:43 -0000 @@ -16,13 +16,15 @@ echo "$i "$test"" done
-if [ -f revision.info ]; then - i=0 - for line in `cat revision.info`; do - i=`expr $i + 1` - echo "$i+30000 "$line"" - done -fi +i=30000 +cd $TOPSRCDIR +for dir in dlls/*/tests; do + sed -ne "s|^/([^.]*.c)/([^/]*).*|$dir/\1:\2|p" $dir/CVS/Entries 2>/dev/null +done |\ +while read; do + echo "$i "$REPLY"" + i=`expr $i + 1` +done
echo "}"
Index: send.c =================================================================== RCS file: /home/wine/wine/programs/winetest/send.c,v retrieving revision 1.7 diff -u -r1.7 send.c --- send.c 19 Mar 2004 19:15:23 -0000 1.7 +++ send.c 22 Mar 2004 23:03:43 -0000 @@ -158,7 +158,7 @@
report (R_STATUS, "Sending %u bytes of data", filesize); report (R_PROGRESS, 2, filesize); - while ((bytes_read = fread (buffer, 1, BUFLEN / 8, f))) { + while ((bytes_read = fread (buffer, 1, BUFLEN / 2, f))) { if (send_buf (s, buffer, bytes_read)) { report (R_WARNING, "Error sending body: %d, %d", errno, WSAGetLastError ());