2 ##Wine Quick Debug Report Maker Thingy (WQDRMK)
3 ## Copyright (c) 1998-1999 Adam Sacarny jazz@cscweb.net ICQ: 19617831
4 ##Do not say this is yours without my express permisson, or I will
5 ##hunt you down and kill you like the savage animal I am.
7 ## Improvements by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
10 ## A few improovements and updates here and there
11 ## Copyright 2003-2004 Ivan Leo Puoti
13 ## This library is free software; you can redistribute it and/or
14 ## modify it under the terms of the GNU Lesser General Public
15 ## License as published by the Free Software Foundation; either
16 ## version 2.1 of the License, or (at your option) any later version.
18 ## This library is distributed in the hope that it will be useful,
19 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 ## Lesser General Public License for more details.
23 ## You should have received a copy of the GNU Lesser General Public
24 ## License along with this library; if not, write to the Free Software
25 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 ##August 29, 1999 - Work around for debugger exit (or lack thereof)
29 ## - Should now put debugging output in correct place
30 ##April 19, 1999 - Much nicer way to select Wine's location
31 ## - Option to disable creation of a debugging output
32 ## - Now places debugging output where it was started
33 ##April 4, 1999 - Sanity check for file locations/wine strippedness
34 ## - Various code cleanups/fixes
35 ##March 21, 1999 - Bash 2.0 STDERR workaround (Thanks Ryan Cumming!)
36 ##March 1, 1999 - Check for stripped build
37 ##February 3, 1999 - Fix to chdir to the program's directory
38 ##February 1, 1999 - Cleaned up code
39 ##January 26, 1999 - Fixed various bugs...
40 ## - Made newbie mode easier
41 ##January 25, 1999 - Initial Release
47 open STDERR
, ">&SAVEERR"; open STDERR
, ">&STDOUT";
48 $ENV{'SHELL'}="/bin/bash";
50 What is your level of Wine expertise?
1-newbie
2-intermediate
3-advanced
52 1 - Makes a debug report as
defined in the Wine documentation
. Best
53 for new Wine users
. If you
're not sure what WINEDEBUG is, then
55 2 - Makes a debug report that is more customizable (Example: you can
56 choose what WINEDEBUG to use). You are asked more questions in
57 this mode. May intimidate newbies.
58 3 - Just like 2, but not corner cutting. Assumes you know what you're
59 doing so it leaves out the long descriptions
.
61 print do_var
($var0)."\n";
62 until ($debuglevel >= 1 and $debuglevel <= 3) {
63 print "Enter your level of Wine expertise (1-3): ";
68 if ($debuglevel < 3) {
70 This program will make a debug report
for Wine developers
. It generates
71 two files
. The first one has everything asked
for by the bugreports guide
;
72 the second has
*all
* of the debug output
, which can go to thousands of
74 To
(hopefully
) get the bug fixed
, report it to the project
75 bug tracking
system at http
://bugs
.winehq
.org
.
76 Attach the first file to the bug description
.
77 Also include detailed description of the problem
. The developers
78 might ask you
for "the last X lines from the report". If so
, just
79 provide the output of the following command
:
80 gzip
-d
(output file
) | tail
-n
(X
) > outfile
81 If you
do not want to create one of the files
, just specify
"no file".
84 } elsif ($debuglevel =~ 3) {
86 This program will output to two files
:
87 1. Formatted debug report you might want to post to the newsgroup
88 2. File with ALL the debug output
(It will later be compressed with
89 gzip
, so leave off the trailing
.gz
)
90 If you
do not want to create one of the files
, just type
in "no file"
96 print "\nFilename for the formatted debug report: ";
100 I don't think you typed
in the right filename
. Let
's try again.
102 while ($outfile =~ /^(\s)*$/) {
103 print do_var($var23);
108 print "Filename for full debug output: ";
111 while ($dbgoutfile =~ /^(\s)*$/) {
112 print do_var($var23);
118 Since you will only be creating the formatted report, I will need a
119 temporary place to put the full output.
120 You may not enter "no file" for this.
121 Enter the filename for the temporary file:
123 if ($outfile ne "no file" and $dbgoutfile eq "no file") {
124 print do_var($var31);
127 while (($tmpoutfile =~ /^(\s)*$/) or ($tmpoutfile eq "no file")) {
128 print do_var($var23);
134 $whereis=`whereis wine`;
136 print "\nWhere is your copy of Wine located?\n\n";
137 $whereis =~ s/^wine\: //;
138 @locations = split(/\s/,$whereis);
139 print "1 - Unlisted (I'll prompt you
for a new location
\n";
140 print "2 - Unsure
(I
'll use #3, that's probably it
)\n";
142 foreach $location (@locations) {
144 print "$i - $location\n";
150 print "Enter the number that corresponds to Wine
's location: ";
154 while ( ! ( $wineloc >=1 and $wineloc <= 2+@locations ) );
157 Enter the full path to wine (Example: /usr/bin/wine):
160 Please enter the full path to wine. A full path is the
161 directories leading up to a program's location
, and then the
162 program
. For example
, if you had the program
"wine" in the
163 directory
"/usr/bin", you would type
in "/usr/bin/wine". Now
166 print do_var
($var25) if $debuglevel == 3;
167 print do_var
($var26) if $debuglevel < 3;
170 while ($wineloc =~ /^(\s)*$/) {
171 print do_var
($var23);
176 elsif ($wineloc == 2) {
177 $wineloc=$locations[0];
180 $wineloc=$locations[$wineloc-3];
184 print "Checking if $wineloc is stripped...\n";
185 $ifstrip = `nm $wineloc 2>&1`;
186 while ($ifstrip =~ /no symbols/) {
188 Your wine is stripped
! Stripped versions make useless debug reports
189 If you have another location of wine that may be used
, enter it now
.
190 Otherwise
, hit control
-c
and download an unstripped
(Debug
) version
, then re
-run
193 print do_var
($var24);
195 $ifstrip = `nm $wineloc 2>&1`;
197 while ($ifstrip =~ /not recognized/) {
199 Looks like you gave me something that isn
't a Wine binary (It could be a
200 text file). Try again.
202 print do_var($var26);
204 print "Checking if $wineloc is stripped...\n";
205 $ifstrip = `nm $wineloc 2>&1`;
208 print "\nWhat version of Windows are you using with Wine?\n\n".
214 "5 - Windows NT 3.5x\n".
215 "6 - Windows NT4.x\n".
216 "7 - Windows 2000\n".
218 "9 - Windows Server 2003\n".
222 print "Enter the number that corresponds to your Windows version: ";
226 until ($winver >= 0 and $winver <= 10);
228 $winver="None Installed";
229 } elsif ($winver =~ 1) {
230 $winver="Windows 3.x";
231 } elsif ($winver =~ 2) {
232 $winver="Windows 95";
233 } elsif ($winver =~ 3) {
234 $winver="Windows 98";
235 } elsif ($winver =~ 4) {
236 $winver="Windows ME";
237 } elsif ($winver =~ 5) {
238 $winver="Windows NT 3.5x";
239 } elsif ($winver =~ 6) {
240 $winver="Windows NT 4.x";
241 } elsif ($winver =~ 7) {
242 $winver="Windows 2000";
243 } elsif ($winver =~ 8) {
244 $winver="Windows XP";
245 } elsif ($winver =~ 9) {
246 $winver="Windows Server 2003";
247 } elsif ($winver =~ 10) {
248 print "What version of Windows are you using? ";
252 if ($debuglevel < 3) {
254 Enter the full path to the program you want to run. Remember what you
255 were told before - a full path is the directories leading up to the
256 program and then the program's name
, like
/dos/windows
/sol
.exe
, not
261 if ($debuglevel =~ 3) {
263 Enter the full path to the program you want to run
(Example
:
264 /dos/windows
/sol
.exe
, NOT sol
.exe
):
270 while ($program =~ /^(\s)*$/) {
271 print do_var
($var23);
277 Enter the name
, version
, and manufacturer of the program
(Example
:
278 Netscape Navigator
4.5):
284 Enter
1 if your program is
16 bit
(Windows
3.x
), 2 if your program is
32
285 bit
(Windows
95, NT3
.x
and up
), or 3 if you are unsure
:
287 print do_var
($var10);
290 until ($progbits == 1 or $progbits == 2 or $progbits == 3) {
291 print "You must enter 1, 2 or 3!\n";
295 if ($progbits =~ 1) {
297 } elsif ($progbits =~ 2) {
302 if ($debuglevel > 1) {
303 if ($debuglevel =~ 2) {
305 Enter any extra debug options
. Default is
+relay
- If you don
't
306 know what options to use, just hit enter, and I'll
use those
(Example
, the
307 developer tells you to re
-run with WINEDEBUG
=+dosfs
,+module you would type
308 in +dosfs
,+module
). Hit enter
if you
're not sure what to do:
310 print do_var($var11);
311 } elsif ($debuglevel =~ 3) {
313 Enter any debug options you would like to use. Just enter parts after
314 WINEDEBUG. Default is +relay:
316 print do_var($var12);
320 if ($debugopts =~ /--debugmsg /) {
321 ($crap, $debugopts) = split / /,$debugopts;
322 if ($debugopts =~ /WINEDEBUG= /) {
323 ($crap, $debugopts) = split / /,$debugopts;
325 if ($debugopts =~ /^\s*$/) {
328 } elsif ($debuglevel =~ 1) {
329 $debugopts = "+relay";
331 if ($debuglevel > 1) {
332 if ($debuglevel =~ 2) {
334 How many trailing lines of debugging info do you want to include in the report
335 you're going to submit
(First file
)? If a developer asks you to include
336 the
last 15000 lines
, enter
15000 here
. Default is
3000, which is reached by
337 pressing enter
. (If you
're not sure, just hit enter):
339 print do_var($var13);
340 } elsif ($debuglevel =~ 3) {
342 Enter how many lines of trailing debugging output you want in your nice
343 formatted report. Default is 3000:
345 print do_var($var14);
349 if ($lastnlines =~ /^\s*$/) {
352 } elsif ($debuglevel =~ 1) {
355 if ($debuglevel > 1) {
357 Enter any extra options you want to pass to Wine.
359 print do_var($var15);
362 } elsif ($debuglevel =~ 1) {
366 print "\nEnter the name of your distribution (Example: RedHat 9.0): ";
370 if ($debuglevel > 1) {
371 if ($debuglevel =~ 2) {
373 When you ran ./configure to build wine, were there any special options
374 you used to do so (Example: --enable-dll)? If you didn't
use any special
375 options
or didn
't compile Wine yourself, just hit enter:
377 print do_var($var16);
378 } elsif ($debuglevel =~ 3) {
380 Enter any special options you used when running ./configure for Wine
381 (Default is none, use if you didn't compile Wine yourself
):
383 print do_var
($var17);
387 if ($configopts =~ /^\s*$/) {
390 } elsif ($debuglevel =~ 1) {
393 if ($debuglevel > 1) {
394 if ($debuglevel =~ 2) {
396 Is your Wine version CVS
or from a
.tar
.gz
or RPM file? As
in... did you download it
397 off a website
/ftpsite or did you/have you run cvs on it to update it?
398 For CVS
: YYYYMMDD
, where YYYY is the year
(2004), MM is the month
(03), and DD
399 is the day
(09), that you
last updated it
(Example
: 20040309).
400 For tar
.gz
and RPM
: Just hit enter
and I
'll figure out the version for you:
402 print do_var($var18);
403 } elsif ($debuglevel =~ 3) {
405 Is your Wine from CVS? Enter the last CVS update date for it here, in
406 YYYYMMDD form (If it's from a tarball
or RPM
, just hit enter
):
408 print do_var
($var19);
412 if ($winever =~ /[0-9]+/) {
416 $winever = `$wineloc -v 2>&1`;
419 } elsif ($debuglevel =~ 1) {
420 $winever=`$wineloc -v 2>&1`;
423 $gccver=`gcc -v 2>&1`;
424 ($leftover,$gccver) = split /\n/,$gccver;
428 $kernelver=`uname -r`;
432 $wineneeds=`ldd $wineloc`;
433 if ($debuglevel < 3) {
435 OK
, now I
'm going to run Wine. I will close it for you once the Wine
436 debugger comes up. NOTE: You won't see ANY debug messages
. Don
't
437 worry, they are being output to a file. Since there are so many, it's
438 not a good idea to have them all output to a terminal
(Speed slowdown
440 Wine will still run much slower than normal
, because there will be so
441 many debug messages being output to file
.
443 print do_var
($var20);
444 } elsif ($debuglevel =~ 3) {
446 OK
, now it
's time to run Wine. I will close down Wine for you after
447 the debugger is finished doing its thing.
449 print do_var($var21);
451 $bashver=qw("/bin/bash -version");
452 if ($bashver =~ /2\./) { $outflags = "2>" }
453 else { $outflags = ">\&" }
454 print "Hit enter to start Wine!\n";
462 if (!($outfile =~ /\//) and $outfile ne "no file") {
463 $outfile = "$nowdir/$outfile";
465 if (!($dbgoutfile =~ /\//) and $dbgoutfile ne "no file") {
466 $dbgoutfile = "$nowdir/$dbgoutfile";
468 if (!($tmpoutfile =~ /\//)) {
469 $tmpoutfile = "$nowdir/$tmpoutfile";
471 $SIG{CHLD
}=$SIG{CLD
}=sub { wait };
472 if ($dbgoutfile ne "no file") {
473 unlink("$dbgoutfile");
476 elsif (defined $pid) {
477 close(0);close(1);close(2);
478 exec "echo quit | WINEDEBUG=$debugopts $wineloc $extraops \"$program\" > $dbgoutfile 2>&1";
483 while (kill(0, $pid)) {
485 $last = `tail -n 5 $dbgoutfile | grep Wine-dbg`;
486 if ($last =~ /Wine-dbg/) {
491 if ($outfile ne "no file") {
492 $lastlines=`tail -n $lastnlines $dbgoutfile`;
493 system("gzip $dbgoutfile");
497 system("gzip $dbgoutfile");
500 elsif ($outfile ne "no file" and $dbgoutfile eq "no file") {
503 elsif (defined $pid) {
504 close(0);close(1);close(2);
505 exec "echo quit | WINEDEBUG=$debugopts $wineloc $extraops \"$program\" 2>&1| tee $tmpoutfile | tail -n $lastnlines > $outfile";
510 print "$outfile $tmpoutfile";
511 while (kill(0, $pid)) {
513 $last = `tail -n 5 $tmpoutfile | grep Wine-dbg`;
514 if ($last =~ /Wine-dbg/) {
520 open(OUTFILE
, "$outfile");
530 I guess you don
't want me to make any debugging output. I'll
send
531 it to your terminal
. This will be a
*lot
* of output
-- hit enter to
532 continue, control
-c to quit
.
533 Repeat
: this will be a lot of output
!
535 print do_var
($var27);
537 system("$wineloc WINEDEBUG=$debugopts $extraops \"$program\"");
539 sub generate_outfile
{
540 open(OUTFILE
,">$outfile");
542 Auto-generated debug report by Wine Quick Debug Report Maker Tool:
543 WINE Version: $winever
544 Windows Version: $winver
546 Kernel Version: $kernelver
551 Program Type: $progbits
552 Debug Options: WINEDEBUG=$debugopts
553 Other Extra Commands Passed: $extraops
554 Extra ./configure Commands: $configopts
557 Last $lastnlines lines of debug output follows:
559 I have a copy of the full debug report, if it is needed.
564 Great
! We
're finished making the debug report. Please go to http://bugs.winehq.org
565 and enter it as a new bug. Check that nobody has already reported the same bug!
568 The filename for the formatted report is:
572 The filename for the compressed full debug is:
574 Note that it is $dbgoutfile.gz, since I compressed it with gzip for you.
577 If you have any problems with this bug reporting tool,
578 please submit a bug report to Wine bugtracking system at http://bugs.winehq.org
579 or tell the Wine newsgroup (comp.emulators.ms-windows.wine).
581 print do_var($var22);
582 print do_var($var28) if $outfile ne "no file";
583 print do_var($var29) if $dbgoutfile ne "no file";
584 print do_var($var30);