Andy Dougherty's configuration patches (Config_63-01 up to 04).
[p5sagit/p5-mst-13.2.git] / utils / perlbug.PL
index f136372..724df6b 100644 (file)
@@ -9,25 +9,64 @@ use File::Basename qw(&basename &dirname);
 # %Config entries.  Thus you write
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
+#  $perlpath
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
 
 open OUT,">$file" or die "Can't create $file: $!";
 
+# extract patchlevel.h information
+
+open PATCH_LEVEL, "<../patchlevel.h" or die "Can't open patchlevel.h: $!";
+
+my $patchlevel_date = (stat PATCH_LEVEL)[9];
+
+while (<PATCH_LEVEL>) {
+    last if $_ =~ /^\s*static\s+char.*?local_patches\[\]\s*=\s*{\s*$/;
+};
+
+my @patches;
+while (<PATCH_LEVEL>) {
+    last if /^\s*}/;
+    chomp;
+    s/^\s+,?"?//;
+    s/"?,?$//;
+    s/(['\\])/\\$1/g;
+    push @patches, $_ unless $_ eq 'NULL';
+};
+my $patch_desc = "'" . join("',\n\t'", @patches) . "'";
+my @patch_tags = map { my $p=$_; $p=~s/\s.*//; $p } @patches;
+my $patch_tags = join " ", map { "+$_" } @patch_tags;
+$patch_tags .= " " if $patch_tags;
+
+close PATCH_LEVEL;
+
+# TO DO (prehaps): store/embed $Config::config_sh into perlbug. When perlbug is
+# used, compare $Config::config_sh with the stored version. If they differ then
+# append a list of individual differences to the bug report.
+
+
 print "Extracting $file (with variable substitutions)\n";
 
 # In this section, perl variables will be expanded during extraction.
 # You can use $Config{...} to use Configure variables.
 
 print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
-    eval 'exec perl -S \$0 "\$@"'
-       if 0;
+$Config{startperl}
+    eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
+       if \$running_under_some_shell;
+
+my \$config_tag1 = '$] - $Config{cf_time}';
+
+my \$patchlevel_date = $patchlevel_date;
+my \$patch_tags = '$patch_tags';
+my \@patches = (
+       $patch_desc
+);
 !GROK!THIS!
 
 # In the following, perl variables are not expanded during extraction.
@@ -50,7 +89,7 @@ use strict;
 sub paraprint;
 
 
-my($Version) = "1.14";
+my($Version) = "1.20";
 
 # Changed in 1.06 to skip Mail::Send and Mail::Util if not available.
 # Changed in 1.07 to see more sendmail execs, and added pipe output.
@@ -66,19 +105,33 @@ my($Version) = "1.14";
 #                 send mail
 # Changed in 1.14 to make the prompts a little more clear on providing
 #                 helpful information. Also let file read fail gracefully.
-
-# TODO: Allow the user to re-name the file on mail failure, and
+# Changed in 1.15 to add warnings to stop people using perlbug for non-bugs.
+#                 Also report selected environment variables.
+# Changed in 1.16 to include @INC, and allow user to re-edit if no changes.
+# Changed in 1.17 Win32 support added.  GSAR 97-04-12
+# Changed in 1.18 add '-ok' option for reporting build success. CFR 97-06-18
+# Changed in 1.19 '-ok' default not '-v'
+#                 add local patch information
+#                 warn on '-ok' if this is an old system; add '-okay'
+# Changed in 1.20 Added patchlevel.h reading and version/config checks
+
+# TODO: - Allow the user to re-name the file on mail failure, and
 #       make sure failure (transmission-wise) of Mail::Send is 
 #       accounted for.
+#       - Test -b option
 
 my( $file, $usefile, $cc, $address, $perlbug, $testaddress, $filename,
     $subject, $from, $verbose, $ed, 
-    $fh, $me, $Is_VMS, $msg, $body, $andcc );
+    $fh, $me, $Is_MSWin32, $Is_VMS, $msg, $body, $andcc, %REP, $ok);
+
+my $config_tag2 = "$] - $Config{cf_time}";
 
 Init();
 
 if($::opt_h) { Help(); exit; }
 
+if($::opt_d) { Dump(*STDOUT); exit; }
+
 if(!-t STDIN) {
        paraprint <<EOF;
 Please use perlbug interactively. If you want to 
@@ -87,7 +140,7 @@ EOF
        die "\n";
 }
 
-if($::opt_d or !-t STDOUT) { Dump(*STDOUT); exit; }
+if(!-t STDOUT) { Dump(*STDOUT); exit; }
 
 Query();
 Edit() unless $usefile;
@@ -100,9 +153,10 @@ sub Init {
  
        # -------- Setup --------
 
+       $Is_MSWin32 = $^O eq 'MSWin32';
        $Is_VMS = $^O eq 'VMS';
 
-       getopts("dhva:s:b:f:r:e:SCc:t");
+       getopts("dhva:s:b:f:r:e:SCc:to:");
        
 
        # This comment is needed to notify metaconfig that we are
@@ -113,6 +167,7 @@ sub Init {
        
        # perlbug address
        $perlbug = 'perlbug@perl.com';
+
        
        # Test address
        $testaddress = 'perlbug-test@perl.com';
@@ -120,13 +175,6 @@ sub Init {
        # Target address
        $address = $::opt_a || ($::opt_t ? $testaddress : $perlbug);
 
-       # Possible administrator addresses, in order of confidence
-       # (Note that cf_email is not mentioned to metaconfig, since
-       # we don't really want it. We'll just take it if we have to.)
-       $cc = ($::opt_C ? "" : (
-               $::opt_c || $::Config{perladmin} || $::Config{cf_email} || $::Config{cf_by}
-               ));
-       
        # Users address, used in message and in Reply-To header
        $from = $::opt_r || "";
 
@@ -147,12 +195,55 @@ sub Init {
 
        # Editor
        $ed = ( $::opt_e || $ENV{VISUAL} || $ENV{EDITOR} || $ENV{EDIT} || 
-                     ($Is_VMS ? "edit/tpu" : "vi")
+                     ($Is_VMS ? "edit/tpu" : $Is_MSWin32 ? "notepad" : "vi")
              );
              
+        # OK - send "OK" report for build on this system
+        $ok = 0;
+       if ( $::opt_o ) {
+           if ( $::opt_o eq 'k' or $::opt_o eq 'kay' ) {
+                my $age = time - $patchlevel_date;
+                if ( $::opt_o eq 'k' and $age > 60 * 24 * 60 * 60 ) {
+                    my $date = localtime $patchlevel_date;
+                    print <<"EOF";
+\"perlbug -ok\" does not report on Perl versions which are more than
+60 days old.  This Perl version was constructed on $date.
+If you really want to report this, use \"perlbug -okay\".
+EOF
+                    exit();
+                };
+               # force these options
+               $::opt_S = 1; # don't prompt for send
+               $::opt_C = 1; # don't send a copy to the local admin
+               $::opt_s = 1;
+               $subject = "OK: perl $] ${patch_tags}on"
+                         ." $::Config{'archname'} $::Config{'osvers'} $subject";
+               $::opt_b = 1;
+               $body    = "Perl reported to build OK on this system.\n";
+               $ok = 1;
+           }
+           else {
+               Help();
+               exit();
+           }
+       }
       
+       # Possible administrator addresses, in order of confidence
+       # (Note that cf_email is not mentioned to metaconfig, since
+       # we don't really want it. We'll just take it if we have to.)
+        #
+        # This has to be after the $ok stuff above because of the way
+        # that $::opt_C is forced.
+       $cc = ($::opt_C ? "" : (
+               $::opt_c || $::Config{perladmin} || $::Config{cf_email} || $::Config{cf_by}
+               ));
+       
        # My username
-       $me = getpwuid($<);
+       $me = ( $Is_MSWin32 
+               ? $ENV{'USERNAME'} 
+               : ( $^O eq 'os2' 
+                   ? $ENV{'USER'} || $ENV{'LOGNAME'} 
+                   : eval { getpwuid($<) }) ); # May be missing
 
 }
 
@@ -160,12 +251,21 @@ sub Init {
 sub Query {
 
        # Explain what perlbug is
-       
+    if ( ! $ok ) {
        paraprint <<EOF;
-This program provides an easy way to create a message reporting a bug in
-perl, and e-mail it to $address.
+This program provides an easy way to create a message reporting a bug
+in perl, and e-mail it to $address.  It is *NOT* intended for
+sending test messages or simply verifying that perl works, *NOR* is it
+intended for reporting bugs in third-party perl modules.  It is *ONLY*
+a means of reporting verifiable problems with the core perl distribution,
+and any solutions to such problems, to the people who maintain perl.
+
+If you're just looking for help with perl, try posting to the Usenet
+newsgroup comp.lang.perl.misc.  If you're looking for help with using
+perl with CGI, try posting to comp.infosystems.www.programming.cgi.
 
 EOF
+    }
 
 
        # Prompt for subject of message, if needed
@@ -173,7 +273,8 @@ EOF
                paraprint <<EOF;
 First of all, please provide a subject for the 
 message. It should be a concise description of 
-the bug or problem.
+the bug or problem. "perl bug" or "perl problem"
+is not a concise description.
 
 EOF
                print "Subject: ";
@@ -201,12 +302,11 @@ EOF
                
                if($::HaveUtil) {
                        $domain = Mail::Util::maildomain();
-               } elsif ($Is_VMS) {
+               } elsif ($Is_MSWin32) {
+                       $domain = $ENV{'USERDOMAIN'};
+               } else {
                        require Sys::Hostname;
                        $domain = Sys::Hostname::hostname();
-               } else {
-                       $domain = `hostname`.".".`domainname`;
-                       $domain =~ s/[\r\n]+//g;
                }
            
            my($guess);
@@ -224,6 +324,7 @@ EOF
                $guess = $ENV{"REPLY-TO"} if defined($ENV{'REPLY-TO'});
        
                if( $guess ) {
+                   if ( ! $ok ) {
                        paraprint <<EOF;
 
 
@@ -231,6 +332,7 @@ Your e-mail address will be useful if you need to be contacted. If the
 default shown is not your full internet e-mail address, please correct it.
 
 EOF
+                    }
                } else {
                        paraprint <<EOF;
 
@@ -239,12 +341,20 @@ your full internet e-mail address here.
 
 EOF
                }
-               print "Your address [$guess]: ";
-       
-               $from = <>;
-               chop $from;
-       
-               if($from eq "") { $from = $guess }
+
+               if ( $ok && $guess ne '' ) {
+                   # use it
+                   $from = $guess;
+               }
+               else {
+                   # verify it
+                   print "Your address [$guess]: ";
+                   
+                   $from = <>;
+                   chop $from;
+                   
+                   if($from eq "") { $from = $guess }
+               }
        
        }
        
@@ -334,8 +444,10 @@ EOF
        # Generate scratch file to edit report in
        
        {
-       my($dir) = $Is_VMS ? 'sys$scratch:' : '/tmp/';
+       my($dir) = ($Is_VMS ? 'sys$scratch:' :
+                   (($Is_MSWin32 && $ENV{'TEMP'}) ? $ENV{'TEMP'} : '/tmp/'));
        $filename = "bugrep0$$";
+       $dir .= "\\" if $Is_MSWin32 and $dir !~ m|[\\/]$|;
        $filename++ while -e "$dir$filename";
        $filename = "$dir$filename";
        }
@@ -384,8 +496,10 @@ EOF
 
        open(REP,">$filename");
 
+       my $reptype = $ok ? "success" : "bug";
+
        print REP <<EOF;
-This is a bug report for perl from $from,
+This is a $reptype report for perl from $from,
 generated with the help of perlbug $Version running under perl $].
 
 EOF
@@ -399,21 +513,43 @@ EOF
                }
                close(F);
        } else {
-               print REP "[Please enter your report here]\n";
+               print REP <<EOF;
+
+-----------------------------------------------------------------
+[Please enter your report here]
+
+
+
+[Please do not change anything below this line]
+-----------------------------------------------------------------
+EOF
        }
        
        Dump(*REP);
        close(REP);
 
+       # read in the report template once so that
+       # we can track whether the user does any editing.
+       # yes, *all* whitespace is ignored.
+        open(REP, "<$filename");
+        while (<REP>) {
+               s/\s+//g;
+               $REP{$_}++;
+       }
+       close(REP);
+
 }
 
 sub Dump {
        local(*OUT) = @_;
        
-       print OUT <<EOF;
-
+       print REP "\n---\n";
 
+       print REP "This perlbug was built using Perl $config_tag1\n",
+                 "It is being executed now by  Perl $config_tag2.\n\n"
+           if $config_tag2 ne $config_tag1;
 
+       print OUT <<EOF;
 Site configuration information for perl $]:
 
 EOF
@@ -424,6 +560,34 @@ EOF
 
        print OUT Config::myconfig;
 
+       if (@patches) {
+               print OUT join "\n\t", "Locally applied patches:", @patches;
+                print OUT "\n";
+        };
+
+       print OUT <<EOF;
+
+---
+\@INC for perl $]:
+EOF
+        for my $i (@INC) {
+           print OUT "\t$i\n";
+        }
+
+       print OUT <<EOF;
+
+---
+Environment for perl $]:
+EOF
+        for my $env (sort
+                    (qw(PATH LD_LIBRARY_PATH
+                        LANG PERL_BADLANG
+                        SHELL HOME LOGDIR),
+                     grep { /^(?:PERL|LC_)/ } keys %ENV)) {
+           print OUT "    $env",
+                      exists $ENV{$env} ? "=$ENV{$env}" : ' (unset)',
+                     "\n";
+       }
        if($verbose) {
                print OUT "\nComplete configuration data for perl $]:\n\n";
                my($value);
@@ -457,8 +621,8 @@ EOF
        
 tryagain:
        if(!$usefile and !$body) {
-               my($sts) = system("$ed $filename");
-               if( $Is_VMS ? !($sts & 1) : $sts ) {
+               my $sts = system("$ed $filename");
+               if($sts) {
                        #print "\nUnable to run editor!\n";
                        paraprint <<EOF;
 
@@ -485,6 +649,43 @@ EOF
                        }
                } 
        }
+
+        return if $ok;
+        # Check that we have a report that has some, eh, report in it.
+
+        my $unseen = 0;
+
+        open(REP, "<$filename");
+       # a strange way to check whether any significant editing
+       # have been done: check whether any new non-empty lines
+       # have been added. Yes, the below code ignores *any* space
+       # in *any* line.
+        while (<REP>) {
+           s/\s+//g;
+           $unseen++ if ($_ ne '' and not exists $REP{$_});
+       }
+
+       while ($unseen == 0) {
+           paraprint <<EOF;
+
+I am sorry but it looks like you did not report anything.
+
+EOF
+               print "Action (Retry Edit/Cancel) ";
+               my ($action) = scalar(<>);
+               if ($action =~ /^[re]/i) { # <R>etry <E>dit
+                       goto tryagain;
+               } elsif ($action =~ /^[cq]/i) { # <C>ancel, <Q>uit
+                       Cancel();
+               }
+        }
+
+}
+
+sub Cancel {
+    1 while unlink($filename);  # remove all versions under VMS
+    print "\nCancelling.\n";
+    exit(0);
 }
 
 sub NowWhat {
@@ -555,9 +756,7 @@ EOF
                                Edit();
                                #system("$ed $filename");
                        } elsif( $action =~ /^[qc]/i ) { # <C>ancel, <Q>uit
-                               1 while unlink($filename);  # remove all versions under VMS
-                               print "\nCancelling.\n";
-                               exit(0);
+                               Cancel();
                        } elsif( $action =~ /^s/ ) {
                                paraprint <<EOF;
 
@@ -589,6 +788,7 @@ sub Send {
        
                $fh->close;  
        
+               print "\nMessage sent.\n";
        } else {
                if ($Is_VMS) {
                        if ( ($address =~ /@/ and $address !~ /^\w+%"/) or
@@ -602,7 +802,7 @@ sub Send {
                        }
                        $subject =~ s/"/""/g; $address =~ s/"/""/g; $cc =~ s/"/""/g;
                        my($sts) = system(qq[mail/Subject="$subject" $filename. "$address","$cc"]);
-                       if (!($sts & 1)) { die "Can't spawn off mail\n\t(leaving bug report in $filename): $sts\n;" }
+                       if ($sts) { die "Can't spawn off mail\n\t(leaving bug report in $filename): $sts\n;" }
                } else {
                        my($sendmail) = "";
                        
@@ -610,19 +810,31 @@ sub Send {
                        {
                                $sendmail = $_, last if -e $_;
                        }
+
+                       if ($^O eq 'os2' and $sendmail eq "") {
+                         my $path = $ENV{PATH};
+                         $path =~ s:\\:/: ;
+                         my @path = split /$Config{path_sep}/, $path;
+                         for (@path) {
+                           $sendmail = "$_/sendmail", last 
+                             if -e "$_/sendmail";
+                           $sendmail = "$_/sendmail.exe", last 
+                             if -e "$_/sendmail.exe";
+                         }
+                       }
                        
-                       paraprint <<"EOF" and die "\n" if $sendmail eq "";
+                       paraprint(<<"EOF"), die "\n" if $sendmail eq "";
                        
 I am terribly sorry, but I cannot find sendmail, or a close equivalent, and
 the perl package Mail::Send has not been installed, so I can't send your bug
-report. We apologize for the inconveniencence.
+report. We apologize for the inconvenience.
 
 So you may attempt to find some way of sending your message, it has
 been left in the file `$filename'.
 
 EOF
                        
-                       open(SENDMAIL,"|$sendmail -t");
+                       open(SENDMAIL,"|$sendmail -t") || die "'|$sendmail -t' failed: $|";
                        print SENDMAIL "To: $address\n";
                        print SENDMAIL "Subject: $subject\n";
                        print SENDMAIL "Cc: $cc\n" if $cc;
@@ -632,12 +844,14 @@ EOF
                        while(<REP>) { print SENDMAIL $_ }
                        close(REP);
                        
-                       close(SENDMAIL);
+                       if (close(SENDMAIL)) {
+                         print "\nMessage sent.\n";
+                       } else {
+                         warn "\nSendmail returned status '",$?>>8,"'\n";
+                       }
                }
        
        }
-       
-       print "\nMessage sent.\n";
 
        1 while unlink($filename);  # remove all versions under VMS
 
@@ -652,7 +866,7 @@ be needed.
        
 Usage:
 $0  [-v] [-a address] [-s subject] [-b body | -f file ]
-    [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t]
+    [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
     
 Simplest usage:  run "$0", and follow the prompts.
 
@@ -676,6 +890,11 @@ Options:
   -d   Data mode (the default if you redirect or pipe output.) 
         This prints out your configuration data, without mailing
         anything. You can use this with -v to get more complete data.
+  -ok   Report successful build on this system to perl porters
+        (use alone or with -v). Only use -ok if *everything* was ok.
+        If there were *any* problems at all then don't use -ok.
+  -okay As -ok but allow report from old builds.
+  -h    Print this help message. 
   
 EOF
 }
@@ -696,8 +915,233 @@ format STDOUT =
 ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
 $_
 .
+
+__END__
+
+=head1 NAME
+
+perlbug - how to submit bug reports on Perl
+
+=head1 SYNOPSIS
+
+B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
+S<[ B<-b> I<body> | B<-f> I<file> ]> S<[ B<-r> I<returnaddress> ]>
+S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
+S<[ B<-S> ]> S<[ B<-t> ]>  S<[ B<-d> ]>  S<[ B<-h> ]>
+
+B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]> S<[ B<-ok> | B<okay> ]>
+
+=head1 DESCRIPTION
+
+A program to help generate bug reports about perl or the modules that
+come with it, and mail them. 
+
+If you have found a bug with a non-standard port (one that was not part
+of the I<standard distribution>), a binary distribution, or a
+non-standard module (such as Tk, CGI, etc), then please see the
+documentation that came with that distribution to determine the correct
+place to report bugs.
+
+C<perlbug> is designed to be used interactively. Normally no arguments
+will be needed.  Simply run it, and follow the prompts.
+
+If you are unable to run B<perlbug> (most likely because you don't have
+a working setup to send mail that perlbug recognizes), you may have to
+compose your own report, and email it to B<perlbug@perl.com>.  You might
+find the B<-d> option useful to get summary information in that case.
+
+In any case, when reporting a bug, please make sure you have run through
+this checklist:
+
+=over 4
+
+=item What version of perl you are running?
+
+Type C<perl -v> at the command line to find out.
+
+=item Are you running the latest released version of perl?
+
+Look at http://www.perl.com/ to find out.  If it is not the latest
+released version, get that one and see whether your bug has been
+fixed.  Note that bug reports about old versions of perl, especially
+those prior to the 5.0 release, are likely to fall upon deaf ears.
+You are on your own if you continue to use perl1 .. perl4.
+
+=item Are you sure what you have is a bug?
+
+A significant number of the bug reports we get turn out to be documented
+features in perl.  Make sure the behavior you are witnessing doesn't fall
+under that category, by glancing through the documentation that comes
+with perl (we'll admit this is no mean task, given the sheer volume of
+it all, but at least have a look at the sections that I<seem> relevant).
+
+Be aware of the familiar traps that perl programmers of various hues
+fall into.  See L<perltrap>.
+
+Try to study the problem under the perl debugger, if necessary.
+See L<perldebug>.
+
+=item Do you have a proper test case?
+
+The easier it is to reproduce your bug, the more likely it will be
+fixed, because if no one can duplicate the problem, no one can fix it.
+A good test case has most of these attributes: fewest possible number
+of lines; few dependencies on external commands, modules, or
+libraries; runs on most platforms unimpeded; and is self-documenting.
+
+A good test case is almost always a good candidate to be on the perl
+test suite.  If you have the time, consider making your test case so
+that it will readily fit into the standard test suite.
+
+=item Can you describe the bug in plain English?
+
+The easier it is to understand a reproducible bug, the more likely it
+will be fixed.  Anything you can provide by way of insight into the
+problem helps a great deal.  In other words, try to analyse the
+problem to the extent you feel qualified and report your discoveries.
+
+=item Can you fix the bug yourself?
+
+A bug report which I<includes a patch to fix it> will almost
+definitely be fixed.  Use the C<diff> program to generate your patches
+(C<diff> is being maintained by the GNU folks as part of the B<diffutils>
+package, so you should be able to get it from any of the GNU software
+repositories).  If you do submit a patch, the cool-dude counter at
+perlbug@perl.com will register you as a savior of the world.  Your
+patch may be returned with requests for changes, or requests for more
+detailed explanations about your fix.
+
+Here are some clues for creating quality patches: Use the B<-c> or
+B<-u> switches to the diff program (to create a so-called context or
+unified diff).  Make sure the patch is not reversed (the first
+argument to diff is typically the original file, the second argument
+your changed file).  Make sure you test your patch by applying it with
+the C<patch> program before you send it on its way.  Try to follow the
+same style as the code you are trying to patch.  Make sure your patch
+really does work (C<make test>, if the thing you're patching supports
+it).
+
+=item Can you use C<perlbug> to submit the report?
+
+B<perlbug> will, amongst other things, ensure your report includes
+crucial information about your version of perl.  If C<perlbug> is unable
+to mail your report after you have typed it in, you may have to compose
+the message yourself, add the output produced by C<perlbug -d> and email
+it to B<perlbug@perl.com>.  If, for some reason, you cannot run
+C<perlbug> at all on your system, be sure to include the entire output
+produced by running C<perl -V> (note the uppercase V).
+
+=back
+
+Having done your bit, please be prepared to wait, to be told the bug
+is in your code, or even to get no reply at all.  The perl maintainers
+are busy folks, so if your problem is a small one or if it is difficult
+to understand or already known, they may not respond with a personal reply.
+If it is important to you that your bug be fixed, do monitor the
+C<Changes> file in any development releases since the time you submitted
+the bug, and encourage the maintainers with kind words (but never any
+flames!).  Feel free to resend your bug report if the next released
+version of perl comes out and your bug is still present.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-a>
+
+Address to send the report to.  Defaults to `perlbug@perl.com'.
+
+=item B<-b>
+
+Body of the report.  If not included on the command line, or
+in a file with B<-f>, you will get a chance to edit the message.
+
+=item B<-C>
+
+Don't send copy to administrator.
+
+=item B<-c>
+
+Address to send copy of report to.  Defaults to the address of the
+local perl administrator (recorded when perl was built).
+
+=item B<-d>
+
+Data mode (the default if you redirect or pipe output).  This prints out
+your configuration data, without mailing anything.  You can use this
+with B<-v> to get more complete data.
+
+=item B<-e>
+
+Editor to use. 
+
+=item B<-f>
+
+File containing the body of the report.  Use this to quickly send a
+prepared message.
+
+=item B<-h>
+
+Prints a brief summary of the options.
+
+=item B<-ok>
+
+Report successful build on this system to perl porters. Forces B<-S>
+and B<-C>. Forces and supplies values for B<-s> and B<-b>. Only
+prompts for a return address if it cannot guess it (for use with
+B<make>). Honors return address specified with B<-r>.  You can use this
+with B<-v> to get more complete data.   Only makes a report if this
+system is less than 60 days old.
+
+=item B<-okay>
+
+As B<-ok> except it will report on older systems.
+
+=item B<-r>
+
+Your return address.  The program will ask you to confirm its default
+if you don't use this option.
+
+=item B<-S>
+
+Send without asking for confirmation.
+
+=item B<-s>
+
+Subject to include with the message.  You will be prompted if you don't
+supply one on the command line.
+
+=item B<-t>
+
+Test mode.  The target address defaults to `perlbug-test@perl.com'.
+
+=item B<-v>
+
+Include verbose configuration data in the report.
+
+=back
+
+=head1 AUTHORS
+
+Kenneth Albanowski (E<lt>kjahds@kjahds.comE<gt>), subsequently I<doc>tored
+by Gurusamy Sarathy (E<lt>gsar@umich.eduE<gt>), Tom Christiansen
+(E<lt>tchrist@perl.comE<gt>), Nathan Torkington (E<lt>gnat@frii.comE<gt>),
+Charles F. Randall (E<lt>cfr@pobox.comE<gt>) and
+Mike Guy (E<lt>mjtg@cam.a.ukE<gt>).
+
+=head1 SEE ALSO
+
+perl(1), perldebug(1), perltrap(1), diff(1), patch(1)
+
+=head1 BUGS
+
+None known (guess what must have been used to report them?)
+
+=cut
+
 !NO!SUBS!
 
 close OUT or die "Can't close $file: $!";
 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+