#!/usr/bin/perl -w
##Wine Quick Debug Report Maker Thingy (WQDRMK)
## Copyright (c) 1998-1999 Adam Sacarny jazz@cscweb.net ICQ: 19617831
##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.
##
## Improvements by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
## (c) 2000
##
## A few improovements and updates here and there
## Copyright 2003-2004 Ivan Leo Puoti
##
## 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
##
##Changelog:
##August 29, 1999 - Work around for debugger exit (or lack thereof)
##                - Should now put debugging output in correct place
##April 19, 1999 - Much nicer way to select Wine's location
##               - Option to disable creation of a debugging output
##               - Now places debugging output where it was started
##April 4, 1999 - Sanity check for file locations/wine strippedness
##              - Various code cleanups/fixes
##March 21, 1999 - Bash 2.0 STDERR workaround (Thanks Ryan Cumming!)
##March 1, 1999 - Check for stripped build
##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
use strict;
sub do_var($) {
	my $var=$_[0];
	$var =~ s/\t//g;
	return $var;
}
open STDERR, ">&SAVEERR"; open STDERR, ">&STDOUT";
$ENV{'SHELL'}="/bin/bash";
my $var0 = qq{
	What is 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 WINEDEBUG is, then
	    use this mode.
	2 - Makes a debug report that is more customizable (Example: you can
	    choose what WINEDEBUG 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)."\n";
my $debuglevel=0;
until ($debuglevel >= 1 and $debuglevel <= 3) {
	print "Enter your level of Wine expertise (1-3): ";
	$debuglevel=<STDIN>;
	chomp $debuglevel;
}

if ($debuglevel < 3) {
	my $var1 = qq{
	This program will make a debug report for Wine developers. It generates
	two files. The first one has everything asked for by the bugreports guide;
	the second has *all* of the debug output, which can go to thousands of
	lines.
	To (hopefully) get the bug fixed, report it to the project
	bug tracking system at http://bugs.winehq.org.
	Attach the first file to the bug description.
	Also include detailed description of the problem. The developers
	might ask you for "the last X lines from the report". If so, just
	provide the output of the following command:
	    gzip -d (output file) | tail -n (X) > outfile
	If you do not want to create one of the files, just specify "no file".
	};
	print do_var($var1);
} elsif ($debuglevel =~ 3) {
	my $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)
	If you do not want to create one of the files, just type in "no file"
	and I'll skip it.
	};
	print do_var($var2);
}

print "\nFilename for the formatted debug report: ";
my $outfile=<STDIN>;
chomp $outfile;
my $var23 = qq{
I don't think you typed in the right filename. Let's try again.
};
while ($outfile =~ /^(\s)*$/) {
	print do_var($var23);
	$outfile=<STDIN>;
	chomp $outfile;
}

print "Filename for full debug output: ";
my $dbgoutfile=<STDIN>;
chomp $dbgoutfile;
while ($dbgoutfile =~ /^(\s)*$/) {
	print do_var($var23);
	$dbgoutfile=<STDIN>;
	chomp $dbgoutfile;
}

my $var31 = qq{
Since you will only be creating the formatted report, I will need a
temporary place to put the full output.
You may not enter "no file" for this.
Enter the filename for the temporary file:
};
my $tmpoutfile;
if ($outfile ne "no file" and $dbgoutfile eq "no file") {
	print do_var($var31);
	$tmpoutfile=<STDIN>;
	chomp $tmpoutfile;
	while (($tmpoutfile =~ /^(\s)*$/) or ($tmpoutfile eq "no file")) {
		print do_var($var23);
		$tmpoutfile=<STDIN>;
		chomp $tmpoutfile;
	}
}

