| #!/usr/bin/perl |
| ##Wine Quick Debug Report Maker Thingy (WQDRMK) |
| ##By Adam the Jazz Guy |
| ##(c) 1998 |
| ##Do not say this is yours without my express permisson, or I will |
| ##hunt you down and kill you like the savage animal I am. |
| ##Released under the WINE licence |
| ##Changelog: |
| ##February 3, 1999 - Fix to chdir to the program's directory |
| ##February 1, 1999 - Cleaned up code |
| ##January 26, 1999 - Fixed various bugs... |
| ## - Made newbie mode easier |
| ##January 25, 1999 - Initial Release |
| ## ------------------------------------------- |
| ##| IRCNET/UNDERNET: jazzfan AOL: Jazzrock12 | |
| ##| E-MAIL: magicbox@bestweb.net ICQ: 19617831| |
| ##| Utah Jazz Page @ http://www.gojazz.net | |
| ##| Wine Builds @ http://www.gojazz.net/wine | |
| ## ------------------------------------------- |
| sub do_var { |
| $var=$_[0]; |
| $var =~ s/\t//g; |
| return $var; |
| } |
| open STDERR, ">&SAVEERR"; open STDERR, ">&STDOUT"; |
| $ENV{'SHELL'}="/bin/bash"; |
| $var0 = qq{ |
| Enter your level of WINE expertise: 1-newbie 2-intermediate 3-advanced |
| |
| 1 - Makes a debug report as defined in the WINE documentation. Best |
| for new WINE users. If you're not sure what -debugmsg is, then use |
| this mode. |
| 2 - Makes a debug report that is more customizable (Example: you can |
| choose what -debugmsg 's to use). You are asked more |
| questions in this mode. May intimidate newbies. |
| 3 - Just like 2, but not corner cutting. Assumes you know what you're |
| doing so it leaves out the long descriptions. |
| }; |
| print do_var($var0); |
| $debuglevel=<STDIN>; |
| chomp $debuglevel; |
| until ($debuglevel < 4) { |
| print "Enter a number from 1-3!\n"; |
| $debuglevel=<STDIN>; |
| chomp $debuglevel; |
| } |
| if ($debuglevel < 3) { |
| $var1 = qq{ |
| This program will make a debug report for WINE developers. It does this |
| in two files. The first one has everything asked for by the bugreports |
| guide. The second has *all* of the debug output (This can go to |
| thousands of lines). To (hopefully) get the bug fixed, attach the first |
| file to a messsage sent to the comp.emulators.ms-windows.wine newsgroup. |
| The developers might ask you for "the last XX number of lines from the |
| report". If so, post the second file (It will be compressed with gzip |
| later, so leave off the .gz). If you feel like it, post both files at the |
| same time. I don't care. |
| }; |
| print do_var($var1); |
| } elsif ($debuglevel =~ 3) { |
| $var2 = qq{ |
| This program will output to two files: |
| 1. Formatted debug report you might want to post to the newsgroup |
| 2. File with ALL the debug output (It will later be compressed with |
| gzip, so leave off the trailing .gz) |
| }; |
| print do_var($var2); |
| } |
| print "Enter the filename for this debug report (The first file):\n"; |
| $outfile=<STDIN>; |
| chomp $outfile; |
| print "Enter the file for the debug output (The second file):\n"; |
| $dbgoutfile=<STDIN>; |
| chomp $dbgoutfile; |
| if ($debuglevel =~ 1) { |
| print "Looking for wine...\n"; |
| $wineloc=`which wine`; |
| chomp $wineloc; |
| if ($wineloc =~ "") { |
| print "Couldn't find wine...\n"; |
| $var3 = qq{ |
| Enter the full path to wine. The path should look like |
| /path/to/wine/wine. Get it? It's the directories leading up to the |
| wine file, and then the actual wine file (Example: /home/wine/wine): |
| }; |
| print do_var($var3); |
| $wineloc=<STDIN>; |
| chomp $wineloc; |
| } else { |
| print "Found wine: $wineloc\n" |
| } |
| } |
| if ($debuglevel > 1) { |
| if ($debuglevel =~ 2) { |
| $var4 = qq{ |
| Enter the full path to wine. The path should look like |
| /path/to/wine/wine. Get it? It's the directories leading up to the |
| wine file, and then the actual wine file (Example: /home/wine/wine): |
| }; |
| print do_var($var4); |
| } elsif ($debuglevel =~ 3) { |
| print "Enter the full path to wine (Example: /home/wine/wine):\n"; |
| } |
| $wineloc=<STDIN>; |
| chomp $wineloc; |
| } |
| $var5 = qq{ |
| What version of windows are you using with wine? 0-None, 1-Win3.x, |
| 2-Win95, 3-Win98, 4-WinNT3.5x, 5-WinNT4.x, 6-WinNT5.x, 7-Other (Enter |
| 0-7): |
| }; |
| print do_var($var5); |
| $winver=<STDIN>; |
| until ($winver < 7) { |
| $var6 = qq{ |
| No! Enter a number from 0 to 7 that corresponds to your windows version! |
| }; |
| print do_var($var6); |
| $winver=<STDIN>; |
| } |
| chomp $winver; |
| if ($winver =~ 0) { |
| $winver="None Installed"; |
| } elsif ($winver =~ 1) { |
| $winver="Windows 3.x"; |
| } elsif ($winver =~ 2) { |
| $winver="Windows 95"; |
| } elsif ($winver =~ 3) { |
| $winver="Windows 98"; |
| } elsif ($winver =~ 4) { |
| $winver="Windows NT 3.5x"; |
| } elsif ($winver =~ 5) { |
| $winver="Windows NT 4.x"; |
| } elsif ($winver =~ 6) { |
| $winver="Windows NT 5.x"; |
| } elsif ($winver =~ 7) { |
| print "OK. What version of Windows are you using?\n"; |
| $winver=<STDIN>; |
| chomp $winver; |
| } |
| if ($debuglevel < 3) { |
| $var7 = qq{ |
| Enter the full path to the program you want to run. Remember what you |
| were told before - a full path is the directories leading up to the |
| program and then the program's name, like /dos/windows/sol.exe, not |
| sol.exe: |
| }; |
| print do_var($var7); |
| } |
| if ($debuglevel =~ 3) { |
| $var8 = qq{ |
| Enter the full path to the program you want to run (Example: |
| /dos/windows/sol.exe, NOT sol.exe): |
| }; |
| print do_var($var8); |
| } |
| $program=<STDIN>; |
| chomp $program; |
| $var9 = qq{ |
| Enter the name, version, and manufacturer of the program (Example: |
| Netscape Navigator 4.5): |
| }; |
| print do_var($var9); |
| $progname=<STDIN>; |
| chomp $progname; |
| $var10 = qq{ |
| Enter 0 if your program is 16 bit (Windows 3.x), 1 if your program is 32 |
| bit (Windows 9x, NT3.x and up), or 2 if you are unsure: |
| }; |
| print do_var($var10); |
| $progbits=<STDIN>; |
| chomp $progbits; |
| until ($progbits < 3) { |
| print "You must enter 0, 1 or 2!\n"; |
| $progbits=<STDIN>; |
| chomp $progbits |
| } |
| if ($progbits =~ 0) { |
| $progbits=Win16 |
| } elsif ($progbits =~ 1) { |
| $progbits=Win32 |
| } else { |
| $progbits = "Unsure" |
| } |
| if ($debuglevel > 1) { |
| if ($debuglevel =~ 2) { |
| $var11 = qq{ |
| Enter any extra debug options. Default is +relay - If you don't |
| know what options to use, just hit enter, and I'll use those (Example, the |
| developer tells you to re-run with -debugmsg +dosfs,+module you would type |
| in +dosfs,+module). Hit enter if you're not sure what to do: |
| }; |
| print do_var($var11); |
| } elsif ($debuglevel =~ 3) { |
| $var12 = qq{ |
| Enter any debug options you would like to use. Just enter parts after |
| -debugmsg. Default is +relay: |
| }; |
| print do_var($var12); |
| } |
| $debugopts=<STDIN>; |
| chomp $debugopts; |
| if ($debugopts=~/-debugmsg /) { |
| ($crap, $debugopts) = / /,$debugopts; |
| } |
| if ($debugopts=~/^\s*$/) { |
| $debugopts="+relay"; |
| } |
| } elsif ($debuglevel =~ 1) { |
| $debugopts = "+relay"; |
| } |
| if ($debuglevel > 1) { |
| if ($debuglevel =~ 2) { |
| $var13 = qq{ |
| How many trailing lines of debugging info do you want to include in the report |
| you're going to submit (First file)? If a developer asks you to include |
| the last 200 lines, enter 200 here. Default is 100, which is reached by |
| pressing enter. (If you're not sure, just hit enter): |
| }; |
| print do_var($var13); |
| } elsif ($debuglevel =~ 3) { |
| $var14 = qq{ |
| Enter how many lines of trailing debugging output you want in your nice |
| formatted report. Default is 100: |
| }; |
| print do_var($var14); |
| } |
| $lastnlines=<STDIN>; |
| chomp $lastnlines; |
| if ($lastnlines=~/^\s*$/) { |
| $lastnlines=100; |
| } |
| } elsif ($debuglevel =~ 1) { |
| $lastnlines=100; |
| } |
| if ($debuglevel > 1) { |
| $var15 = qq{ |
| Enter any extra options you want to pass to WINE. Strongly recommended you |
| include -managed: |
| }; |
| print do_var($var15); |
| $extraops=<STDIN>; |
| chomp $extraops; |
| } elsif ($debuglevel =~ 1) { |
| $extraops="-managed"; |
| } |
| print "Enter your distribution name (Example: Redhat 5.0):\n"; |
| $dist=<STDIN>; |
| chomp $dist; |
| if ($debuglevel > 1) { |
| if ($debuglevel =~ 2) { |
| $var16 = qq{ |
| When you ran ./configure to build wine, were there any special options |
| you used to do so (Example: --enable-dll)? If you didn't use any special |
| options or didn't compile WINE on your own, just hit enter: |
| }; |
| print do_var($var16); |
| } elsif ($debuglevel =~ 3) { |
| $var17 = qq{ |
| Enter any special options you used when running ./configure for WINE |
| (Default is none, use if you didn't compile wine yourself): |
| }; |
| print do_var($var17); |
| } |
| $configopts=<STDIN>; |
| chomp $configopts; |
| if ($configopts=~/\s*/) { |
| $configopts="None"; |
| } |
| } elsif ($debuglevel =~ 1) { |
| $configopts="None"; |
| } |
| if ($debuglevel > 1) { |
| if ($debuglevel =~ 2) { |
| $var18 = qq{ |
| Is your wine version CVS or from a .tar.gz file? As in... did you download it |
| off a website/ftpsite or did you/have you run cvs on it to update it? |
| For CVS: YYMMDD, where YY is the year (99), MM is the month (01), and DD |
| is the day (14), that you last updated it (Example: 990114). |
| For tar.gz: Just hit enter and I'll figure out the version for you: |
| }; |
| print do_var($var18); |
| } elsif ($debuglevel =~ 3) { |
| $var19 = qq{ |
| Is your wine from CVS? Enter the last CVS update date for it here, in |
| YYMMDD form (If it's from a tarball, just hit enter): |
| }; |
| print do_var($var19); |
| } |
| $winever=<STDIN>; |
| chomp $winever; |
| $winever=~s/ //g; |
| if ($winever=~/[0-9]+/) { |
| $winever .= " CVS"; |
| } |
| else { |
| $winever = `$wineloc -v 2>&1`; |
| chomp $winever; |
| } |
| } elsif ($debuglevel =~ 1) { |
| $winever=`$wineloc -v 2>&1`; |
| chomp $winever; |
| } |
| $gccver=`gcc -v 2>&1`; |
| ($leftover,$gccver) = split /\n/,$gccver; |
| chomp $gccver; |
| $cpu=`uname -m`; |
| chomp $cpu; |
| $kernelver=`uname -r`; |
| chomp $kernelver; |
| $ostype=`uname -s`; |
| chomp $ostype; |
| $wineneeds=`ldd $wineloc`; |
| if ($debuglevel < 3) { |
| $var20 = qq{ |
| OK, now I'm going to run WINE. I will close it for you once the wine |
| debugger comes up. NOTE: You won't see ANY debug messages. Don't |
| worry, they are being output to a file. Since there are so many, it's |
| not a good idea to have them all output to a terminal (Speed slowdown |
| mainly). |
| WINE will still run much slower than normal, because there will be so |
| many debug messages being output to file. |
| }; |
| print do_var($var20); |
| } elsif ($debuglevel =~ 3) { |
| $var21 = qq{ |
| OK, now it's time to run WINE. I will close down WINE for you after |
| the debugger is finished doing its thing. |
| }; |
| print do_var($var21); |
| } |
| print "Hit enter to start wine!\n"; |
| $blank=<STDIN>; |
| $dir=$program; |
| $dir=~m#(.*)/#; |
| $dir=$1; |
| chdir($dir); |
| system("echo quit|$wineloc -debugmsg $debugopts $extraops \"$program\" >& $dbgoutfile"); |
| $lastlines=`tail -n $lastnlines $dbgoutfile`; |
| system("gzip $dbgoutfile"); |
| open(OUTFILE,">$outfile"); |
| print OUTFILE <<EOM; |
| Auto-generated debug report by Wine Quick Debug Report Maker Thingy: |
| WINE Version: $winever |
| Windows Version: $winver |
| Distribution: $dist |
| Kernel Version: $kernelver |
| OS Type: $ostype |
| CPU: $cpu |
| GCC Version: $gccver |
| Program: $progname |
| Program Type: $progbits |
| Debug Options: -debugmsg $debugopts |
| Other Extra Commands Passed: $extraops |
| Extra ./configure Commands: $configopts |
| Wine Dependencies: |
| $wineneeds |
| Last $lastnlines lines of debug output follows: |
| $lastlines |
| I have a copy of the full debug report, if it is needed. |
| Thank you! |
| EOM |
| $var22 = qq{ |
| Great! We're finished making the debug report. Do whatever with it. The |
| filename for it is: |
| $outfile |
| The filename for the compressed full debug is: |
| $dbgoutfile.gz |
| Note that it is $dbgoutfile.gz, since I compressed it with gzip for you. |
| C Ya! |
| Adam the Jazz Guy |
| }; |
| print do_var($var22); |
| |
| |