#!/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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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 --version 2>&1`;
		chomp $winever;
	}
} elsif ($debuglevel =~ 1) {
	$winever=`$wineloc --version 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") || die "Error: Can't open $outfile: $!\n";
	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") || die "Error: Can't open $outfile: $!\n";
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);