my $whereis=`whereis wine`;
chomp $whereis;
print "\nWhere is your copy of Wine located?\n\n";
$whereis =~ s/^wine\: //;
my @locations = split(/\s/,$whereis);
print "1 - Unlisted (I'll prompt you for a new location\n";
print "2 - Unsure (I'll use #3, that's probably it)\n";
my $i=2;
foreach my $location (@locations) {
	$i++;
	print "$i - $location\n";
}
print "\n";
sub select_wineloc() {
	my $wineloc;
	do
		{
		print "Enter the number that corresponds to Wine's location: ";
		$wineloc=<STDIN>;
		chomp $wineloc;
		}
	while ( ! ( $wineloc >=1 and $wineloc <= 2+@locations ) );
	if ($wineloc == 1) {
		my $var25 = qq{
		Enter the full path to wine (Example: /usr/bin/wine):
		};
		my $var26 = qq{
		Please enter the full path to wine. A full path is the
		directories leading up to a program's location, and then the
		program. For example, if you had the program "wine" in the
		directory "/usr/bin", you would type in "/usr/bin/wine". Now
		try:
		};
		print do_var($var25) if $debuglevel == 3;
		print do_var($var26) if $debuglevel < 3;
		$wineloc=<STDIN>;
		chomp $wineloc;
		while ($wineloc =~ /^(\s)*$/) {
			print do_var($var23);
			$wineloc=<STDIN>;
			chomp $wineloc;
		}
	}
	elsif ($wineloc == 2) {
		$wineloc=$locations[0];
	}
	else {
		$wineloc=$locations[$wineloc-3];
	}
	return $wineloc;
}
my $wineloc=select_wineloc();
print "Checking if $wineloc is stripped...\n";
my $ifstrip = `nm $wineloc 2>&1`;
while ($ifstrip =~ /no symbols/) {
	my $var24 = qq{
	Your wine is stripped! Stripped versions make useless debug reports
	If you have another location of wine that may be used, enter it now.
	Otherwise, hit control-c and download an unstripped (Debug) version, then re-run
	this script.
	};
	print do_var($var24);
	$wineloc=select_wineloc();
	$ifstrip = `nm $wineloc 2>&1`;
}
while ($ifstrip =~ /not recognized/) {
	my $var26 = qq{
	Looks like you gave me something that isn't a Wine binary (It could be a
	text file). Try again.
	};
	print do_var($var26);
	$wineloc=select_wineloc();
	print "Checking if $wineloc is stripped...\n";
	$ifstrip = `nm $wineloc 2>&1`;
}

print "\nWhat version of Windows are you using with Wine?\n\n".
      "0 - None\n".
      "1 - Windows 3.x\n".
      "2 - Windows 95\n".
      "3 - Windows 98\n".
      "4 - Windows ME\n".
      "5 - Windows NT 3.5x\n".
      "6 - Windows NT4.x\n".
      "7 - Windows 2000\n".
      "8 - Windows XP\n".
      "9 - Windows Server 2003\n".
      "10 - Other\n\n";
my $winver;
do
	{
	print "Enter the number that corresponds to your Windows version: ";
	$winver=<STDIN>;
	chomp $winver;
	}
