From 19581c18215913927b584e55a94025330cbaea27 Mon Sep 17 00:00:00 2001 From: Tom Molesworth Date: Mon, 16 Oct 2017 10:37:03 +0800 Subject: [PATCH 1/4] tom/perl_5026001_build From 1d8c89ce716ce75b467fc5981918eddcaa141615 Mon Sep 17 00:00:00 2001 From: Tom Molesworth Date: Sun, 22 Oct 2017 09:43:44 +0000 Subject: [PATCH 2/4] Update version to 5.26.1 --- rebuild.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rebuild.sh b/rebuild.sh index 56c05d06..13c448c9 100755 --- a/rebuild.sh +++ b/rebuild.sh @@ -1,9 +1,9 @@ #!/bin/bash set -e -wget http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz -tar xzvf perl-5.24.1.tar.gz -cd perl-5.24.1 +wget http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz +tar xzvf perl-5.26.1.tar.gz +cd perl-5.26.1 ./Configure -Dusesitecustomize -Dinc_version_list=none -Dprefix=/home/git/binary-com/perl -Dotherlibdirs=/home/git/regentmarkets/cpan/local/lib/perl5/ -Duselargefiles -Dccflags="-DDEBIAN -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security" -Dldflags=" -Wl,-z,relro" -Dlddlflags="-shared -Wl,-z,relro" -Dcccdlflags="-fPIC" -Duse64bitint -Dman1dir=none -Dman3dir=none -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -des make && make test && make install From 3da322d14734d8cc6d520083bd5b11bcff2a0999 Mon Sep 17 00:00:00 2001 From: Tom Molesworth Date: Sun, 22 Oct 2017 09:45:19 +0000 Subject: [PATCH 3/4] make install --- bin/corelist | 8 ++-- bin/cpan | 106 +++++++++++++++++++++++++++++-------------------- bin/enc2xs | 58 ++++++++++++++++++++------- bin/encguess | 2 +- bin/h2ph | 10 ++--- bin/h2xs | 22 +++++----- bin/json_pp | 2 +- bin/libnetcfg | 2 +- bin/perl | Bin 37479 -> 37919 bytes bin/perlbug | 54 ++++++++++++++++--------- bin/perlivp | 6 +-- bin/perlthanks | 54 ++++++++++++++++--------- bin/piconv | 2 +- bin/pl2pm | 2 +- bin/pod2man | 37 ++++++++++++----- bin/podchecker | 7 ++-- bin/ptar | 8 ++-- bin/shasum | 11 ++--- bin/splain | 25 +++++++----- 19 files changed, 264 insertions(+), 152 deletions(-) diff --git a/bin/corelist b/bin/corelist index 30520dca..eaaf4de1 100755 --- a/bin/corelist +++ b/bin/corelist @@ -352,10 +352,10 @@ sub module_version { print $msg,"\n"; if( defined $ret and exists $Opts{u} ) { - my $upsream = $Module::CoreList::upstream{$mod}; - $upsream = 'undef' unless $upsream; - print "upstream: $upsream\n"; - if ( $upsream ne 'blead' ) { + my $upstream = $Module::CoreList::upstream{$mod}; + $upstream = 'undef' unless $upstream; + print "upstream: $upstream\n"; + if ( $upstream ne 'blead' ) { my $bugtracker = $Module::CoreList::bug_tracker{$mod}; $bugtracker = 'unknown' unless $bugtracker; print "bug tracker: $bugtracker\n"; diff --git a/bin/cpan b/bin/cpan index 91031a5f..9ca1d6e8 100755 --- a/bin/cpan +++ b/bin/cpan @@ -7,8 +7,8 @@ BEGIN { pop @INC if $INC[-1] eq '.' } use strict; use vars qw($VERSION); -use App::Cpan '1.60_02'; -$VERSION = '1.61'; +use App::Cpan '1.64'; +$VERSION = '1.64'; my $rc = App::Cpan->run( @ARGV ); @@ -25,7 +25,13 @@ cpan - easily interact with CPAN from the command line cpan module_name [ module_name ... ] # with switches, installs modules with extra behavior - cpan [-cfgimtTw] module_name [ module_name ... ] + cpan [-cfFimtTw] module_name [ module_name ... ] + + # use local::lib + cpan -I module_name [ module_name ... ] + + # one time mirror override for faster mirrors + cpan -p ... # with just the dot, install from the distribution in the # current directory @@ -34,20 +40,8 @@ cpan - easily interact with CPAN from the command line # without arguments, starts CPAN.pm shell cpan - # force install modules (usually those that fail tests) - cpan -f module_name [ module_name ... ] - - # install modules but without testing them - cpan -T module_name [ module_name ... ] - - # dump the configuration - cpan -J - - # load a different configuration to install Module::Foo - cpan -j some/other/file Module::Foo - # without arguments, but some switches - cpan [-ahrvACDlLO] + cpan [-ahpruvACDLOPX] =head1 DESCRIPTION @@ -77,7 +71,10 @@ Show the F files for the specified modules =item -D module [ module ... ] -Show the module details. +Show the module details. This prints one line for each out-of-date module +(meaning, modules locally installed but have newer versions on CPAN). +Each line has three columns: module name, local version, and CPAN +version. =item -f @@ -114,13 +111,15 @@ distribution. Print a help message and exit. When you specify C<-h>, it ignores all of the other options and arguments. -=item -i +=item -i module [ module ... ] -Install the specified modules. +Install the specified modules. With no other switches, this switch +is implied. =item -I -Load C (think like C<-I> for loading lib paths). +Load C (think like C<-I> for loading lib paths). Too bad +C<-l> was already taken. =item -j Config.pm @@ -146,23 +145,38 @@ List the modules by the specified authors. Make the specified modules. +=item -M mirror1,mirror2,... + +A comma-separated list of mirrors to use for just this run. The C<-P> +option can find them for you automatically. + +=item -n + +Do a dry run, but don't actually install anything. (unimplemented) + =item -O Show the out-of-date modules. =item -p -Ping the configured mirrors +Ping the configured mirrors and print a report =item -P -Find the best mirrors you could be using (but doesn't configure them just yet) +Find the best mirrors you could be using and use them for the current +session. =item -r Recompiles dynamically loaded modules with CPAN::Shell->recompile. -=item -t +=item -s + +Drop in the CPAN.pm shell. This command does this automatically if you don't +specify any arguments. + +=item -t module [ module ... ] Run a `make test` on the specified modules. @@ -190,6 +204,16 @@ UNIMPLEMENTED Turn on cpan warnings. This checks various things, like directory permissions, and tells you about problems you might have. +=item -x module [ module ... ] + +Find close matches to the named modules that you think you might have +mistyped. This requires the optional installation of Text::Levenshtein or +Text::Levenshtein::Damerau. + +=item -X + +Dump all the namespaces to standard output. + =back =head2 Examples @@ -215,9 +239,10 @@ and tells you about problems you might have. # force install modules ( must use -i ) cpan -fi CGI::Minimal URI -=head1 ENVIRONMENT VARIABLES + # install modules but without testing them + cpan -Ti CGI::Minimal URI -=over 4 +=head2 Environment variables There are several components in CPAN.pm that use environment variables. The build tools, L and L use some, @@ -230,11 +255,21 @@ Oslo Concensus: L sets this to C<1> unless it already +has a value (even if that value is false). + +=item PERL_MM_USE_DEFAULT + +Use the default answer for a prompted questions. C sets this +to C<1> unless it already has a value (even if that value is false). + =item CPAN_OPTS -C splits this variable on whitespace and prepends that list to C<@ARGV> -before it processes the command-line arguments. For instance, if you always -want to use C, you can set C to C<-I>. +As with C, a string of additional C options to +add to those you specify on the command line. =item CPANSCRIPT_LOGLEVEL @@ -248,19 +283,6 @@ C, and C. The default is C. The path to the C binary to use for the Git features. The default is C. -=item NONINTERACTIVE_TESTING - -Assume no one is paying attention and skips prompts for distributions -that do that correctly. C sets this to C<1> unless it already -has a value (even if that value is false). - -=item PERL_MM_USE_DEFAULT - -Use the default answer for a prompted questions. C sets this -to C<1> unless it already has a value (even if that value is false). - -=back - =back =head1 EXIT VALUES @@ -316,7 +338,7 @@ brian d foy, C<< >> =head1 COPYRIGHT -Copyright (c) 2001-2014, brian d foy, All Rights Reserved. +Copyright (c) 2001-2015, brian d foy, All Rights Reserved. You may redistribute this under the same terms as Perl itself. diff --git a/bin/enc2xs b/bin/enc2xs index bf6646fe..6e904860 100755 --- a/bin/enc2xs +++ b/bin/enc2xs @@ -14,7 +14,7 @@ use warnings; use Getopt::Std; use Config; my @orig_ARGV = @ARGV; -our $VERSION = do { my @r = (q$Revision: 2.18 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 2.20 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # These may get re-ordered. # RAW is a do_now as inserted by &enter @@ -126,7 +126,10 @@ my %encode_types = (U => \&encode_U, ); # Win32 does not expand globs on command line -eval "\@ARGV = map(glob(\$_),\@ARGV)" if ($^O eq 'MSWin32'); +if ($^O eq 'MSWin32' and !$ENV{PERL_CORE}) { + eval "\@ARGV = map(glob(\$_),\@ARGV)"; + @ARGV = @orig_ARGV unless @ARGV; +} my %opt; # I think these are: @@ -137,6 +140,8 @@ my %opt; # -o to specify the output file name (else it's the first arg) # -f to give a file with a list of input files (else use the args) # -n to name the encoding (else use the basename of the input file. +#Getopt::Long::Configure("bundling"); +#GetOptions(\%opt, qw(C M=s S Q q O o=s f=s n=s v)); getopts('CM:SQqOo:f:n:v',\%opt); $opt{M} and make_makefile_pl($opt{M}, @ARGV); @@ -199,9 +204,9 @@ sub compiler_info { # This really should go first, else the die here causes empty (non-erroneous) # output files to be written. my @encfiles; -if (exists $opt{'f'}) { +if (exists $opt{f}) { # -F is followed by name of file containing list of filenames - my $flist = $opt{'f'}; + my $flist = $opt{f}; open(FLIST,$flist) || die "Cannot open $flist:$!"; chomp(@encfiles = ); close(FLIST); @@ -209,9 +214,15 @@ if (exists $opt{'f'}) { @encfiles = @ARGV; } -my $cname = (exists $opt{'o'}) ? $opt{'o'} : shift(@ARGV); +my $cname = $opt{o} ? $opt{o} : shift(@ARGV); +unless ($cname) { #debuging a win32 nmake error-only. works via cmdline + print "\nARGV:"; + print "$_ " for @ARGV; + print "\nopt:"; + print " $_ => ",defined $opt{$_}?$opt{$_}:"undef","\n" for keys %opt; +} chmod(0666,$cname) if -f $cname && !-w $cname; -open(C,">$cname") || die "Cannot open $cname:$!"; +open(C,">", $cname) || die "Cannot open $cname:$!"; my $dname = $cname; my $hname = $cname; @@ -223,10 +234,10 @@ if ($cname =~ /\.(c|xs)$/i) # VMS may have upcased filenames with DECC$ARGV_PARS $doC = 1; $dname =~ s/(\.[^\.]*)?$/.exh/; chmod(0666,$dname) if -f $cname && !-w $dname; - open(D,">$dname") || die "Cannot open $dname:$!"; + open(D,">", $dname) || die "Cannot open $dname:$!"; $hname =~ s/(\.[^\.]*)?$/.h/; chmod(0666,$hname) if -f $cname && !-w $hname; - open(H,">$hname") || die "Cannot open $hname:$!"; + open(H,">", $hname) || die "Cannot open $hname:$!"; foreach my $fh (\*C,\*D,\*H) { @@ -472,7 +483,9 @@ sub compile_ucm $erep = $attr{'subchar'}; $erep =~ s/^\s+//; $erep =~ s/\s+$//; } - print "Reading $name ($cs)\n"; + print "Reading $name ($cs)\n" + unless defined $ENV{MAKEFLAGS} + and $ENV{MAKEFLAGS} =~ /\b(s|silent|quiet)\b/; my $nfb = 0; my $hfb = 0; while (<$fh>) @@ -758,9 +771,17 @@ sub addstrings if ($a->{'Forward'}) { my ($cpp, $static, $sized) = compiler_info(1); - my $var = $static ? 'static const' : 'extern'; my $count = $sized ? scalar(@{$a->{'Entries'}}) : ''; - print $fh "$var encpage_t $name\[$count];\n"; + if ($static) { + # we cannot ask Config for d_plusplus since we can override CC=g++-6 on the cmdline + print $fh "#ifdef __cplusplus\n"; # -fpermissive since g++-6 + print $fh "extern encpage_t $name\[$count];\n"; + print $fh "#else\n"; + print $fh "static const encpage_t $name\[$count];\n"; + print $fh "#endif\n"; + } else { + print $fh "extern encpage_t $name\[$count];\n"; + } } $a->{'DoneStrings'} = 1; foreach my $b (@{$a->{'Entries'}}) @@ -851,9 +872,16 @@ sub outtable outtable($fh,$t,$bigname) unless $t->{'Done'}; } my ($cpp, $static) = compiler_info(0); - my $var = $static ? 'static const ' : ''; - print $fh "\n${var}encpage_t $name\[", - scalar(@{$a->{'Entries'}}), "] = {\n"; + my $count = scalar(@{$a->{'Entries'}}); + if ($static) { + print $fh "#ifdef __cplusplus\n"; # -fpermissive since g++-6 + print $fh "encpage_t $name\[$count] = {\n"; + print $fh "#else\n"; + print $fh "static const encpage_t $name\[$count] = {\n"; + print $fh "#endif\n"; + } else { + print $fh "\nencpage_t $name\[$count] = {\n"; + } foreach my $b (@{$a->{'Entries'}}) { my ($sc,$ec,$out,$t,$end,$l,$fb) = @$b; @@ -1107,7 +1135,7 @@ sub _print_expand{ if ((my $d = dirname($dst)) ne '.'){ -d $d or mkdir $d, 0755 or die "mkdir $d : $!"; } - open my $out, ">$dst" or die "$!"; + open my $out, ">", $dst or die "$!"; my $asis = 0; while (<$in>){ if (/^#### END_OF_HEADER/){ diff --git a/bin/encguess b/bin/encguess index aae4c12c..6724b136 100755 --- a/bin/encguess +++ b/bin/encguess @@ -64,7 +64,7 @@ encguess - guess character encodings of files =head1 VERSION -$Id: encguess,v 0.1 2015/02/05 10:34:19 dankogai Exp $ +$Id: encguess,v 0.2 2016/08/04 03:15:58 dankogai Exp $ =head1 SYNOPSIS diff --git a/bin/h2ph b/bin/h2ph index 43f4dff5..527b00f9 100755 --- a/bin/h2ph +++ b/bin/h2ph @@ -85,8 +85,8 @@ while (defined (my $file = next_file())) { } } - open(IN,"$file") || (($Exit = 1),(warn "Can't open $file: $!\n"),next); - open(OUT,">$Dest_dir/$outfile") || die "Can't create $outfile: $!\n"; + open(IN, "<", "$file") || (($Exit = 1),(warn "Can't open $file: $!\n"),next); + open(OUT, ">", "$Dest_dir/$outfile") || die "Can't create $outfile: $!\n"; } print OUT @@ -703,7 +703,7 @@ sub queue_includes_from return if ($file eq "-"); - open HEADER, $file or return; + open HEADER, "<", $file or return; while (defined($line =
)) { while (/\\$/) { # Handle continuation lines chop $line; @@ -743,7 +743,7 @@ sub build_preamble_if_necessary # Can we skip building the preamble file? if (-r $preamble) { # Extract version number from first line of preamble: - open PREAMBLE, $preamble or die "Cannot open $preamble: $!"; + open PREAMBLE, "<", $preamble or die "Cannot open $preamble: $!"; my $line = ; $line =~ /(\b\d+\b)/; close PREAMBLE or die "Cannot close $preamble: $!"; @@ -754,7 +754,7 @@ sub build_preamble_if_necessary my (%define) = _extract_cc_defines(); - open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + open PREAMBLE, ">", $preamble or die "Cannot open $preamble: $!"; print PREAMBLE "# This file was created by h2ph version $VERSION\n"; # Prevent non-portable hex constants from warning. # diff --git a/bin/h2xs b/bin/h2xs index 7fd34c49..27259f00 100755 --- a/bin/h2xs +++ b/bin/h2xs @@ -809,7 +809,7 @@ if( @path_h ){ # Scan the header file (we should deal with nested header files) # Record the names of simple #define constants into const_names # Function prototypes are processed below. - open(CH, "<$rel_path_h") || die "Can't open $rel_path_h: $!\n"; + open(CH, "<", "$rel_path_h") || die "Can't open $rel_path_h: $!\n"; defines: while () { if ($pre_sub_tri_graphs) { @@ -942,7 +942,7 @@ if( ! $opt_X ){ # use XS, unless it was disabled Devel::PPPort::WriteFile('ppport.h') || die "Can't create $ext$modpname/ppport.h: $!\n"; } - open(XS, ">$modfname.xs") || die "Can't create $ext$modpname/$modfname.xs: $!\n"; + open(XS, ">", "$modfname.xs") || die "Can't create $ext$modpname/$modfname.xs: $!\n"; if ($opt_x) { warn "Scanning typemaps...\n"; get_typemap(); @@ -1001,7 +1001,7 @@ if( ! $opt_X ){ # use XS, unless it was disabled } } { local $" = '|'; - $typedef_rex = qr(\b(?$modpmname") || die "Can't create $ext$modpname/$modpmname: $!\n"; +open(PM, ">", "$modpmname") || die "Can't create $ext$modpname/$modpmname: $!\n"; $" = "\n\t"; warn "Writing $ext$modpname/$modpmname\n"; @@ -1746,7 +1746,7 @@ sub get_typemap { warn " Scanning $typemap\n"; warn("Warning: ignoring non-text typemap file '$typemap'\n"), next unless -T $typemap ; - open(TYPEMAP, $typemap) + open(TYPEMAP, "<", $typemap) or warn ("Warning: could not open typemap file '$typemap': $!\n"), next; my $mode = 'Typemap'; while () { @@ -1839,7 +1839,7 @@ close XS; if (%types_seen) { my $type; warn "Writing $ext$modpname/typemap\n"; - open TM, ">typemap" or die "Cannot open typemap file for write: $!"; + open TM, ">", "typemap" or die "Cannot open typemap file for write: $!"; for $type (sort keys %types_seen) { my $entry = assign_typemap_entry $type; @@ -1873,7 +1873,7 @@ EOP } # if( ! $opt_X ) warn "Writing $ext$modpname/Makefile.PL\n"; -open(PL, ">Makefile.PL") || die "Can't create $ext$modpname/Makefile.PL: $!\n"; +open(PL, ">", "Makefile.PL") || die "Can't create $ext$modpname/Makefile.PL: $!\n"; my $prereq_pm = ''; @@ -1999,7 +1999,7 @@ close(PL) || die "Can't close $ext$modpname/Makefile.PL: $!\n"; # Create a simple README since this is a CPAN requirement # and it doesn't hurt to have one warn "Writing $ext$modpname/README\n"; -open(RM, ">README") || die "Can't create $ext$modpname/README:$!\n"; +open(RM, ">", "README") || die "Can't create $ext$modpname/README:$!\n"; my $thisyear = (gmtime)[5] + 1900; my $rmhead = "$modpname version $TEMPLATE_VERSION"; my $rmheadeq = "=" x length($rmhead); @@ -2066,7 +2066,7 @@ unless (-d "$testdir") { warn "Writing $ext$modpname/$testfile\n"; my $tests = @const_names ? 2 : 1; -open EX, ">$testfile" or die "Can't create $ext$modpname/$testfile: $!\n"; +open EX, ">", "$testfile" or die "Can't create $ext$modpname/$testfile: $!\n"; print EX <<_END_; # Before 'make install' is performed this script should be runnable with @@ -2172,7 +2172,7 @@ close(EX) || die "Can't close $ext$modpname/$testfile: $!\n"; unless ($opt_C) { warn "Writing $ext$modpname/Changes\n"; $" = ' '; - open(EX, ">Changes") || die "Can't create $ext$modpname/Changes: $!\n"; + open(EX, ">", "Changes") || die "Can't create $ext$modpname/Changes: $!\n"; @ARGS = map {/[\s\"\'\`\$*?^|&<>\[\]\{\}\(\)]/ ? "'$_'" : $_} @ARGS; print EX <MANIFEST') or die "Can't create MANIFEST: $!"; +open(MANI, '>', 'MANIFEST') or die "Can't create MANIFEST: $!"; my @files = grep { -f } (<*>, , <$fallbackdirname/*>, <$modpmdir/*>); if (!@files) { eval {opendir(D,'.');}; diff --git a/bin/json_pp b/bin/json_pp index 7156735d..e2bb722e 100755 --- a/bin/json_pp +++ b/bin/json_pp @@ -36,7 +36,7 @@ if ( $version ) { $json_opt = '' if $json_opt eq '-'; -my @json_opt = grep { $allow_json_opt{ $_ } or die "'$_' is invalid json opttion" } split/,/, $json_opt; +my @json_opt = grep { $allow_json_opt{ $_ } or die "'$_' is not a valid json option" } split/,/, $json_opt; my %F = ( 'json' => sub { diff --git a/bin/libnetcfg b/bin/libnetcfg index 8d14d6e7..a190f38a 100755 --- a/bin/libnetcfg +++ b/bin/libnetcfg @@ -310,7 +310,7 @@ my %oldcfg = (); $Net::Config::CONFIGURE = 1; # Suppress load of user overrides if( -f $libnet_cfg_in ) { - %oldcfg = ( %{ do $libnet_cfg_in } ); + %oldcfg = ( %{ local @INC = '.'; do $libnet_cfg_in } ); } elsif (eval { require Net::Config }) { diff --git a/bin/perl b/bin/perl index 08ecf4a60a67b6f0c12261dc2ee9a874b3e20137..9e2e615f55f89dd38154e821d8ee8380e160ca48 100755 GIT binary patch delta 15263 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 N($S@R25p<__ZqmW;v%CH}r_Nrd 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 diff --git a/bin/perlbug b/bin/perlbug index 90f335dd..6487c911 100755 --- a/bin/perlbug +++ b/bin/perlbug @@ -2,9 +2,9 @@ eval 'exec /home/git/binary-com/perl/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; -my $config_tag1 = '5.24.1 - Fri Apr 7 04:17:54 UTC 2017'; +my $config_tag1 = '5.26.1 - Mon Oct 16 02:32:12 UTC 2017'; -my $patchlevel_date = 1483384486; +my $patchlevel_date = 1505057999; my @patches = Config::local_patches(); my $patch_tags = join "", map /(\S+)/ ? "+$1 " : (), @patches; @@ -28,6 +28,8 @@ BEGIN { $::HaveTemp = ($@ eq ""); eval { require Module::CoreList; }; $::HaveCoreList = ($@ eq ""); + eval { require Text::Wrap; }; + $::HaveWrap = ($@ eq ""); }; my $Version = "1.40"; @@ -45,6 +47,8 @@ my( $file, $usefile, $cc, $address, $bugaddress, $testaddress, $thanksaddress, %opt, $have_attachment, $attachments, $has_patch, $mime_boundary ); +my $running_noninteractively = !-t STDIN; + my $perl_version = $^V ? sprintf("%vd", $^V) : $]; my $config_tag2 = "$perl_version - $Config{cf_time}"; @@ -53,7 +57,7 @@ Init(); if ($opt{h}) { Help(); exit; } if ($opt{d}) { Dump(*STDOUT); exit; } -if (!-t STDIN && !($ok and not $opt{n})) { +if ($running_noninteractively && !$opt{t} && !($ok and not $opt{n})) { paraprint <<"EOF"; Please use $progname interactively. If you want to include a file, you can use the -f switch. @@ -703,7 +707,7 @@ sub Edit { $ed = $entry unless $entry eq ''; } - _edit_file($ed); + _edit_file($ed) unless $running_noninteractively; } sub _edit_file { @@ -780,16 +784,14 @@ a few options. You can: EOF retry: print $menu; - my $action = _prompt('', "Action (Send/Display/Edit/Subject/Save to File)");; + my $action = _prompt('', "Action (Send/Display/Edit/Subject/Save to File)", + $opt{t} ? 'q' : ''); print "\n"; if ($action =~ /^(f|sa)/i) { # ile/ve if ( SaveMessage() ) { exit } } elsif ($action =~ /^(d|l|sh)/i ) { # isplay, ist, ow # Display the message - open(REP, '<:raw', $filename) or die "Couldn't open file '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { print $_ } - close(REP) or die "Error closing report file '$filename': $!"; + print _read_report($filename); if ($have_attachment) { print "\n\n---\nAttachment(s):\n"; for my $att (split /\s*,\s*/, $attachments) { print " $att\n"; } @@ -831,7 +833,7 @@ sub TrivialSubject { if ($subject =~ /^(y(es)?|no?|help|perl( (bug|problem))?|bug|problem)$/i || length($subject) < 4 || - $subject !~ /\s/) { + ($subject !~ /\s/ && ! $opt{t})) { # non-whitespace is accepted in test mode print "\nThe subject you entered wasn't very descriptive. Please try again.\n\n"; return 1; } else { @@ -966,6 +968,7 @@ sub _prompt { } print $prompt. ($default ? " [$default]" :''). ": "; my $result = scalar(<>); + return $default if !defined $result; # got eof chomp($result); $result =~ s/^\s*(.*?)\s*$/$1/s; if ($default && $result eq '') { @@ -1032,13 +1035,29 @@ ATTACHMENT return $attach; } +sub _read_report { + my $fname = shift; + my $content; + open( REP, "<:raw", $fname ) or die "Couldn't open file '$fname': $!\n"; + binmode(REP, ':raw :crlf') if $Is_MSWin32; + # wrap long lines to make sure the report gets delivered + local $Text::Wrap::columns = 900; + local $Text::Wrap::huge = 'overflow'; + while () { + if ($::HaveWrap && /\S/) { # wrap() would remove empty lines + $content .= Text::Wrap::wrap(undef, undef, $_); + } else { + $content .= $_; + } + } + close(REP) or die "Error closing report file '$fname': $!"; + return $content; +} + sub build_complete_message { my $content = _build_header(%{_message_headers()}) . "\n\n"; $content .= _add_body_start() if $have_attachment; - open( REP, "<:raw", $filename ) or die "Couldn't open file '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { $content .= $_; } - close(REP) or die "Error closing report file '$filename': $!"; + $content .= _read_report($filename); $content .= _add_attachments() if $have_attachment; return $content; } @@ -1089,10 +1108,7 @@ sub _send_message_mailsend { $fh = $msg->open; binmode($fh, ':raw'); print $fh _add_body_start() if $have_attachment; - open(REP, "<:raw", $filename) or die "Couldn't open '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { print $fh $_ } - close(REP) or die "Error closing $filename: $!"; + print $fh _read_report($filename); print $fh _add_attachments() if $have_attachment; $fh->close or die "Error sending mail: $!"; @@ -1478,6 +1494,8 @@ supply one on the command line. =item B<-t> Test mode. The target address defaults to B. +Also makes it possible to command perlbug from a pipe or file, for +testing purposes. =item B<-T> diff --git a/bin/perlivp b/bin/perlivp index 027f3ec1..b5ed019f 100755 --- a/bin/perlivp +++ b/bin/perlivp @@ -2,7 +2,7 @@ eval 'exec /home/git/binary-com/perl/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; -# perlivp v5.24.1 +# perlivp v5.26.1 BEGIN { pop @INC if $INC[-1] eq '.' } @@ -67,7 +67,7 @@ $tests_total++; print "## Checking Perl version via variable '\$]'.\n" if $opt{'p'}; -my $ivp_VERSION = "5.024001"; +my $ivp_VERSION = "5.026001"; $label = 'Perl version correct'; @@ -174,7 +174,7 @@ if (defined($Config{'extensions'})) { next if $_ eq 'XS/APItest'; next if $_ eq 'XS/Typemap'; # VMS$ perl -e "eval ""require \""Devel/DProf.pm\"";"" print $@" - # \NT> perl -e "eval \"require 'Devel/DProf.pm'\"; print $@" + # \NT> perl -e "eval \"require './Devel/DProf.pm'\"; print $@" # DProf: run perl with -d to use DProf. # Compilation failed in require at (eval 1) line 1. eval " require \"$_.pm\"; "; diff --git a/bin/perlthanks b/bin/perlthanks index 90f335dd..6487c911 100755 --- a/bin/perlthanks +++ b/bin/perlthanks @@ -2,9 +2,9 @@ eval 'exec /home/git/binary-com/perl/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; -my $config_tag1 = '5.24.1 - Fri Apr 7 04:17:54 UTC 2017'; +my $config_tag1 = '5.26.1 - Mon Oct 16 02:32:12 UTC 2017'; -my $patchlevel_date = 1483384486; +my $patchlevel_date = 1505057999; my @patches = Config::local_patches(); my $patch_tags = join "", map /(\S+)/ ? "+$1 " : (), @patches; @@ -28,6 +28,8 @@ BEGIN { $::HaveTemp = ($@ eq ""); eval { require Module::CoreList; }; $::HaveCoreList = ($@ eq ""); + eval { require Text::Wrap; }; + $::HaveWrap = ($@ eq ""); }; my $Version = "1.40"; @@ -45,6 +47,8 @@ my( $file, $usefile, $cc, $address, $bugaddress, $testaddress, $thanksaddress, %opt, $have_attachment, $attachments, $has_patch, $mime_boundary ); +my $running_noninteractively = !-t STDIN; + my $perl_version = $^V ? sprintf("%vd", $^V) : $]; my $config_tag2 = "$perl_version - $Config{cf_time}"; @@ -53,7 +57,7 @@ Init(); if ($opt{h}) { Help(); exit; } if ($opt{d}) { Dump(*STDOUT); exit; } -if (!-t STDIN && !($ok and not $opt{n})) { +if ($running_noninteractively && !$opt{t} && !($ok and not $opt{n})) { paraprint <<"EOF"; Please use $progname interactively. If you want to include a file, you can use the -f switch. @@ -703,7 +707,7 @@ sub Edit { $ed = $entry unless $entry eq ''; } - _edit_file($ed); + _edit_file($ed) unless $running_noninteractively; } sub _edit_file { @@ -780,16 +784,14 @@ a few options. You can: EOF retry: print $menu; - my $action = _prompt('', "Action (Send/Display/Edit/Subject/Save to File)");; + my $action = _prompt('', "Action (Send/Display/Edit/Subject/Save to File)", + $opt{t} ? 'q' : ''); print "\n"; if ($action =~ /^(f|sa)/i) { # ile/ve if ( SaveMessage() ) { exit } } elsif ($action =~ /^(d|l|sh)/i ) { # isplay, ist, ow # Display the message - open(REP, '<:raw', $filename) or die "Couldn't open file '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { print $_ } - close(REP) or die "Error closing report file '$filename': $!"; + print _read_report($filename); if ($have_attachment) { print "\n\n---\nAttachment(s):\n"; for my $att (split /\s*,\s*/, $attachments) { print " $att\n"; } @@ -831,7 +833,7 @@ sub TrivialSubject { if ($subject =~ /^(y(es)?|no?|help|perl( (bug|problem))?|bug|problem)$/i || length($subject) < 4 || - $subject !~ /\s/) { + ($subject !~ /\s/ && ! $opt{t})) { # non-whitespace is accepted in test mode print "\nThe subject you entered wasn't very descriptive. Please try again.\n\n"; return 1; } else { @@ -966,6 +968,7 @@ sub _prompt { } print $prompt. ($default ? " [$default]" :''). ": "; my $result = scalar(<>); + return $default if !defined $result; # got eof chomp($result); $result =~ s/^\s*(.*?)\s*$/$1/s; if ($default && $result eq '') { @@ -1032,13 +1035,29 @@ ATTACHMENT return $attach; } +sub _read_report { + my $fname = shift; + my $content; + open( REP, "<:raw", $fname ) or die "Couldn't open file '$fname': $!\n"; + binmode(REP, ':raw :crlf') if $Is_MSWin32; + # wrap long lines to make sure the report gets delivered + local $Text::Wrap::columns = 900; + local $Text::Wrap::huge = 'overflow'; + while () { + if ($::HaveWrap && /\S/) { # wrap() would remove empty lines + $content .= Text::Wrap::wrap(undef, undef, $_); + } else { + $content .= $_; + } + } + close(REP) or die "Error closing report file '$fname': $!"; + return $content; +} + sub build_complete_message { my $content = _build_header(%{_message_headers()}) . "\n\n"; $content .= _add_body_start() if $have_attachment; - open( REP, "<:raw", $filename ) or die "Couldn't open file '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { $content .= $_; } - close(REP) or die "Error closing report file '$filename': $!"; + $content .= _read_report($filename); $content .= _add_attachments() if $have_attachment; return $content; } @@ -1089,10 +1108,7 @@ sub _send_message_mailsend { $fh = $msg->open; binmode($fh, ':raw'); print $fh _add_body_start() if $have_attachment; - open(REP, "<:raw", $filename) or die "Couldn't open '$filename': $!\n"; - binmode(REP, ':raw :crlf') if $Is_MSWin32; - while () { print $fh $_ } - close(REP) or die "Error closing $filename: $!"; + print $fh _read_report($filename); print $fh _add_attachments() if $have_attachment; $fh->close or die "Error sending mail: $!"; @@ -1478,6 +1494,8 @@ supply one on the command line. =item B<-t> Test mode. The target address defaults to B. +Also makes it possible to command perlbug from a pipe or file, for +testing purposes. =item B<-T> diff --git a/bin/piconv b/bin/piconv index dc993d27..19812e13 100755 --- a/bin/piconv +++ b/bin/piconv @@ -2,7 +2,7 @@ eval 'exec /home/git/binary-com/perl/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; #!./perl -# $Id: piconv,v 2.7 2014/05/31 09:48:48 dankogai Exp $ +# $Id: piconv,v 2.8 2016/08/04 03:15:58 dankogai Exp $ # BEGIN { pop @INC if $INC[-1] eq '.' } use 5.8.0; diff --git a/bin/pl2pm b/bin/pl2pm index f1c6578d..49f57ac4 100755 --- a/bin/pl2pm +++ b/bin/pl2pm @@ -93,7 +93,7 @@ while (<>) { $export_ok = "\@EXPORT_OK = qw(@export_ok);\n"; } - if ( open(PM, ">$newname") ) { + if ( open(PM, ">", $newname) ) { print PM <<"END"; package $newpack; use 5.006; diff --git a/bin/pod2man b/bin/pod2man index 0345df95..4b8e3308 100755 --- a/bin/pod2man +++ b/bin/pod2man @@ -34,8 +34,9 @@ my %options; Getopt::Long::config ('bundling_override'); GetOptions (\%options, 'center|c=s', 'date|d=s', 'errors=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s', 'fixedbolditalic=s', 'help|h', - 'lax|l', 'name|n=s', 'nourls', 'official|o', 'quotes|q=s', - 'release|r=s', 'section|s=s', 'stderr', 'verbose|v', 'utf8|u') + 'lax|l', 'lquote=s', 'name|n=s', 'nourls', 'official|o', + 'quotes|q=s', 'release|r=s', 'rquote=s', 'section|s=s', 'stderr', + 'verbose|v', 'utf8|u') or exit 1; pod2usage (0) if $options{help}; @@ -83,7 +84,7 @@ __END__ =for stopwords en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL troff troff-specific formatters uppercased Christiansen --nourls UTC -prepend +prepend lquote rquote =head1 NAME @@ -94,9 +95,9 @@ pod2man - Convert POD data to formatted *roff input pod2man [B<--center>=I] [B<--date>=I] [B<--errors>=I