Fix bug #17006 : remove spurious do{} in the deparsing
[p5sagit/p5-mst-13.2.git] / utils / perlbug.PL
CommitLineData
37fa004c 1#!/usr/local/bin/perl
2
3use Config;
4use File::Basename qw(&basename &dirname);
8a5546a1 5use Cwd;
1948c06a 6use File::Spec::Functions;
37fa004c 7
8# List explicitly here the variables you want Configure to
9# generate. Metaconfig only looks for shell variables, so you
10# have to mention them as if they were shell variables, not
11# %Config entries. Thus you write
12# $startperl
13# to ensure Configure will look for $Config{startperl}.
84902520 14# $perlpath
37fa004c 15
16# This forces PL files to create target in same directory as PL file.
17# This is so that make depend always knows where to find PL derivatives.
8a5546a1 18$origdir = cwd;
44a8e56a 19chdir dirname($0);
20$file = basename($0, '.PL');
774d564b 21$file .= '.com' if $^O eq 'VMS';
37fa004c 22
55d729e4 23open OUT, ">$file" or die "Can't create $file: $!";
37fa004c 24
84902520 25# extract patchlevel.h information
26
1948c06a 27open PATCH_LEVEL, "<" . catfile(updir, "patchlevel.h")
28 or die "Can't open patchlevel.h: $!";
84902520 29
30my $patchlevel_date = (stat PATCH_LEVEL)[9];
31
32while (<PATCH_LEVEL>) {
fb73857a 33 last if $_ =~ /^\s*static\s+char.*?local_patches\[\]\s*=\s*{\s*$/;
55d729e4 34}
84902520 35
fb73857a 36my @patches;
84902520 37while (<PATCH_LEVEL>) {
fb73857a 38 last if /^\s*}/;
84902520 39 chomp;
5963b987 40 s/^\s+,?\s*"?//;
41 s/"?\s*,?$//;
84902520 42 s/(['\\])/\\$1/g;
fb73857a 43 push @patches, $_ unless $_ eq 'NULL';
55d729e4 44}
45my $patch_desc = "'" . join("',\n '", @patches) . "'";
46my $patch_tags = join "", map /(\S+)/ ? "+$1 " : (), @patches;
84902520 47
c0a6bf09 48close(PATCH_LEVEL) or die "Error closing patchlevel.h: $!";
84902520 49
5edeba26 50# TO DO (prehaps): store/embed $Config::config_sh into perlbug. When perlbug is
51# used, compare $Config::config_sh with the stored version. If they differ then
52# append a list of individual differences to the bug report.
53
84902520 54
37fa004c 55print "Extracting $file (with variable substitutions)\n";
56
57# In this section, perl variables will be expanded during extraction.
58# You can use $Config{...} to use Configure variables.
59
b22c7a20 60my $extract_version = sprintf("v%vd", $^V);
1ec03f31 61
37fa004c 62print OUT <<"!GROK!THIS!";
5f05dabc 63$Config{startperl}
64 eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
65 if \$running_under_some_shell;
84902520 66
1ec03f31 67my \$config_tag1 = '$extract_version - $Config{cf_time}';
fb73857a 68
84902520 69my \$patchlevel_date = $patchlevel_date;
fb73857a 70my \$patch_tags = '$patch_tags';
71my \@patches = (
55d729e4 72 $patch_desc
fb73857a 73);
37fa004c 74!GROK!THIS!
75
76# In the following, perl variables are not expanded during extraction.
77
78print OUT <<'!NO!SUBS!';
79
80use Config;
1ec03f31 81use File::Spec; # keep perlbug Perl 5.005 compatible
37fa004c 82use Getopt::Std;
37fa004c 83use strict;
84
85sub paraprint;
86
55d729e4 87BEGIN {
88 eval "use Mail::Send;";
89 $::HaveSend = ($@ eq "");
90 eval "use Mail::Util;";
91 $::HaveUtil = ($@ eq "");
92};
c07a80fd 93
de94c9df 94my $Version = "1.34";
c07a80fd 95
96# Changed in 1.06 to skip Mail::Send and Mail::Util if not available.
a5f75d66 97# Changed in 1.07 to see more sendmail execs, and added pipe output.
98# Changed in 1.08 to use correct address for sendmail.
c07a80fd 99# Changed in 1.09 to close the REP file before calling it up in the editor.
100# Also removed some old comments duplicated elsewhere.
101# Changed in 1.10 to run under VMS without Mail::Send; also fixed
a5f75d66 102# temp filename generation.
c07a80fd 103# Changed in 1.11 to clean up some text and removed Mail::Send deactivator.
a5f75d66 104# Changed in 1.12 to check for editor errors, make save/send distinction
105# clearer and add $ENV{REPLYTO}.
84478119 106# Changed in 1.13 to hopefully make it more difficult to accidentally
107# send mail
ab3ef367 108# Changed in 1.14 to make the prompts a little more clear on providing
109# helpful information. Also let file read fail gracefully.
8ecf1a0c 110# Changed in 1.15 to add warnings to stop people using perlbug for non-bugs.
111# Also report selected environment variables.
774d564b 112# Changed in 1.16 to include @INC, and allow user to re-edit if no changes.
137443ea 113# Changed in 1.17 Win32 support added. GSAR 97-04-12
1b0e3b9e 114# Changed in 1.18 add '-ok' option for reporting build success. CFR 97-06-18
84902520 115# Changed in 1.19 '-ok' default not '-v'
116# add local patch information
117# warn on '-ok' if this is an old system; add '-okay'
fb73857a 118# Changed in 1.20 Added patchlevel.h reading and version/config checks
55d729e4 119# Changed in 1.21 Added '-nok' for reporting build failure DFD 98-05-05
120# Changed in 1.22 Heavy reformatting & minor bugfixes HVDS 98-05-10
cca87523 121# Changed in 1.23 Restore -ok(ay): say 'success'; don't prompt
105f9295 122# Changed in 1.24 Added '-F<file>' to save report HVDS 98-07-01
8b49bb9a 123# Changed in 1.25 Warn on failure to open save file. HVDS 98-07-12
eedd3c36 124# Changed in 1.26 Don't require -t STDIN for -ok. HVDS 98-07-15
1948c06a 125# Changed in 1.27 Added Mac OS and File::Spec support CNANDOR 99-07-27
50d3c28b 126# Changed in 1.28 Additional questions for Perlbugtron RFOLEY 20.03.2000
975b416b 127# Changed in 1.29 Perlbug(tron): auto(-ok), short prompts RFOLEY 05-05-2000
b0c10877 128# Changed in 1.30 Added warnings on failure to open files MSTEVENS 13-07-2000
c0a6bf09 129# Changed in 1.31 Add checks on close().Fix my $var unless. TJENNESS 26-07-2000
93b42772 130# Changed in 1.32 Use File::Spec->tmpdir TJENNESS 20-08-2000
489b74f8 131# Changed in 1.33 Don't require -t STDOUT for -ok.
de94c9df 132# Changed in 1.34 Added Message-Id RFOLEY 18-06-2002
c07a80fd 133
1b0e3b9e 134# TODO: - Allow the user to re-name the file on mail failure, and
55d729e4 135# make sure failure (transmission-wise) of Mail::Send is
c07a80fd 136# accounted for.
1b0e3b9e 137# - Test -b option
37fa004c 138
de94c9df 139my( $file, $usefile, $cc, $address, $perlbug, $testaddress, $filename, $messageid, $domain,
7f2de2d2 140 $subject, $from, $verbose, $ed, $outfile, $Is_MacOS, $category, $severity,
afc5e478 141 $fh, $me, $Is_MSWin32, $Is_Linux, $Is_VMS, $msg, $body, $andcc, %REP, $ok);
37fa004c 142
b22c7a20 143my $perl_version = $^V ? sprintf("v%vd", $^V) : $];
1ec03f31 144
145my $config_tag2 = "$perl_version - $Config{cf_time}";
fb73857a 146
37fa004c 147Init();
148
55d729e4 149if ($::opt_h) { Help(); exit; }
150if ($::opt_d) { Dump(*STDOUT); exit; }
eedd3c36 151if (!-t STDIN && !($ok and not $::opt_n)) {
55d729e4 152 paraprint <<EOF;
153Please use perlbug interactively. If you want to
84478119 154include a file, you can use the -f switch.
155EOF
55d729e4 156 die "\n";
84478119 157}
c07a80fd 158
37fa004c 159Query();
cca87523 160Edit() unless $usefile || ($ok and not $::opt_n);
37fa004c 161NowWhat();
162Send();
163
164exit;
165
975b416b 166sub ask_for_alternatives { # (category|severity)
50d3c28b 167 my $name = shift;
975b416b 168 my %alts = (
169 'category' => {
170 'default' => 'core',
171 'ok' => 'install',
172 'opts' => [qw(core docs install library utilities)], # patch, notabug
173 },
174 'severity' => {
175 'default' => 'low',
176 'ok' => 'none',
177 'opts' => [qw(critical high medium low wishlist none)], # zero
7f2de2d2 178 },
975b416b 179 );
7f2de2d2 180 die "Invalid alternative($name) requested\n" unless grep(/^$name$/, keys %alts);
50d3c28b 181 my $alt = "";
975b416b 182 if ($ok) {
183 $alt = $alts{$name}{'ok'};
184 } else {
185 my @alts = @{$alts{$name}{'opts'}};
186 paraprint <<EOF;
50d3c28b 187Please pick a \u$name from the following:
188
189 @alts
190
191EOF
975b416b 192 my $err = 0;
193 do {
194 if ($err++ > 5) {
195 die "Invalid $name: aborting.\n";
196 }
197 print "Please enter a \u$name [$alts{$name}{'default'}]: ";
198 $alt = <>;
199 chomp $alt;
200 if ($alt =~ /^\s*$/) {
201 $alt = $alts{$name}{'default'};
202 }
203 } while !((($alt) = grep(/^$alt/i, @alts)));
204 }
50d3c28b 205 lc $alt;
206}
207
37fa004c 208sub Init {
55d729e4 209 # -------- Setup --------
210
211 $Is_MSWin32 = $^O eq 'MSWin32';
212 $Is_VMS = $^O eq 'VMS';
afc5e478 213 $Is_Linux = lc($^O) eq 'linux';
1948c06a 214 $Is_MacOS = $^O eq 'MacOS';
215
216 @ARGV = split m/\s+/,
217 MacPerl::Ask('Provide command-line args here (-h for help):')
218 if $Is_MacOS && $MacPerl::Version =~ /App/;
55d729e4 219
890b8eb0 220 if (!getopts("Adhva:s:b:f:F:r:e:SCc:to:n:")) { Help(); exit; };
55d729e4 221
222 # This comment is needed to notify metaconfig that we are
223 # using the $perladmin, $cf_by, and $cf_time definitions.
224
225 # -------- Configuration ---------
226
227 # perlbug address
8db473c3 228 $perlbug = 'perlbug@perl.org';
55d729e4 229
230 # Test address
3e79b69b 231 $testaddress = 'perlbug-test@perl.org';
55d729e4 232
233 # Target address
234 $address = $::opt_a || ($::opt_t ? $testaddress : $perlbug);
235
236 # Users address, used in message and in Reply-To header
237 $from = $::opt_r || "";
238
239 # Include verbose configuration information
240 $verbose = $::opt_v || 0;
241
242 # Subject of bug-report message
243 $subject = $::opt_s || "";
244
245 # Send a file
246 $usefile = ($::opt_f || 0);
247
248 # File to send as report
249 $file = $::opt_f || "";
250
105f9295 251 # File to output to
252 $outfile = $::opt_F || "";
253
55d729e4 254 # Body of report
255 $body = $::opt_b || "";
de94c9df 256
55d729e4 257 # Editor
258 $ed = $::opt_e || $ENV{VISUAL} || $ENV{EDITOR} || $ENV{EDIT}
259 || ($Is_VMS && "edit/tpu")
260 || ($Is_MSWin32 && "notepad")
1948c06a 261 || ($Is_MacOS && '')
55d729e4 262 || "vi";
263
264 # Not OK - provide build failure template by finessing OK report
265 if ($::opt_n) {
266 if (substr($::opt_n, 0, 2) eq 'ok' ) {
267 $::opt_o = substr($::opt_n, 1);
268 } else {
269 Help();
270 exit();
271 }
272 }
273
274 # OK - send "OK" report for build on this system
275 $ok = 0;
276 if ($::opt_o) {
277 if ($::opt_o eq 'k' or $::opt_o eq 'kay') {
278 my $age = time - $patchlevel_date;
279 if ($::opt_o eq 'k' and $age > 60 * 24 * 60 * 60 ) {
280 my $date = localtime $patchlevel_date;
281 print <<"EOF";
282"perlbug -ok" and "perlbug -nok" do not report on Perl versions which
283are more than 60 days old. This Perl version was constructed on
284$date. If you really want to report this, use
285"perlbug -okay" or "perlbug -nokay".
84902520 286EOF
1b0e3b9e 287 exit();
288 }
55d729e4 289 # force these options
290 unless ($::opt_n) {
291 $::opt_S = 1; # don't prompt for send
292 $::opt_b = 1; # we have a body
293 $body = "Perl reported to build OK on this system.\n";
294 }
295 $::opt_C = 1; # don't send a copy to the local admin
296 $::opt_s = 1; # we have a subject line
297 $subject = ($::opt_n ? 'Not ' : '')
1ec03f31 298 . "OK: perl $perl_version ${patch_tags}on"
55d729e4 299 ." $::Config{'archname'} $::Config{'osvers'} $subject";
300 $ok = 1;
301 } else {
302 Help();
303 exit();
1b0e3b9e 304 }
55d729e4 305 }
37fa004c 306
55d729e4 307 # Possible administrator addresses, in order of confidence
308 # (Note that cf_email is not mentioned to metaconfig, since
309 # we don't really want it. We'll just take it if we have to.)
310 #
311 # This has to be after the $ok stuff above because of the way
312 # that $::opt_C is forced.
313 $cc = $::opt_C ? "" : (
314 $::opt_c || $::Config{'perladmin'}
315 || $::Config{'cf_email'} || $::Config{'cf_by'}
316 );
317
de94c9df 318 if ($::HaveUtil) {
319 $domain = Mail::Util::maildomain();
320 } elsif ($Is_MSWin32) {
321 $domain = $ENV{'USERDOMAIN'};
322 } else {
323 require Sys::Hostname;
324 $domain = Sys::Hostname::hostname();
325 }
326
327 # Message-Id - rjsf
328 $messageid = "<$::Config{'version'}_${$}_".time."\@$domain>";
329
55d729e4 330 # My username
331 $me = $Is_MSWin32 ? $ENV{'USERNAME'}
332 : $^O eq 'os2' ? $ENV{'USER'} || $ENV{'LOGNAME'}
1948c06a 333 : $Is_MacOS ? $ENV{'USER'}
55d729e4 334 : eval { getpwuid($<) }; # May be missing
c0830f08 335
336 $from = $::Config{'cf_email'}
337 if !$from && $::Config{'cf_email'} && $::Config{'cf_by'} && $me &&
338 ($me eq $::Config{'cf_by'});
55d729e4 339} # sub Init
37fa004c 340
341sub Query {
55d729e4 342 # Explain what perlbug is
343 unless ($ok) {
37fa004c 344 paraprint <<EOF;
8ecf1a0c 345This program provides an easy way to create a message reporting a bug
346in perl, and e-mail it to $address. It is *NOT* intended for
54310121 347sending test messages or simply verifying that perl works, *NOR* is it
348intended for reporting bugs in third-party perl modules. It is *ONLY*
349a means of reporting verifiable problems with the core perl distribution,
350and any solutions to such problems, to the people who maintain perl.
351
352If you're just looking for help with perl, try posting to the Usenet
353newsgroup comp.lang.perl.misc. If you're looking for help with using
354perl with CGI, try posting to comp.infosystems.www.programming.cgi.
37fa004c 355EOF
1b0e3b9e 356 }
37fa004c 357
55d729e4 358 # Prompt for subject of message, if needed
2e7f46bf 359
360 if (TrivialSubject($subject)) {
361 $subject = '';
362 }
363
55d729e4 364 unless ($subject) {
365 paraprint <<EOF;
366First of all, please provide a subject for the
367message. It should be a concise description of
774d564b 368the bug or problem. "perl bug" or "perl problem"
369is not a concise description.
37fa004c 370EOF
55d729e4 371
372 my $err = 0;
2e7f46bf 373 do {
374 print "Subject: ";
55d729e4 375 $subject = <>;
2e7f46bf 376 chomp $subject;
377 if ($err++ == 5) {
55d729e4 378 die "Aborting.\n";
379 }
2e7f46bf 380 } while (TrivialSubject($subject));
55d729e4 381 }
382
383 # Prompt for return address, if needed
384 unless ($from) {
385 # Try and guess return address
386 my $guess;
387
388 $guess = $ENV{'REPLY-TO'} || $ENV{'REPLYTO'} || '';
1948c06a 389 if ($Is_MacOS) {
390 require Mac::InternetConfig;
391 $guess = $Mac::InternetConfig::InternetConfig{
392 Mac::InternetConfig::kICEmail()
393 };
394 }
395
55d729e4 396 unless ($guess) {
de94c9df 397 # move $domain to where we can use it elsewhere
398 if ($domain) {
55d729e4 399 if ($Is_VMS && !$::Config{'d_socket'}) {
400 $guess = "$domain\:\:$me";
41f926b8 401 } else {
55d729e4 402 $guess = "$me\@$domain" if $domain;
c07a80fd 403 }
55d729e4 404 }
405 }
37fa004c 406
55d729e4 407 if ($guess) {
408 unless ($ok) {
409 paraprint <<EOF;
a5f75d66 410Your e-mail address will be useful if you need to be contacted. If the
411default shown is not your full internet e-mail address, please correct it.
37fa004c 412EOF
55d729e4 413 }
414 } else {
415 paraprint <<EOF;
416So that you may be contacted if necessary, please enter
a5f75d66 417your full internet e-mail address here.
37fa004c 418EOF
37fa004c 419 }
37fa004c 420
55d729e4 421 if ($ok && $guess) {
422 # use it
423 $from = $guess;
424 } else {
425 # verify it
426 print "Your address [$guess]: ";
427 $from = <>;
2e7f46bf 428 chomp $from;
55d729e4 429 $from = $guess if $from eq '';
430 }
431 }
37fa004c 432
55d729e4 433 if ($from eq $cc or $me eq $cc) {
434 # Try not to copy ourselves
435 $cc = "yourself";
436 }
37fa004c 437
55d729e4 438 # Prompt for administrator address, unless an override was given
439 if( !$::opt_C and !$::opt_c ) {
440 paraprint <<EOF;
37fa004c 441A copy of this report can be sent to your local
55d729e4 442perl administrator. If the address is wrong, please
c07a80fd 443correct it, or enter 'none' or 'yourself' to not send
444a copy.
37fa004c 445EOF
55d729e4 446 print "Local perl administrator [$cc]: ";
447 my $entry = scalar <>;
2e7f46bf 448 chomp $entry;
37fa004c 449
55d729e4 450 if ($entry ne "") {
451 $cc = $entry;
452 $cc = '' if $me eq $cc;
37fa004c 453 }
55d729e4 454 }
37fa004c 455
55d729e4 456 $cc = '' if $cc =~ /^(none|yourself|me|myself|ourselves)$/i;
457 $andcc = " and $cc" if $cc;
37fa004c 458
55d729e4 459 # Prompt for editor, if no override is given
ab3ef367 460editor:
55d729e4 461 unless ($::opt_e || $::opt_f || $::opt_b) {
462 paraprint <<EOF;
c07a80fd 463Now you need to supply the bug report. Try to make
55d729e4 464the report concise but descriptive. Include any
ab3ef367 465relevant detail. If you are reporting something
466that does not work as you think it should, please
55d729e4 467try to include example of both the actual
ab3ef367 468result, and what you expected.
469
470Some information about your local
55d729e4 471perl configuration will automatically be included
ab3ef367 472at the end of the report. If you are using any
473unusual version of perl, please try and confirm
474exactly which versions are relevant.
37fa004c 475
476You will probably want to use an editor to enter
477the report. If "$ed" is the editor you want
478to use, then just press Enter, otherwise type in
479the name of the editor you would like to use.
480
c07a80fd 481If you would like to use a prepared file, type
37fa004c 482"file", and you will be asked for the filename.
37fa004c 483EOF
55d729e4 484 print "Editor [$ed]: ";
485 my $entry =scalar <>;
2e7f46bf 486 chomp $entry;
55d729e4 487
488 $usefile = 0;
489 if ($entry eq "file") {
490 $usefile = 1;
491 } elsif ($entry ne "") {
492 $ed = $entry;
37fa004c 493 }
55d729e4 494 }
37fa004c 495
50d3c28b 496 # Prompt for category of bug
975b416b 497 $category ||= ask_for_alternatives('category');
50d3c28b 498
499 # Prompt for severity of bug
975b416b 500 $severity ||= ask_for_alternatives('severity');
50d3c28b 501
55d729e4 502 # Generate scratch file to edit report in
503 $filename = filename();
37fa004c 504
55d729e4 505 # Prompt for file to read report from, if needed
506 if ($usefile and !$file) {
ab3ef367 507filename:
55d729e4 508 paraprint <<EOF;
37fa004c 509What is the name of the file that contains your report?
37fa004c 510EOF
55d729e4 511 print "Filename: ";
512 my $entry = scalar <>;
2e7f46bf 513 chomp $entry;
37fa004c 514
55d729e4 515 if ($entry eq "") {
516 paraprint <<EOF;
517No filename? I'll let you go back and choose an editor again.
ab3ef367 518EOF
55d729e4 519 goto editor;
520 }
521
522 unless (-f $entry and -r $entry) {
523 paraprint <<EOF;
ab3ef367 524I'm sorry, but I can't read from `$entry'. Maybe you mistyped the name of
525the file? If you don't want to send a file, just enter a blank line and you
526can get back to the editor selection.
ab3ef367 527EOF
55d729e4 528 goto filename;
37fa004c 529 }
55d729e4 530 $file = $entry;
531 }
37fa004c 532
55d729e4 533 # Generate report
b0c10877 534 open(REP,">$filename") or die "Unable to create report file `$filename': $!\n";
cca87523 535 my $reptype = !$ok ? "bug" : $::opt_n ? "build failure" : "success";
37fa004c 536
55d729e4 537 print REP <<EOF;
84902520 538This is a $reptype report for perl from $from,
1ec03f31 539generated with the help of perlbug $Version running under perl $perl_version.
37fa004c 540
541EOF
542
55d729e4 543 if ($body) {
544 print REP $body;
545 } elsif ($usefile) {
546 open(F, "<$file")
547 or die "Unable to read report file from `$file': $!\n";
548 while (<F>) {
549 print REP $_
550 }
c0a6bf09 551 close(F) or die "Error closing `$file': $!";
55d729e4 552 } else {
553 print REP <<EOF;
774d564b 554
555-----------------------------------------------------------------
556[Please enter your report here]
557
558
559
560[Please do not change anything below this line]
561-----------------------------------------------------------------
562EOF
55d729e4 563 }
564 Dump(*REP);
c0a6bf09 565 close(REP) or die "Error closing report file: $!";
55d729e4 566
567 # read in the report template once so that
568 # we can track whether the user does any editing.
569 # yes, *all* whitespace is ignored.
b0c10877 570 open(REP, "<$filename") or die "Unable to open report file `$filename': $!\n";
55d729e4 571 while (<REP>) {
572 s/\s+//g;
573 $REP{$_}++;
574 }
c0a6bf09 575 close(REP) or die "Error closing report file `$filename': $!";
55d729e4 576} # sub Query
c07a80fd 577
578sub Dump {
55d729e4 579 local(*OUT) = @_;
37fa004c 580
50d3c28b 581 print OUT <<EFF;
582---
583Flags:
584 category=$category
585 severity=$severity
890b8eb0 586EFF
587 if ($::opt_A) {
588 print OUT <<EFF;
589 ack=no
590EFF
591 }
592 print OUT <<EFF;
50d3c28b 593---
594EFF
595 print OUT "This perlbug was built using Perl $config_tag1\n",
1ec03f31 596 "It is being executed now by Perl $config_tag2.\n\n"
55d729e4 597 if $config_tag2 ne $config_tag1;
fb73857a 598
55d729e4 599 print OUT <<EOF;
1ec03f31 600Site configuration information for perl $perl_version:
37fa004c 601
602EOF
55d729e4 603 if ($::Config{cf_by} and $::Config{cf_time}) {
604 print OUT "Configured by $::Config{cf_by} at $::Config{cf_time}.\n\n";
605 }
606 print OUT Config::myconfig;
37fa004c 607
55d729e4 608 if (@patches) {
609 print OUT join "\n ", "Locally applied patches:", @patches;
610 print OUT "\n";
611 };
84902520 612
55d729e4 613 print OUT <<EOF;
8ecf1a0c 614
774d564b 615---
1ec03f31 616\@INC for perl $perl_version:
774d564b 617EOF
55d729e4 618 for my $i (@INC) {
619 print OUT " $i\n";
620 }
774d564b 621
55d729e4 622 print OUT <<EOF;
8ecf1a0c 623
774d564b 624---
1ec03f31 625Environment for perl $perl_version:
8ecf1a0c 626EOF
5cf1d1f1 627 my @env =
628 qw(PATH LD_LIBRARY_PATH LANG PERL_BADLANG SHELL HOME LOGDIR LANGUAGE);
629 push @env, $Config{ldlibpthname} if $Config{ldlibpthname} ne '';
27414c22 630 push @env, grep /^(?:PERL|LC_|LANG|CYGWIN)/, keys %ENV;
8876aa85 631 my %env;
632 @env{@env} = @env;
633 for my $env (sort keys %env) {
55d729e4 634 print OUT " $env",
635 exists $ENV{$env} ? "=$ENV{$env}" : ' (unset)',
636 "\n";
637 }
638 if ($verbose) {
1ec03f31 639 print OUT "\nComplete configuration data for perl $perl_version:\n\n";
55d729e4 640 my $value;
641 foreach (sort keys %::Config) {
642 $value = $::Config{$_};
643 $value =~ s/'/\\'/g;
644 print OUT "$_='$value'\n";
84902520 645 }
55d729e4 646 }
647} # sub Dump
37fa004c 648
649sub Edit {
55d729e4 650 # Edit the report
651 if ($usefile || $body) {
652 paraprint <<EOF;
ab3ef367 653Please make sure that the name of the editor you want to use is correct.
ab3ef367 654EOF
55d729e4 655 print "Editor [$ed]: ";
656 my $entry =scalar <>;
2e7f46bf 657 chomp $entry;
55d729e4 658 $ed = $entry unless $entry eq '';
659 }
a5f75d66 660
55d729e4 661tryagain:
c0a6bf09 662 my $sts;
663 $sts = system("$ed $filename") unless $Is_MacOS;
1948c06a 664 if ($Is_MacOS) {
665 require ExtUtils::MakeMaker;
666 ExtUtils::MM_MacOS::launch_file($filename);
667 paraprint <<EOF;
668Press Enter when done.
669EOF
670 scalar <>;
671 }
55d729e4 672 if ($sts) {
673 paraprint <<EOF;
a5f75d66 674The editor you chose (`$ed') could apparently not be run!
675Did you mistype the name of your editor? If so, please
55d729e4 676correct it here, otherwise just press Enter.
a5f75d66 677EOF
55d729e4 678 print "Editor [$ed]: ";
679 my $entry =scalar <>;
2e7f46bf 680 chomp $entry;
a5f75d66 681
55d729e4 682 if ($entry ne "") {
683 $ed = $entry;
684 goto tryagain;
685 } else {
686 paraprint <<EOF;
a5f75d66 687You may want to save your report to a file, so you can edit and mail it
688yourself.
689EOF
774d564b 690 }
55d729e4 691 }
774d564b 692
55d729e4 693 return if ($ok and not $::opt_n) || $body;
694 # Check that we have a report that has some, eh, report in it.
695 my $unseen = 0;
696
b0c10877 697 open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
55d729e4 698 # a strange way to check whether any significant editing
699 # have been done: check whether any new non-empty lines
700 # have been added. Yes, the below code ignores *any* space
701 # in *any* line.
702 while (<REP>) {
703 s/\s+//g;
704 $unseen++ if $_ ne '' and not exists $REP{$_};
705 }
774d564b 706
55d729e4 707 while ($unseen == 0) {
708 paraprint <<EOF;
774d564b 709I am sorry but it looks like you did not report anything.
774d564b 710EOF
55d729e4 711 print "Action (Retry Edit/Cancel) ";
712 my ($action) = scalar(<>);
713 if ($action =~ /^[re]/i) { # <R>etry <E>dit
714 goto tryagain;
715 } elsif ($action =~ /^[cq]/i) { # <C>ancel, <Q>uit
716 Cancel();
717 }
718 }
719} # sub Edit
774d564b 720
721sub Cancel {
722 1 while unlink($filename); # remove all versions under VMS
723 print "\nCancelling.\n";
724 exit(0);
37fa004c 725}
726
727sub NowWhat {
55d729e4 728 # Report is done, prompt for further action
729 if( !$::opt_S ) {
730 while(1) {
731 paraprint <<EOF;
732Now that you have completed your report, would you like to send
733the message to $address$andcc, display the message on
2e7f46bf 734the screen, re-edit it, display/change the subject,
735or cancel without sending anything?
37fa004c 736You may also save the message as a file to mail at another time.
37fa004c 737EOF
8b49bb9a 738 retry:
2e7f46bf 739 print "Action (Send/Display/Edit/Subject/Save to File): ";
55d729e4 740 my $action = scalar <>;
2e7f46bf 741 chomp $action;
55d729e4 742
743 if ($action =~ /^(f|sa)/i) { # <F>ile/<Sa>ve
fd49642c 744 my $file_save = $outfile || "perlbug.rep";
745 print "\n\nName of file to save message in [$file_save]: ";
55d729e4 746 my $file = scalar <>;
2e7f46bf 747 chomp $file;
fd49642c 748 $file = $file_save if $file eq "";
55d729e4 749
8b49bb9a 750 unless (open(FILE, ">$file")) {
751 print "\nError opening $file: $!\n\n";
752 goto retry;
753 }
b0c10877 754 open(REP, "<$filename") or die "Couldn't open file `$filename': $!\n";
55d729e4 755 print FILE "To: $address\nSubject: $subject\n";
756 print FILE "Cc: $cc\n" if $cc;
757 print FILE "Reply-To: $from\n" if $from;
de94c9df 758 print FILE "Message-Id: $messageid\n" if $messageid;
55d729e4 759 print FILE "\n";
760 while (<REP>) { print FILE }
c0a6bf09 761 close(REP) or die "Error closing report file `$filename': $!";
762 close(FILE) or die "Error closing $file: $!";
55d729e4 763
764 print "\nMessage saved in `$file'.\n";
765 exit;
766 } elsif ($action =~ /^(d|l|sh)/i ) { # <D>isplay, <L>ist, <Sh>ow
767 # Display the message
b0c10877 768 open(REP, "<$filename") or die "Couldn't open file `$filename': $!\n";
55d729e4 769 while (<REP>) { print $_ }
c0a6bf09 770 close(REP) or die "Error closing report file `$filename': $!";
2e7f46bf 771 } elsif ($action =~ /^su/i) { # <Su>bject
772 print "Subject: $subject\n";
773 print "If the above subject is fine, just press Enter.\n";
774 print "If not, type in the new subject.\n";
775 print "Subject: ";
776 my $reply = scalar <STDIN>;
777 chomp $reply;
778 if ($reply ne '') {
779 unless (TrivialSubject($reply)) {
780 $subject = $reply;
781 print "Subject: $subject\n";
782 }
783 }
55d729e4 784 } elsif ($action =~ /^se/i) { # <S>end
785 # Send the message
786 print "Are you certain you want to send this message?\n"
787 . 'Please type "yes" if you are: ';
788 my $reply = scalar <STDIN>;
2e7f46bf 789 chomp $reply;
55d729e4 790 if ($reply eq "yes") {
791 last;
792 } else {
793 paraprint <<EOF;
ab3ef367 794That wasn't a clear "yes", so I won't send your message. If you are sure
795your message should be sent, type in "yes" (without the quotes) at the
796confirmation prompt.
ab3ef367 797EOF
55d729e4 798 }
799 } elsif ($action =~ /^[er]/i) { # <E>dit, <R>e-edit
800 # edit the message
801 Edit();
802 } elsif ($action =~ /^[qc]/i) { # <C>ancel, <Q>uit
803 Cancel();
01544859 804 } elsif ($action =~ /^s/i) {
55d729e4 805 paraprint <<EOF;
84478119 806I'm sorry, but I didn't understand that. Please type "send" or "save".
807EOF
55d729e4 808 }
37fa004c 809 }
55d729e4 810 }
811} # sub NowWhat
37fa004c 812
2e7f46bf 813sub TrivialSubject {
814 my $subject = shift;
815 if ($subject =~
816 /^(y(es)?|no?|help|perl( (bug|problem))?|bug|problem)$/i ||
817 length($subject) < 4 ||
818 $subject !~ /\s/) {
819 print "\nThat doesn't look like a good subject. Please be more verbose.\n\n";
820 return 1;
821 } else {
822 return 0;
823 }
824}
825
37fa004c 826sub Send {
55d729e4 827 # Message has been accepted for transmission -- Send the message
105f9295 828 if ($outfile) {
829 open SENDMAIL, ">$outfile" or die "Couldn't open '$outfile': $!\n";
830 goto sendout;
831 }
afc5e478 832
833 # on linux certain mail implementations won't accept the subject
834 # as "~s subject" and thus the Subject header will be corrupted
835 # so don't use Mail::Send to be safe
836 if ($::HaveSend && !$Is_Linux) {
55d729e4 837 $msg = new Mail::Send Subject => $subject, To => $address;
838 $msg->cc($cc) if $cc;
839 $msg->add("Reply-To",$from) if $from;
840
841 $fh = $msg->open;
b0c10877 842 open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
55d729e4 843 while (<REP>) { print $fh $_ }
c0a6bf09 844 close(REP) or die "Error closing $filename: $!";
55d729e4 845 $fh->close;
846
847 print "\nMessage sent.\n";
848 } elsif ($Is_VMS) {
849 if ( ($address =~ /@/ and $address !~ /^\w+%"/) or
850 ($cc =~ /@/ and $cc !~ /^\w+%"/) ) {
851 my $prefix;
852 foreach (qw[ IN MX SMTP UCX PONY WINS ], '') {
853 $prefix = "$_%", last if $ENV{"MAIL\$PROTOCOL_$_"};
854 }
855 $address = qq[${prefix}"$address"] unless $address =~ /^\w+%"/;
856 $cc = qq[${prefix}"$cc"] unless !$cc || $cc =~ /^\w+%"/;
857 }
858 $subject =~ s/"/""/g; $address =~ s/"/""/g; $cc =~ s/"/""/g;
859 my $sts = system(qq[mail/Subject="$subject" $filename. "$address","$cc"]);
860 if ($sts) {
861 die <<EOF;
862Can't spawn off mail
863 (leaving bug report in $filename): $sts
864EOF
865 }
866 } else {
867 my $sendmail = "";
868 for (qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/ucblib/sendmail)) {
869 $sendmail = $_, last if -e $_;
870 }
871 if ($^O eq 'os2' and $sendmail eq "") {
872 my $path = $ENV{PATH};
873 $path =~ s:\\:/: ;
874 my @path = split /$Config{'path_sep'}/, $path;
875 for (@path) {
876 $sendmail = "$_/sendmail", last if -e "$_/sendmail";
877 $sendmail = "$_/sendmail.exe", last if -e "$_/sendmail.exe";
878 }
879 }
37fa004c 880
55d729e4 881 paraprint(<<"EOF"), die "\n" if $sendmail eq "";
c07a80fd 882I am terribly sorry, but I cannot find sendmail, or a close equivalent, and
883the perl package Mail::Send has not been installed, so I can't send your bug
d121ca8c 884report. We apologize for the inconvenience.
c07a80fd 885
886So you may attempt to find some way of sending your message, it has
887been left in the file `$filename'.
c07a80fd 888EOF
01544859 889 open(SENDMAIL, "|$sendmail -t -oi") || die "'|$sendmail -t -oi' failed: $!";
105f9295 890sendout:
55d729e4 891 print SENDMAIL "To: $address\n";
892 print SENDMAIL "Subject: $subject\n";
893 print SENDMAIL "Cc: $cc\n" if $cc;
894 print SENDMAIL "Reply-To: $from\n" if $from;
de94c9df 895 print SENDMAIL "Message-Id: $messageid\n" if $messageid;
55d729e4 896 print SENDMAIL "\n\n";
b0c10877 897 open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
55d729e4 898 while (<REP>) { print SENDMAIL $_ }
c0a6bf09 899 close(REP) or die "Error closing $filename: $!";
37fa004c 900
55d729e4 901 if (close(SENDMAIL)) {
105f9295 902 printf "\nMessage %s.\n", $outfile ? "saved" : "sent";
55d729e4 903 } else {
904 warn "\nSendmail returned status '", $? >> 8, "'\n";
905 }
906 }
907 1 while unlink($filename); # remove all versions under VMS
908} # sub Send
37fa004c 909
910sub Help {
55d729e4 911 print <<EOF;
37fa004c 912
55d729e4 913A program to help generate bug reports about perl5, and mail them.
37fa004c 914It is designed to be used interactively. Normally no arguments will
915be needed.
55d729e4 916
37fa004c 917Usage:
105f9295 918$0 [-v] [-a address] [-s subject] [-b body | -f inpufile ] [ -F outputfile ]
d121ca8c 919 [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
890b8eb0 920$0 [-v] [-r returnaddress] [-A] [-ok | -okay | -nok | -nokay]
55d729e4 921
c07a80fd 922Simplest usage: run "$0", and follow the prompts.
37fa004c 923
924Options:
925
926 -v Include Verbose configuration data in the report
55d729e4 927 -f File containing the body of the report. Use this to
37fa004c 928 quickly send a prepared message.
1948c06a 929 -F File to output the resulting mail message to, instead of mailing.
37fa004c 930 -S Send without asking for confirmation.
931 -a Address to send the report to. Defaults to `$address'.
932 -c Address to send copy of report to. Defaults to `$cc'.
933 -C Don't send copy to administrator.
55d729e4 934 -s Subject to include with the message. You will be prompted
37fa004c 935 if you don't supply one on the command line.
936 -b Body of the report. If not included on the command line, or
937 in a file with -f, you will get a chance to edit the message.
938 -r Your return address. The program will ask you to confirm
939 this if you don't give it here.
55d729e4 940 -e Editor to use.
37fa004c 941 -t Test mode. The target address defaults to `$testaddress'.
489b74f8 942 -d Data mode. This prints out your configuration data, without mailing
c07a80fd 943 anything. You can use this with -v to get more complete data.
890b8eb0 944 -A Don't send a bug received acknowledgement to the return address.
84902520 945 -ok Report successful build on this system to perl porters
55d729e4 946 (use alone or with -v). Only use -ok if *everything* was ok:
947 if there were *any* problems at all, use -nok.
fb73857a 948 -okay As -ok but allow report from old builds.
55d729e4 949 -nok Report unsuccessful build on this system to perl porters
950 (use alone or with -v). You must describe what went wrong
951 in the body of the report which you will be asked to edit.
952 -nokay As -nok but allow report from old builds.
953 -h Print this help message.
954
37fa004c 955EOF
956}
957
55d729e4 958sub filename {
93b42772 959 my $dir = File::Spec->tmpdir();
55d729e4 960 $filename = "bugrep0$$";
1ec03f31 961 $filename++ while -e File::Spec->catfile($dir, $filename);
962 $filename = File::Spec->catfile($dir, $filename);
55d729e4 963}
964
37fa004c 965sub paraprint {
966 my @paragraphs = split /\n{2,}/, "@_";
c07a80fd 967 print "\n\n";
37fa004c 968 for (@paragraphs) { # implicit local $_
55d729e4 969 s/(\S)\s*\n/$1 /g;
970 write;
971 print "\n";
37fa004c 972 }
37fa004c 973}
37fa004c 974
975format STDOUT =
976^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
977$_
978.
d121ca8c 979
980__END__
981
982=head1 NAME
983
984perlbug - how to submit bug reports on Perl
985
986=head1 SYNOPSIS
987
988B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
105f9295 989S<[ B<-b> I<body> | B<-f> I<inputfile> ]> S<[ B<-F> I<outputfile> ]>
990S<[ B<-r> I<returnaddress> ]>
d121ca8c 991S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
890b8eb0 992S<[ B<-S> ]> S<[ B<-t> ]> S<[ B<-d> ]> S<[ B<-A> ]> S<[ B<-h> ]>
d121ca8c 993
55d729e4 994B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]>
890b8eb0 995 S<[ B<-A> ]> S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>
1b0e3b9e 996
d121ca8c 997=head1 DESCRIPTION
998
999A program to help generate bug reports about perl or the modules that
55d729e4 1000come with it, and mail them.
d121ca8c 1001
1002If you have found a bug with a non-standard port (one that was not part
1003of the I<standard distribution>), a binary distribution, or a
1004non-standard module (such as Tk, CGI, etc), then please see the
1005documentation that came with that distribution to determine the correct
1006place to report bugs.
1007
1008C<perlbug> is designed to be used interactively. Normally no arguments
1009will be needed. Simply run it, and follow the prompts.
1010
1011If you are unable to run B<perlbug> (most likely because you don't have
1012a working setup to send mail that perlbug recognizes), you may have to
7f2de2d2 1013compose your own report, and email it to B<perlbug@perl.org>. You might
d121ca8c 1014find the B<-d> option useful to get summary information in that case.
1015
1016In any case, when reporting a bug, please make sure you have run through
1017this checklist:
1018
1019=over 4
1020
884baa66 1021=item What version of Perl you are running?
d121ca8c 1022
1023Type C<perl -v> at the command line to find out.
1024
1025=item Are you running the latest released version of perl?
1026
1027Look at http://www.perl.com/ to find out. If it is not the latest
1028released version, get that one and see whether your bug has been
884baa66 1029fixed. Note that bug reports about old versions of Perl, especially
d121ca8c 1030those prior to the 5.0 release, are likely to fall upon deaf ears.
1031You are on your own if you continue to use perl1 .. perl4.
1032
1033=item Are you sure what you have is a bug?
1034
1035A significant number of the bug reports we get turn out to be documented
884baa66 1036features in Perl. Make sure the behavior you are witnessing doesn't fall
d121ca8c 1037under that category, by glancing through the documentation that comes
884baa66 1038with Perl (we'll admit this is no mean task, given the sheer volume of
d121ca8c 1039it all, but at least have a look at the sections that I<seem> relevant).
1040
1041Be aware of the familiar traps that perl programmers of various hues
1042fall into. See L<perltrap>.
1043
f27fa58d 1044Check in L<perldiag> to see what any Perl error message(s) mean.
1045If message isn't in perldiag, it probably isn't generated by Perl.
1046Consult your operating system documentation instead.
bdcdfa19 1047
1948c06a 1048If you are on a non-UNIX platform check also L<perlport>, as some
1049features may be unimplemented or work differently.
bdcdfa19 1050
884baa66 1051Try to study the problem under the Perl debugger, if necessary.
d121ca8c 1052See L<perldebug>.
1053
1054=item Do you have a proper test case?
1055
1056The easier it is to reproduce your bug, the more likely it will be
1057fixed, because if no one can duplicate the problem, no one can fix it.
1058A good test case has most of these attributes: fewest possible number
1059of lines; few dependencies on external commands, modules, or
1060libraries; runs on most platforms unimpeded; and is self-documenting.
1061
1062A good test case is almost always a good candidate to be on the perl
1063test suite. If you have the time, consider making your test case so
1064that it will readily fit into the standard test suite.
1065
bdcdfa19 1066Remember also to include the B<exact> error messages, if any.
1067"Perl complained something" is not an exact error message.
1068
1069If you get a core dump (or equivalent), you may use a debugger
1070(B<dbx>, B<gdb>, etc) to produce a stack trace to include in the bug
1071report. NOTE: unless your Perl has been compiled with debug info
1072(often B<-g>), the stack trace is likely to be somewhat hard to use
884baa66 1073because it will most probably contain only the function names and not
bdcdfa19 1074their arguments. If possible, recompile your Perl with debug info and
1075reproduce the dump and the stack trace.
1076
d121ca8c 1077=item Can you describe the bug in plain English?
1078
1079The easier it is to understand a reproducible bug, the more likely it
1080will be fixed. Anything you can provide by way of insight into the
884baa66 1081problem helps a great deal. In other words, try to analyze the
1082problem (to the extent you can) and report your discoveries.
d121ca8c 1083
1084=item Can you fix the bug yourself?
1085
1086A bug report which I<includes a patch to fix it> will almost
1087definitely be fixed. Use the C<diff> program to generate your patches
1088(C<diff> is being maintained by the GNU folks as part of the B<diffutils>
1089package, so you should be able to get it from any of the GNU software
1090repositories). If you do submit a patch, the cool-dude counter at
7f2de2d2 1091perlbug@perl.org will register you as a savior of the world. Your
d121ca8c 1092patch may be returned with requests for changes, or requests for more
1093detailed explanations about your fix.
1094
1095Here are some clues for creating quality patches: Use the B<-c> or
1096B<-u> switches to the diff program (to create a so-called context or
1097unified diff). Make sure the patch is not reversed (the first
1098argument to diff is typically the original file, the second argument
1099your changed file). Make sure you test your patch by applying it with
1100the C<patch> program before you send it on its way. Try to follow the
1101same style as the code you are trying to patch. Make sure your patch
1102really does work (C<make test>, if the thing you're patching supports
1103it).
1104
1105=item Can you use C<perlbug> to submit the report?
1106
1107B<perlbug> will, amongst other things, ensure your report includes
1108crucial information about your version of perl. If C<perlbug> is unable
1109to mail your report after you have typed it in, you may have to compose
1110the message yourself, add the output produced by C<perlbug -d> and email
7f2de2d2 1111it to B<perlbug@perl.org>. If, for some reason, you cannot run
d121ca8c 1112C<perlbug> at all on your system, be sure to include the entire output
1113produced by running C<perl -V> (note the uppercase V).
1114
bdcdfa19 1115Whether you use C<perlbug> or send the email manually, please make
884baa66 1116your Subject line informative. "a bug" not informative. Neither is
1117"perl crashes" nor "HELP!!!". These don't help.
1118A compact description of what's wrong is fine.
bdcdfa19 1119
d121ca8c 1120=back
1121
1122Having done your bit, please be prepared to wait, to be told the bug
884baa66 1123is in your code, or even to get no reply at all. The Perl maintainers
84902520 1124are busy folks, so if your problem is a small one or if it is difficult
1125to understand or already known, they may not respond with a personal reply.
d121ca8c 1126If it is important to you that your bug be fixed, do monitor the
1127C<Changes> file in any development releases since the time you submitted
1128the bug, and encourage the maintainers with kind words (but never any
1129flames!). Feel free to resend your bug report if the next released
1130version of perl comes out and your bug is still present.
1131
1132=head1 OPTIONS
1133
1134=over 8
1135
1136=item B<-a>
1137
3e79b69b 1138Address to send the report to. Defaults to B<perlbug@perl.org>.
d121ca8c 1139
890b8eb0 1140=item B<-A>
1141
1142Don't send a bug received acknowledgement to the reply address.
1143Generally it is only a sensible to use this option if you are a
1144perl maintainer actively watching perl porters for your message to
1145arrive.
1146
d121ca8c 1147=item B<-b>
1148
1149Body of the report. If not included on the command line, or
1150in a file with B<-f>, you will get a chance to edit the message.
1151
1152=item B<-C>
1153
1154Don't send copy to administrator.
1155
1156=item B<-c>
1157
1158Address to send copy of report to. Defaults to the address of the
1159local perl administrator (recorded when perl was built).
1160
1161=item B<-d>
1162
1163Data mode (the default if you redirect or pipe output). This prints out
1164your configuration data, without mailing anything. You can use this
1165with B<-v> to get more complete data.
1166
1167=item B<-e>
1168
55d729e4 1169Editor to use.
d121ca8c 1170
1171=item B<-f>
1172
1173File containing the body of the report. Use this to quickly send a
1174prepared message.
1175
105f9295 1176=item B<-F>
1177
1178File to output the results to instead of sending as an email. Useful
1179particularly when running perlbug on a machine with no direct internet
1180connection.
1181
d121ca8c 1182=item B<-h>
1183
1184Prints a brief summary of the options.
1185
1b0e3b9e 1186=item B<-ok>
1187
84902520 1188Report successful build on this system to perl porters. Forces B<-S>
1189and B<-C>. Forces and supplies values for B<-s> and B<-b>. Only
1b0e3b9e 1190prompts for a return address if it cannot guess it (for use with
84902520 1191B<make>). Honors return address specified with B<-r>. You can use this
1192with B<-v> to get more complete data. Only makes a report if this
1193system is less than 60 days old.
1194
1195=item B<-okay>
1196
1197As B<-ok> except it will report on older systems.
1b0e3b9e 1198
55d729e4 1199=item B<-nok>
1200
1201Report unsuccessful build on this system. Forces B<-C>. Forces and
1202supplies a value for B<-s>, then requires you to edit the report
1203and say what went wrong. Alternatively, a prepared report may be
1204supplied using B<-f>. Only prompts for a return address if it
1205cannot guess it (for use with B<make>). Honors return address
1206specified with B<-r>. You can use this with B<-v> to get more
1207complete data. Only makes a report if this system is less than 60
1208days old.
1209
1210=item B<-nokay>
1211
1212As B<-nok> except it will report on older systems.
1213
d121ca8c 1214=item B<-r>
1215
1216Your return address. The program will ask you to confirm its default
1217if you don't use this option.
1218
1219=item B<-S>
1220
1221Send without asking for confirmation.
1222
1223=item B<-s>
1224
1225Subject to include with the message. You will be prompted if you don't
1226supply one on the command line.
1227
1228=item B<-t>
1229
3e79b69b 1230Test mode. The target address defaults to B<perlbug-test@perl.org>.
d121ca8c 1231
1232=item B<-v>
1233
1234Include verbose configuration data in the report.
1235
1236=back
1237
1238=head1 AUTHORS
1239
1240Kenneth Albanowski (E<lt>kjahds@kjahds.comE<gt>), subsequently I<doc>tored
6e238990 1241by Gurusamy Sarathy (E<lt>gsar@activestate.comE<gt>), Tom Christiansen
1b0e3b9e 1242(E<lt>tchrist@perl.comE<gt>), Nathan Torkington (E<lt>gnat@frii.comE<gt>),
55d729e4 1243Charles F. Randall (E<lt>cfr@pobox.comE<gt>), Mike Guy
bdcdfa19 1244(E<lt>mjtg@cam.a.ukE<gt>), Dominic Dunlop (E<lt>domo@computer.orgE<gt>),
cc3f2df3 1245Hugo van der Sanden (E<lt>hv@crypt.org<gt>),
50d3c28b 1246Jarkko Hietaniemi (E<lt>jhi@iki.fiE<gt>), Chris Nandor
1247(E<lt>pudge@pobox.comE<gt>), Jon Orwant (E<lt>orwant@media.mit.eduE<gt>,
1248and Richard Foley (E<lt>richard@rfi.netE<gt>).
d121ca8c 1249
1250=head1 SEE ALSO
1251
bdcdfa19 1252perl(1), perldebug(1), perldiag(1), perlport(1), perltrap(1),
1253diff(1), patch(1), dbx(1), gdb(1)
d121ca8c 1254
1255=head1 BUGS
1256
1257None known (guess what must have been used to report them?)
1258
1259=cut
1260
37fa004c 1261!NO!SUBS!
1262
1263close OUT or die "Can't close $file: $!";
1264chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
1265exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
8a5546a1 1266chdir $origdir;