until ($winver >= 0 and $winver <= 10);
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 ME";
} elsif ($winver =~ 5) {
	$winver="Windows NT 3.5x";
} elsif ($winver =~ 6) {
	$winver="Windows NT 4.x";
} elsif ($winver =~ 7) {
	$winver="Windows 2000";
} elsif ($winver =~ 8) {
	$winver="Windows XP";
} elsif ($winver =~ 9) {
	$winver="Windows Server 2003";
} elsif ($winver =~ 10) {
	print "What version of Windows are you using? ";
	$winver=<STDIN>;
	chomp $winver;
}
if ($debuglevel < 3) {
	my $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) {
	my $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);
}
my $program=<STDIN>;
chomp $program;
while ($program =~ /^(\s)*$/) {
	print do_var($var23);
	$program=<STDIN>;
	chomp $program;
}
$program =~ s/\"//g;
my $var9 = qq{
Enter the name, version, and manufacturer of the program (Example:
Netscape Navigator 4.5):
};
print do_var($var9);
my $progname=<STDIN>;
chomp $progname;
my $var10 = qq{
Enter 1 if your program is 16 bit (Windows 3.x), 2 if your program is 32
bit (Windows 95, NT3.x and up), or 3 if you are unsure:
};
print do_var($var10);
my $progbits=<STDIN>;
chomp $progbits;
until ($progbits == 1 or $progbits == 2 or $progbits == 3) {
	print "You must enter 1, 2 or 3!\n";
	$progbits=<STDIN>;
	chomp $progbits
}
if ($progbits =~ 1) {
	$progbits = "Win16";
} elsif ($progbits =~ 2) {
	$progbits = "Win32";
} else {
	$progbits = "Unsure";
}
my $debugopts;
if ($debuglevel > 1) {
	if ($debuglevel =~ 2) {
		my $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 WINEDEBUG=+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) {
		my $var12 = qq{
		Enter any debug options you would like to use. Just enter parts after
		WINEDEBUG. Default is +relay:
		};
		print do_var($var12);
	}
	$debugopts=<STDIN>;
	chomp $debugopts;
	if ($debugopts =~ /--debugmsg /) {
		$debugopts = (split / /,$debugopts)[1];
	}
	if ($debugopts =~ /WINEDEBUG= /) {
		$debugopts = (split / /,$debugopts)[1];
	}
	if ($debugopts =~ /^\s*$/) {
		$debugopts="+relay";
	}
} elsif ($debuglevel =~ 1) {
	$debugopts = "+relay";
}
my $lastnlines;
if ($debuglevel > 1) {
	if ($debuglevel =~ 2) {
		my $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 15000 lines, enter 15000 here. Default is 3000, which is reached by
		pressing enter. (If you're not sure, just hit enter):
		};
		print do_var($var13);
	} elsif ($debuglevel =~ 3) {
		my $var14 = qq{
		Enter how many lines of trailing debugging output you want in your nice
		formatted report. Default is 3000:
		};
		print do_var($var14);
	}
	$lastnlines=<STDIN>;
	chomp $lastnlines;
	if ($lastnlines =~ /^\s*$/) {
	$lastnlines=3000;
	}
} elsif ($debuglevel =~ 1) {
	$lastnlines=3000;
}
my $extraops;
if ($debuglevel > 1) {
	my $var15 = qq{
	Enter any extra options you want to pass to Wine.
	};
	print do_var($var15);
	$extraops=<STDIN>;
	chomp $extraops;
} elsif ($debuglevel =~ 1) {
	$extraops=" ";
}

print "\nEnter the name of your distribution (Example: RedHat 9.0): ";
my $dist=<STDIN>;
chomp $dist;

my $configopts;
if ($debuglevel > 1) {
	if ($debuglevel =~ 2) {
		my $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 yourself, just hit enter:
		};
		print do_var($var16);
	} elsif ($debuglevel =~ 3) {
		my $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";
}
my $winever;
if ($debuglevel > 1) {
	if ($debuglevel =~ 2) {
		my $var18 = qq{
		Is your Wine version CVS or from a .tar.gz or RPM 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: YYYYMMDD, where YYYY is the year (2004), MM is the month (03), and DD
		is the day (09), that you last updated it (Example: 20040309).
		For tar.gz and RPM: Just hit enter and I'll figure out the version for you:
		};
		print do_var($var18);
	} elsif ($debuglevel =~ 3) {
		my $var19 = qq{
		Is your Wine from CVS? Enter the last CVS update date for it here, in
		YYYYMMDD form (If it's from a tarball or RPM, just hit enter):
		};
		print do_var($var19);
	}
	$winever=<STDIN>;
	chomp $winever;
	if ($winever =~ /[0-9]+/) {
		$winever .= " CVS";
	}
	else {
		$winever = `$wineloc -v 2>&1`;
		chomp $winever;
	}
} elsif ($debuglevel =~ 1) {
	$winever=`$wineloc -v 2>&1`;
	chomp $winever;
}
my $gccver=`gcc -v 2>&1`;
$gccver = (split /\n/,$gccver)[1];
chomp $gccver;
my $cpu=`uname -m`;
chomp $cpu;
my $kernelver=`uname -r`;
chomp $kernelver;
my $ostype=`uname -s`;
chomp $ostype;
my $wineneeds=`ldd $wineloc`;
if ($debuglevel < 3) {
	my $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) {
	my $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";
<STDIN>;
my $dir=$program;
$dir=~m#(.*)/#;
$dir=$1;
use Cwd;
my $nowdir=getcwd;
chdir($dir);
if (!($outfile =~ /\//) and $outfile ne "no file") {
	$outfile = "$nowdir/$outfile";
}
if (!($dbgoutfile =~ /\//) and $dbgoutfile ne "no file") {
	$dbgoutfile = "$nowdir/$dbgoutfile";
}
if (!($tmpoutfile =~ /\//)) {
	$tmpoutfile = "$nowdir/$tmpoutfile";
}
$SIG{CHLD}=$SIG{CLD}=sub { wait };
my $lastlines;
sub generate_outfile();
if ($dbgoutfile ne "no file") {
	unlink("$dbgoutfile");
	my $pid=fork();
	if ($pid) {
	}
	elsif (defined $pid) {
		close(0);close(1);close(2);
		exec "echo quit | WINEDEBUG=$debugopts $wineloc $extraops \"$program\" > $dbgoutfile 2>&1";
	}
	else {
		die "couldn't fork";
	}
	while (kill(0, $pid)) {
		sleep(5);
		my $last = `tail -n 5 $dbgoutfile | grep Wine-dbg`;
		if ($last =~ /Wine-dbg/) {
			kill "TERM", $pid;
			last;
		}
	}
	if ($outfile ne "no file") {
		$lastlines=`tail -n $lastnlines $dbgoutfile`;
		system("gzip $dbgoutfile");
		generate_outfile();
	}
	else {
		system("gzip $dbgoutfile");
	}
}
elsif ($outfile ne "no file" and $dbgoutfile eq "no file") {
	my $pid=fork();
	if ($pid) {
	}
	elsif (defined $pid) {
		close(0);close(1);close(2);
		exec "echo quit | WINEDEBUG=$debugopts $wineloc $extraops \"$program\" 2>&1| tee $tmpoutfile | tail -n $lastnlines > $outfile";
	}
	else {
		die "couldn't fork";
	}
	print "$outfile $tmpoutfile";
	while (kill(0, $pid)) {
		sleep(5);
		my $last = `tail -n 5 $tmpoutfile | grep Wine-dbg`;
		if ($last =~ /Wine-dbg/) {
			kill "TERM", $pid;
			last;
		}
	}
	unlink($tmpoutfile);
	open(OUTFILE, "$outfile");
	while (<OUTFILE>) {
		$lastlines .= $_;
	}
	close(OUTFILE);
	unlink($outfile);
	generate_outfile();
}
else {
	my $var27 = qq{
	I guess you don't want me to make any debugging output. I'll send
	it to your terminal. This will be a *lot* of output -- hit enter to
	continue, control-c to quit.
	Repeat: this will be a lot of output!
	};
	print do_var($var27);
	<STDIN>;
	system("$wineloc WINEDEBUG=$debugopts $extraops \"$program\"");
}
sub generate_outfile() {
open(OUTFILE,">$outfile");
print OUTFILE <<EOM;
Auto-generated debug report by Wine Quick Debug Report Maker Tool:
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:               WINEDEBUG=$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
}
my $var22 = qq{
Great! We're finished making the debug report. Please go to http://bugs.winehq.org
and enter it as a new bug. Check that nobody has already reported the same bug!
};
my $var28 = qq{
The filename for the formatted report is:
$outfile
};
my $var29 = qq{
The filename for the compressed full debug is:
$dbgoutfile.gz
Note that it is $dbgoutfile.gz, since I compressed it with gzip for you.
};
my $var30 = qq{
If you have any problems with this bug reporting tool,
please submit a bug report to Wine bugtracking system at http://bugs.winehq.org
or tell the Wine newsgroup (comp.emulators.ms-windows.wine).
};
print do_var($var22);
print do_var($var28) if $outfile ne "no file";
print do_var($var29) if $dbgoutfile ne "no file";
print do_var($var30);
