diff options
author | afresh1 <afresh1@cvs.openbsd.org> | 2014-03-24 14:59:14 +0000 |
---|---|---|
committer | afresh1 <afresh1@cvs.openbsd.org> | 2014-03-24 14:59:14 +0000 |
commit | c080cf55b5ad88c4056e6e9a4f858e0dfbf642b1 (patch) | |
tree | 90e52b9a68c9bf2fe8cd12484950cdc93821c2c4 /gnu/usr.bin/perl/Porting | |
parent | 2fae50d18aceff793a4705626eb1156e0070870a (diff) |
Import perl-5.18.2
OK espie@ sthen@ deraadt@
Diffstat (limited to 'gnu/usr.bin/perl/Porting')
29 files changed, 2257 insertions, 595 deletions
diff --git a/gnu/usr.bin/perl/Porting/Maintainers.pm b/gnu/usr.bin/perl/Porting/Maintainers.pm index 3e6697f887e..896e7c8cbab 100644 --- a/gnu/usr.bin/perl/Porting/Maintainers.pm +++ b/gnu/usr.bin/perl/Porting/Maintainers.pm @@ -22,7 +22,7 @@ use vars qw(@ISA @EXPORT_OK $VERSION); show_results process_options files_to_modules finish_tap_output reload_manifest); -$VERSION = 0.06; +$VERSION = 0.09; require Exporter; @@ -92,8 +92,9 @@ sub expand_glob { sub filter_excluded { my ($m, @files) = @_; + my $excluded = $Modules{$m}{EXCLUDED}; return @files - unless my $excluded = $Modules{$m}{EXCLUDED}; + unless $excluded and @$excluded; my ($pat) = map { qr/$_/ } join '|' => map { ref $_ ? $_ : qr/\b\Q$_\E$/ @@ -301,6 +302,8 @@ sub show_results { } } } elsif ($Check or $Checkmani) { + require Test::More; + Test::More->import; if( @Files ) { missing_maintainers( $Checkmani @@ -346,22 +349,14 @@ sub maintainers_files { sub duplicated_maintainers { maintainers_files(); - for my $f (keys %files) { - if ($files{$f} > 1) { - print "not ok ".++$TestCounter." - File $f appears $files{$f} times in Maintainers.pl\n"; - } else { - print "ok ".++$TestCounter." - File $f appears $files{$f} times in Maintainers.pl\n"; - } + for my $f (sort keys %files) { + cmp_ok($files{$f}, '<=', 1, "File $f appears $files{$f} times in Maintainers.pl"); } } sub warn_maintainer { my $name = shift; - if ($files{$name}) { - print "ok ".++$TestCounter." - $name has a maintainer\n"; - } else { - print "not ok ".++$TestCounter." - $name has NO maintainer\n"; - } + ok($files{$name}, "$name has a maintainer"); } sub missing_maintainers { @@ -376,17 +371,13 @@ sub missing_maintainers { sub superfluous_maintainers { maintainers_files(); - for my $f (keys %files) { - if ($MANIFEST{$f}) { - print "ok ".++$TestCounter." - Maintained file $f appears in MANIFEST\n"; - } else { - print "not ok ".++$TestCounter." - File $f has has a maintainer but is not in MANIFEST\n"; - } + for my $f (sort keys %files) { + ok($MANIFEST{$f}, "File $f has a maintainer and is in MANIFEST"); } } sub finish_tap_output { - print "1..".$TestCounter."\n"; + done_testing(); } 1; diff --git a/gnu/usr.bin/perl/Porting/README.pod b/gnu/usr.bin/perl/Porting/README.pod new file mode 100644 index 00000000000..a714193a742 --- /dev/null +++ b/gnu/usr.bin/perl/Porting/README.pod @@ -0,0 +1,355 @@ +=head1 NAME + +README.pod - README for the F<Porting/> directory in the Perl 5 core distribution. + +=head1 FILES + +=head2 F<acknowledgements.pl> + +Generates the text which goes in the Acknowledgements section in +a perldelta. You pass in the previous version and it guesses the next +version, fetches information from the repository and outputs the +text. + +=head2 F<add-package.pl> + +Program to prepare dual-life distributions for insertion into the Perl 5 +F<lib/> and F<t/> directories. Now thought to be largely superseded. + +=head2 F<bisect-example.sh>, F<bisect-runner.pl> and F<bisect.pl> + +Use C<git bisect> to pinpoint changes. + +=head2 F<bump-perl-version> + +A utility to find, and optionally bump, references to the perl version +number in various files within the perl source. + +=head2 F<check83.pl> + +Performs pathname portability checks, including whether there are naming +conflicts when names are truncated to the DOSish, case-ignoring 8.3 format. + +=head2 F<checkAUTHORS.pl> + +Used by F<t/porting/authors.t> to ensure the F<AUTHORS> list is up to date. + +=head2 F<checkURL.pl> + +Checks that all the URLs in the Perl source are valid. + +=head2 F<checkVERSION.pl> + +Used by F<t/porting/cmp_version.t> to ensure changed modules have had their +versions updated. + +=head2 F<checkansi.pl> + +Check source code for ANSI-C violations. + +=head2 F<checkcfgvar.pl> + +Check that the various F<config.sh>-clones have (at least) all the same +symbols as the top-level F<config_h.SH> so that the (potentially) needed +symbols are not lagging after how F<Configure> thinks the world is laid out. +VMS is probably not handled properly here, due to their own rather elaborate +DCL scripting. + +=head2 F<check-cpan-pollution> + +Scans the commit logs for commits that are potentially, illegitimately +touching modules that are primarily maintained outside of the perl core. Also +checks for commits that span multiple distributions in F<cpan/> or F<dist/>. +Makes sure that updated CPAN distributions also update +F<Porting/Maintainers.pl>, but otherwise ignores changes to that file (and +F<MANIFEST>). + +=head2 F<checkpodencoding.pl> + +Check if POD files contain non-ASCII without specifying +encoding. Run it as: C<perl Porting/checkpodencoding.pl>. + +=head2 F<cherrymaint> + +Command line tool to update cherrymaint; a tool for selecting commits from +blead to cherry-pick into stable perl versions. + +=head2 F<cmpVERSION.pl> + +Compare the current Perl source tree and a given tag for modules that have +identical version numbers but different contents. + +=head2 F<config_H> + +This file is a sample F<config.h> file. If you are unable to successfully run +F<Configure>, copy this file to F<config.h> and edit it to suit your system. + +=head2 F<config_h.pl> + +Used when importing changes from F<metaconfig>. This script reorders +F<config_h.SH> after metaconfig. + +=head2 F<config.sh> + +This file is a sample F<config.sh> file. F<config.sh> is normally +produced by running the F<Configure> script. It holds all the definitions +figured out by F<Configure>. If you are unable to successfully run +F<Configure> on your system, copy this sample file to F<config.sh> +at the top of the perl source tree and edit it to suit your system. +Then propagate those values by running C<Configure -S>. This sample +file is normally updated each time F<Configure> is updated. + +=head2 F<core-cpan-diff> + +Compare CPAN modules with their equivalent in core. +Originally based on App::DualLivedDiff by Steffen Mueller. + +=head2 F<corecpan.pl> + +Reports, in a perl source tree, which dual-lived core modules have not the +same version than the corresponding module on CPAN. + +=head2 F<corelist-diff> + +Prints a table of differences between two Perl versions with respect to +modules included in the distribution. + +=head2 F<corelist.pl> + +Generates info for Module::CoreList from this perl tree. + +=head2 F<corelist-perldelta.pl> + +Generates a list of the module changes for the Perl you are currently +building. Also generates a diff between the corelist sections of two +F<perldelta*> files. + +=head2 F<epigraphs.pod> + +List of Perl release epigraphs. + +=head2 F<exec-bit.txt> + +This file contains a list of files that F<makerel> will ensure get an +executable bit. + +=head2 F<exercise_makedef.pl> + +Brute force testing for F<makedef.pl>. + +=head2 F<expand-macro.pl> + +Expand C macros using the C preprocessor. + +=head2 F<findrfuncs> + +This script finds reentrant variants of functions used in an executable and +shared objects. + +=head2 F<GitUtils.pm> + +This script contains the subroutine to generate a F<.patch file> for a +committish (the SHA1 checksum of a commit, a number made of 40 hexadecimal +digits which acts the internal unique identifier for this commit +(lilypond.org). Related file: F<make_dot_patch.pl> + +=head2 F<git-deltatool> + +This script, a rough draft, aids in generating a perldelta file +from a series of git commits. + +=head2 F<git-find-p4-change> + +This script, given a Perforce change number, outputs the equivalent git commit +id. + +=head2 F<git-make-p4-refs> + +This script creates a tag for every p4raw-id. + +=head2 F<Glossary> + +This file is built by F<metaconfig>. This file contains a description of all +the shell variables whose value is determined by the Configure script. +It later gets incorporated into the pod for F<Config.pm>. + +=head2 F<how_to_write_a_perldelta.pod> + +This file contains a specification as to how to write a perldelta pod. +Related file: F<perldelta_template.pod> + +=head2 F<leakfinder.pl> + +This script executes every line in every file in the build directory and its +subdirectories to determine if the number of SVs goes up and reports it as a +leak to STDOUT. WARNING! some harm could be done if a line contains something +similar to C<`rm *`>. + +=head2 F<Maintainers> + +This script shows information about the maintainers of core files/modules. + +Related files: F<Maintainers.pl>, F<Maintainers.pm> + +=head2 F<Maintainers.pl> + +A package associating core files/modules with maintainers. Related files: +F<Maintainers>, F<Maintainers.pm> + +=head2 F<Maintainers.pm> + +A package to search and show information about which core files/modules are +associated with maintainers. Related files: F<Maintainers>, F<Maintainers.pl> + +=head2 F<make-rmg-checklist> + +This script creates a release checklist as a simple HTML document. + +=head2 F<make_dot_patch.pl> + +Generate a F<.patch> file to STDOUT for a commit ID specified on the +command-line. + +=head2 F<make_modlib_cpan.pl> + +This script generates the list of registered CPAN sites in F<perlmodlib.PL>. + +=head2 F<make_snapshot.pl> + +This script is a quick and dirty snapshot generator for the perl5.git.perl.org +web page to use to generate the snapshot files. + +=head2 F<makemeta> + +This script creates F<META.yml> and F<META.json> files. + +=head2 F<makerel> + +This script builds a Perl release tarball. + +=head2 F<manicheck> + +This script outputs a list of files in F<MANIFEST> which don't exist and a +list of files that exist and aren't in F<MANIFEST>. + +=head2 F<manisort> + +This script sorts the files in F<MANIFEST>. + +=head2 F<new-perldelta.pl> + +This script automates the process for creating perldelta.pl. + +=head2 F<newtests-perldelta.pl> + +This script outputs the added tests between the two versions of Perl. + +=head2 F<perldelta_template.pod> + +Template for F<perldelta>. + +=head2 F<perlhist_calculate.pl> + +Generates info for F<perlhist> from this perl tree. + +=head2 F<pod_lib.pl> + +When C<require>d into other programs in the Perl 5 core +distribution, provides functions useful during testing. + +=head2 F<pod_rules.pl> + +Generate the sections of files listed in C<%Targets> from F<pod/perl.pod>. +Mostly these are rules in Makefiles. + + --verbose gives slightly more output + --build-all tries to build everything + --build-foo updates foo as follows + --showfiles shows the files to be changed + --test exit if perl.pod, MANIFEST are consistent, and regenerated + files are up to date, die otherwise. + +=head2 F<podtidy> + +Applies F<podtidy> to a file. + +=head2 F<pumpkin.pod> + +Pumpkin - Notes on handling the Perl Patch Pumpkin And Porting Perl. +Many of these are out of date or superseded by other documents in +this directory. + +=head2 F<README.y2038> + +The y2038 implementation for perl. This is an implementation of POSIX time.h +which solves the year 2038 bug on systems where time_t is only 32 bits. It is +implemented in bog-standard ANSI C. The latest version can be found at +L<http://y2038.googlecode.com/>. + +=head2 F<release_announcement_template.txt> + +Release announcment for minor releasements of the 5.17 development series. + +=head2 F<release_managers_guide.pod> + +Releasing a new version of perl 5.x. Note that things change at each release, +so there may be new things not covered here, or tools may need updating. + +=head2 F<release_schedule.pod> + +This schedule lists the projected or historical development and release +schedules for the next, current and previous stable versions of Perl. Dates +with all question marks will only be releases if deemed necessary by the +Pumpking. + +=head2 F<rt_list_patches> + +Shell script to list patches in RT. + +=head2 F<sort_perldiag.pl> + +This is a script for sorting the warning and error messages in +F<perldiag.pod>. POD formatting, printf-style escapes, non-letter characters, +and case are ignored, as explained in L<perldiag>. + +=head2 F<testall.atom> + +Test suite profiling on Tru 64. + +=head2 F<thirdclean> + +Script for cleaning out the "known noise" from Third Degree reports: either +noise caused by F<libc> itself, or F<Perl_yyparse> leaks. + +=head2 F<time> + +A helper tool for perl's 2038 support. See F<Porting/README.y2038> for details. + +=head2 F<timecheck2.c> + +A little program to test the limits of your system's time functions. See +F<Porting/README.y2038> for details. + +=head2 F<timecheck.c> + +A helper tool for perl's 2038 support See F<Porting/README.y2038> for details. + +=head2 F<todo.pod> + +This is a list of wishes for Perl. The most up-to-date version of this file is +at L<http://perl5.git.perl.org/perl.git/blob_plain/HEAD:/Porting/todo.pod>. +The tasks we think are smaller or easier are listed first. Anyone is welcome +to work on any of these, but it's a good idea to first contact +F<perl5-porters@perl.org> to avoid duplication of effort, and to learn from +any previous attempts. + +=head2 F<valgrindpp.pl> + +A post-processor for C<make test.valgrind>. F<valgrindpp.pl> is a +post-processor for F<.valgrind> files created during C<make test.valgrind>. It +collects all these files, extracts most of the information and produces a +significantly shorter summary of all detected memory access errors and memory +leaks. + +=cut + diff --git a/gnu/usr.bin/perl/Porting/acknowledgements.pl b/gnu/usr.bin/perl/Porting/acknowledgements.pl index bdfef41f2ba..20941092cca 100644 --- a/gnu/usr.bin/perl/Porting/acknowledgements.pl +++ b/gnu/usr.bin/perl/Porting/acknowledgements.pl @@ -7,7 +7,7 @@ Porting/acknowledgements.pl - Generate perldelta acknowledgements text =head1 SYNOPSIS perl Porting/acknowledgements.pl v5.15.0..HEAD - + =head1 DESCRIPTION This generates the text which goes in the Acknowledgements section in @@ -100,7 +100,7 @@ sub development_time { my $development_time; if ( $months < 2 ) { - return "$weeks weeks"; + return "$weeks @{[$weeks == 1 ? q(week) : q(weeks)]}"; } else { return "$months months"; } diff --git a/gnu/usr.bin/perl/Porting/bisect-runner.pl b/gnu/usr.bin/perl/Porting/bisect-runner.pl index ea1534b2771..ca4c12c4398 100644 --- a/gnu/usr.bin/perl/Porting/bisect-runner.pl +++ b/gnu/usr.bin/perl/Porting/bisect-runner.pl @@ -108,12 +108,14 @@ bisect.pl - use git bisect to pinpoint changes .../Porting/bisect.pl -e 'my $a := 2;' # When did this stop being an error? .../Porting/bisect.pl --expect-fail -e '1 // 2' - # When did this stop matching? + # When were all lines matching this pattern removed from all files? .../Porting/bisect.pl --match '\b(?:PL_)hash_seed_set\b' - # When did this start matching? + # When was some line matching this pattern added to some file? .../Porting/bisect.pl --expect-fail --match '\buseithreads\b' - # When did this test program stop working? + # When did this test program stop exiting 0? .../Porting/bisect.pl -- ./perl -Ilib ../test_prog.pl + # When did this test start failing? + .../Porting/bisect.pl -- ./perl -Ilib t/TEST op/sort.t # When did this first become valid syntax? .../Porting/bisect.pl --target=miniperl --end=v5.10.0 \ --expect-fail -e 'my $a := 2;' @@ -152,10 +154,12 @@ end revisions. By default F<bisect.pl> will process all options, then use the rest of the command line as arguments to list C<system> to run a test case. By default, the test case should pass (exit with 0) on earlier perls, and fail (exit -non-zero) on I<blead>. F<bisect.pl> will use F<bisect-runner.pl> to find the -earliest stable perl version on which the test case passes, check that it -fails on blead, and then use F<bisect-runner.pl> with C<git bisect run> to -find the commit which caused the failure. +non-zero) on I<blead> (note that running most of perl's test files directly +won't do this, you'll need to run them through a harness to get the proper +error code). F<bisect.pl> will use F<bisect-runner.pl> to find the earliest +stable perl version on which the test case passes, check that it fails on +blead, and then use F<bisect-runner.pl> with C<git bisect run> to find the +commit which caused the failure. Because the test case is the complete argument to C<system>, it is easy to run something other than the F<perl> built, if necessary. If you need to run @@ -317,17 +321,23 @@ revision. The bisect run will find the first commit where it passes. =item * --Dnoextensions=Encode +-D I<config_arg=value> =item * --Uusedevel +-U I<config_arg> =item * --Accflags=-DNO_MATHOMS +-A I<config_arg=value> -Arguments to pass to F<Configure>. Repeated C<-A> arguments are passed +Arguments (C<-A>, C<-D>, C<-U>) to pass to F<Configure>. For example, + + -Dnoextensions=Encode + -Uusedevel + -Accflags=-DNO_MATHOMS + +Repeated C<-A> arguments are passed through as is. C<-D> and C<-U> are processed in order, and override previous settings for the same parameter. F<bisect-runner.pl> emulates C<-Dnoextensions> when F<Configure> itself does not provide it, as it's diff --git a/gnu/usr.bin/perl/Porting/bump-perl-version b/gnu/usr.bin/perl/Porting/bump-perl-version index b867414fb19..627f907a513 100644 --- a/gnu/usr.bin/perl/Porting/bump-perl-version +++ b/gnu/usr.bin/perl/Porting/bump-perl-version @@ -26,6 +26,9 @@ # $ Porting/bump-perl-version -u < /tmp/scan # # (so line 52 of Porting/config.sh is now updated) +# +# The -i option can be used to combine these two steps (if you prefer to make +# all of the changes at once and then edit the results via git). # This utility 'knows' about certain files and formats, and so can spot # 'hidden' version numbers, like PERL_SUBVERSION=9. @@ -194,14 +197,6 @@ my @maps = ( qr/uconfig/, ], - # rename perl-5^.15^.1.dirperl-5_15_1.dir in README.vms - [ - qr{\sperl-(\d+)_(\d+)_(\d+)\.dir}x, - sub { " perl-${1}_${2}_${3}.dir", " perl-${newx}_${newy}_${newz}.dir" }, - " perl-${oldx}_${oldy}_{$oldz}.dir", - qr/README.vms/, - ], - ); @@ -212,6 +207,7 @@ my %SKIP_FILES = map { ($_ => 1) } qw( MANIFEST Porting/Maintainers.pl Porting/acknowledgements.pl + Porting/corelist-perldelta.pl Porting/epigraphs.pod Porting/how_to_write_a_perldelta.pod Porting/release_managers_guide.pod diff --git a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl index f42912fe59a..237a307818f 100755 --- a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl +++ b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl @@ -12,16 +12,17 @@ my (%authors, %untraced, %patchers, %committers, %real_names); my $result = GetOptions ( # modes - "who" => \$who, - "rank" => \$rank, + "who" => \$who, + "rank" => \$rank, "thanks-applied" => \$ta, - "missing" => \$ack , - "tap" => \$tap, + "missing" => \$ack , + "tap" => \$tap, + # modifiers - "authors" => \$author_file, - "percentage" => \$percentage, # show as %age - "cumulative" => \$cumulative, - "reverse" => \$reverse, + "authors=s" => \$author_file, + "percentage" => \$percentage, # show as %age + "cumulative" => \$cumulative, + "reverse" => \$reverse, ); if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) { @@ -29,7 +30,7 @@ if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) { } $author_file ||= './AUTHORS'; -die "Can't locate '$author_file'. Specify it with '--author <path>'." +die "Can't locate '$author_file'. Specify it with '--authors <path>'." unless -f $author_file; my $map = generate_known_author_map(); @@ -159,6 +160,7 @@ sub generate_known_author_map { "arbor\100al37al08.telecel.pt" , # reported perlbug ticket 5196 - no actual code contribution. no real name - jrv 20091006 "oracle\100pcr8.pcr.com", # Reported perlbug ticket 1015 - no patch - Probably Ed Eddington ed@pcr.com + "snaury\100gmail.com", # Reported cpan ticket 35943, with patch for fix ; # @@ -335,11 +337,17 @@ sub _raw_address { # # Try to find the author # - while (my ($email, $author_name) = each %authors) { - if ($name eq $author_name) { - $addr = $email; - $real_name = $name; - last; + if (exists $map->{$name}) { + $addr = $map->{$name}; + $real_name = $authors{$addr}; + } + else { + while (my ($email, $author_name) = each %authors) { + if ($name eq $author_name) { + $addr = $email; + $real_name = $name; + last; + } } } } @@ -364,7 +372,7 @@ __DATA__ # List of mappings. First entry the "correct" email address, as appears # in the AUTHORS file. Second is any "alias" mapped to it. # -# If the "correct" email address is a '+', the entry above is reused; +# If the "correct" email address is a '+', the entry above it is reused; # this for addresses with more than one alias. # # Note that all entries are in lowercase. Further, no '@' signs should @@ -553,8 +561,10 @@ blgl\100stacken.kth.se blgl\100hagernas.com + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com brian.d.foy\100gmail.com bdfoy\100cpan.org BQW10602\100nifty.com sadahiro\100cpan.org +bulk88\100hotmail.com bulk88 chromatic\100wgz.org chromatic\100rmci.net +ckuskie\100cadence.com colink\100perldreamer.com claes\100surfar.nu claes\100versed.se clintp\100geeksalad.org cpierce1\100ford.com clkao\100clkao.org clkao\100bestpractical.com @@ -585,6 +595,7 @@ dennis\100booking.com dennis\100camel.ams6.corp.booking.com dev-perl\100pimb.org knew-p5p\100pimb.org + lists-p5p\100pimb.org djberg86\100attbi.com djberg96\100attbi.com +dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org domo\100computer.org shouldbedomo\100mac.com + domo\100slipper.ip.lu + domo\100tcp.ip.lu @@ -695,6 +706,7 @@ lupe\100lupe-christoph.de lupe\100alanya.m.isar.de lutherh\100stratcom.com lutherh\100infinet.com mab\100wdl.loral.com markb\100rdcf.sm.unisys.com marcel\100codewerk.com gr\100univie.ac.at ++ hanekomu\100gmail.com marcgreen\100cpan.org marcgreen\100wpi.edu markleightonfisher\100gmail.com fisherm\100tce.com mark.p.lutz\100boeing.com tecmpl1\100triton.ca.boeing.com @@ -786,10 +798,13 @@ public\100khwilliamson.com khw\100karl.(none) + khw\100khw-desktop.(none) radu\100netsoft.ro rgreab\100fx.ro +rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com module@renee-baecker.de renee.baecker\100smart-websolutions.de + reneeb\100reneeb-desktop.(none) ++ github@renee-baecker.de + otrs\100ubuntu.(none) ++ perl\100renee-baecker.de richard.foley\100rfi.net richard.foley\100t-online.de + richard.foley\100ubs.com + richard.foley\100ubsw.com @@ -801,6 +816,7 @@ rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org + perl.p5p\100rjbs.manxome.org rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu + rjk-perl-p5p\100tamias.net ++ rjk\100tamias.net rjray\100redhat.com rjray\100uswest.com rmgiroux\100acm.org rmgiroux\100hotmail.com + mgiroux\100bear.com @@ -815,11 +831,13 @@ roberto\100keltia.freenix.fr roberto\100eurocontrol.fr robin\100cpan.org robin\100kitsite.com roderick\100argon.org roderick\100gate.net + roderick\100ibcinc.com +argrath\100ub32.org root\100ub32.org rootbeer\100teleport.com rootbeer\100redcat.com + tomphoenix\100unknown rurban\100x-ray.at rurban\100cpan.org + rurban\100cpanel.net sartak\100bestpractical.com sartak\100gmail.com ++ code\100sartak.org sadinoff\100olf.com danny-cpan\100sadinoff.com schubiger\100cpan.org steven\100accognoscere.org + sts\100accognoscere.org @@ -845,6 +863,8 @@ simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk + simon\100othersideofthe.earth.li + simon\100cozens.net + simon\100netthink.co.uk +lannings\100who.int lannings\100gmail.com ++ slanning\100cpan.org slaven\100rezic.de slaven.rezic\100berlin.de + srezic\100iconmobile.com + srezic\100cpan.org @@ -896,6 +916,7 @@ whatever\100davidnicol.com davidnicol\100gmail.com wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at + wolfgang.laun\100thalesgroup.com + wolfgang.laun\100gmail.com +wolfsage\100gmail.com mhorsfall\100darmstadtium.(none) yath\100yath.de yath-perlbug\100yath.de jkeen@verizon.net jkeenan@cpan.org diff --git a/gnu/usr.bin/perl/Porting/checkcfgvar.pl b/gnu/usr.bin/perl/Porting/checkcfgvar.pl index e6a819fbeb1..3ebde3a2d15 100755 --- a/gnu/usr.bin/perl/Porting/checkcfgvar.pl +++ b/gnu/usr.bin/perl/Porting/checkcfgvar.pl @@ -46,17 +46,13 @@ my @CFG = ( # We can't base our check on $], because that's the version of the # perl that we are running, not the version of the source tree. "Cross/config.sh-arm-linux", - "epoc/config.sh", "NetWare/config.wc", "symbian/config.sh", "uconfig.sh", "uconfig64.sh", "plan9/config_sh.sample", "win32/config.gc", - "win32/config.gc64", - "win32/config.gc64nox", "win32/config.vc", - "win32/config.vc64", "win32/config.ce", "configure.com", "Porting/config.sh", diff --git a/gnu/usr.bin/perl/Porting/checkpodencoding.pl b/gnu/usr.bin/perl/Porting/checkpodencoding.pl index a2d12df494e..a9363682754 100644 --- a/gnu/usr.bin/perl/Porting/checkpodencoding.pl +++ b/gnu/usr.bin/perl/Porting/checkpodencoding.pl @@ -30,21 +30,21 @@ sub finder { next if # Test cases - $file ~~ m[Pod-Simple/t]; + $file =~ m[Pod-Simple/t]; my ($in_pod, $has_encoding, @non_ascii); FILE: while (my $line = <$fh>) { chomp $line; - if ($line ~~ /^=[a-z]+/) { + if ($line =~ /^=[a-z]+/) { $in_pod = 1; } if ($in_pod) { - if ($line ~~ /^=encoding (\S+)/) { + if ($line =~ /^=encoding (\S+)/) { $has_encoding = 1; last FILE; - } elsif ($line ~~ /[^[:ascii:]]/) { + } elsif ($line =~ /[^[:ascii:]]/) { my $encoding = guess_encoding($line); push @non_ascii => { num => $., @@ -54,7 +54,7 @@ sub finder { } } - if ($line ~~ /^=cut/) { + if ($line =~ /^=cut/) { $in_pod = 0; } } diff --git a/gnu/usr.bin/perl/Porting/cmpVERSION.pl b/gnu/usr.bin/perl/Porting/cmpVERSION.pl index e618533a0a0..67fb926b83d 100644 --- a/gnu/usr.bin/perl/Porting/cmpVERSION.pl +++ b/gnu/usr.bin/perl/Porting/cmpVERSION.pl @@ -37,10 +37,23 @@ die "$0: 'This is a Perl directory but does not look like Git working directory\ my $null = devnull(); unless (defined $tag_to_compare) { + my $check = 'HEAD'; + while(1) { + $check = `git describe --abbrev=0 $check 2>$null`; + chomp $check; + last unless $check =~ /-RC/; + $check .= '^'; + } + $tag_to_compare = $check; # Thanks to David Golden for this suggestion. - $tag_to_compare = `git describe --abbrev=0`; - chomp $tag_to_compare; +} + +unless (length $tag_to_compare) { + die "$0: Git found, but no Git tags found\n" + unless $tap; + print "1..0 # SKIP: Git found, but no Git tags found\n"; + exit 0; } my $tag_exists = `git --no-pager tag -l $tag_to_compare 2>$null`; @@ -87,23 +100,31 @@ my $skip_dirs = qr|^t/lib|; sub pm_file_from_xs { my $xs = shift; - # First try a .pm at the same level as the .xs file, with the same basename - my $pm = $xs; - $pm =~ s/xs\z/pm/; - return $pm if -f $pm; - - # Try for a (different) .pm at the same level, based on the directory name: - my ($path) = $xs =~ m!^(.*)/!; - my ($last) = $path =~ m!([^-/]+)\z!; - $pm = "$path/$last.pm"; - return $pm if -f $pm; - - # Try to work out the extension's full package, and look for a .pm in lib/ - # based on that: - ($last) = $path =~ m!([^/]+)\z!; - $last =~ tr !-!/!; - $pm = "$path/lib/$last.pm"; - return $pm if -f $pm; + foreach my $try (sub { + # First try a .pm at the same level as the .xs file + # with the same basename + return shift =~ s/\.xs\z//r; + }, + sub { + # Try for a (different) .pm at the same level, based + # on the directory name: + my ($path) = shift =~ m!^(.*)/!; + my ($last) = $path =~ m!([^-/]+)\z!; + return "$path/$last"; + }, + sub { + # Try to work out the extension's full package, and + # look for a .pm in lib/ based on that: + my ($path) = shift =~ m!^(.*)/!; + my ($last) = $path =~ m!([^/]+)\z!; + $last =~ tr !-!/!; + return "$path/lib/$last"; + }) { + # For all cases, first look to see if the .pm file is generated. + my $base = $try->($xs); + return "${base}_pm.PL" if -f "${base}_pm.PL"; + return "${base}.pm" if -f "${base}.pm"; + } die "No idea which .pm file corresponds to '$xs', so aborting"; } @@ -122,7 +143,7 @@ foreach (`git --no-pager diff --name-only $tag_to_compare --diff-filter=ACMRTUXB my $this_dir = $1; next if $this_dir =~ $skip_dirs || exists $skip{$_}; next if exists $upstream_files{$_}; - if (/\.pm\z/ || m|^lib/.*\.pl\z|) { + if (/\.pm\z/ || m|^lib/.*\.pl\z| || /_pm\.PL\z/) { push @{$module_diffs{$_}}, $_; } elsif (/\.xs\z/ && !/\bt\b/) { push @{$module_diffs{pm_file_from_xs($_)}}, $_; @@ -138,6 +159,7 @@ printf "1..%d\n" => scalar keys %module_diffs if $tap; my $count; my $diff_cmd = "git --no-pager diff $tag_to_compare "; +my $q = ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'VMS') ? '"' : "'"; my (@diff); foreach my $pm_file (sort keys %module_diffs) { @@ -146,22 +168,25 @@ foreach my $pm_file (sort keys %module_diffs) { my $pm_version = eval {MM->parse_version($pm_file)}; my $orig_pm_content = get_file_from_git($pm_file, $tag_to_compare); my $orig_pm_version = eval {MM->parse_version(\$orig_pm_content)}; - - if ((!defined $pm_version || !defined $orig_pm_version) - || ($pm_version eq 'undef' || $orig_pm_version eq 'undef') # sigh - || ($pm_version ne $orig_pm_version) # good - ) { - printf "ok %d - %s\n", ++$count, $pm_file if $tap; + ++$count; + + if (!defined $orig_pm_version || $orig_pm_version eq 'undef') { # sigh + print "ok $count - SKIP Can't parse \$VERSION in $pm_file\n" + if $tap; + } elsif (!defined $pm_version || $pm_version eq 'undef') { + print "not ok $count - in $pm_file version was $orig_pm_version, now unparsable\n" if $tap; + } elsif ($pm_version ne $orig_pm_version) { # good + print "ok $count - $pm_file\n" if $tap; } else { if ($tap) { foreach (sort @{$module_diffs{$pm_file}}) { - print "# $_" for `$diff_cmd '$_'`; + print "# $_" for `$diff_cmd $q$_$q`; } if (exists $skip_versions{$pm_file} and grep $pm_version eq $_, @{$skip_versions{$pm_file}}) { - printf "ok %d - SKIP $pm_file version $pm_version\n", ++$count; + print "ok $count - SKIP $pm_file version $pm_version\n"; } else { - printf "not ok %d - %s\n", ++$count, $pm_file; + print "not ok $count - $pm_file\n"; } } else { push @diff, @{$module_diffs{$pm_file}}; @@ -179,6 +204,6 @@ sub get_file_from_git { if ($diffs) { for (sort @diff) { print "\n"; - system "$diff_cmd '$_'"; + system "$diff_cmd $q$_$q"; } } diff --git a/gnu/usr.bin/perl/Porting/config.sh b/gnu/usr.bin/perl/Porting/config.sh index e2c17eaad09..352d5c24afe 100644 --- a/gnu/usr.bin/perl/Porting/config.sh +++ b/gnu/usr.bin/perl/Porting/config.sh @@ -46,11 +46,11 @@ ansi2knr='' aphostname='' api_revision='5' api_subversion='0' -api_version='16' -api_versionstring='5.16.0' +api_version='18' +api_versionstring='5.18.0' ar='ar' -archlib='/opt/perl/lib/5.16.3/i686-linux-64int' -archlibexp='/opt/perl/lib/5.16.3/i686-linux-64int' +archlib='/opt/perl/lib/5.18.2/i686-linux-64int' +archlibexp='/opt/perl/lib/5.18.2/i686-linux-64int' archname64='64int' archname='i686-linux-64int' archobjs='' @@ -61,6 +61,7 @@ bash='' bin='/opt/perl/bin' binexp='/opt/perl/bin' bison='bison' +bootstrap_charset='undef' byacc='byacc' byteorder='12345678' c='' @@ -298,7 +299,10 @@ d_inetaton='define' d_inetntop='define' d_inetpton='define' d_int64_t='define' +d_ip_mreq='undef' +d_ip_mreq_source='undef' d_ipv6_mreq='undef' +d_ipv6_mreq_source='undef' d_isascii='define' d_isblank='undef' d_isfinite='undef' @@ -746,7 +750,7 @@ inc_version_list_init='0' incpath='' inews='' initialinstalllocation='/opt/perl/bin' -installarchlib='/opt/perl/lib/5.16.3/i686-linux-64int' +installarchlib='/opt/perl/lib/5.18.2/i686-linux-64int' installbin='/opt/perl/bin' installhtml1dir='' installhtml3dir='' @@ -754,13 +758,13 @@ installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' installprefix='/opt/perl' installprefixexp='/opt/perl' -installprivlib='/opt/perl/lib/5.16.3' +installprivlib='/opt/perl/lib/5.18.2' installscript='/opt/perl/bin' -installsitearch='/opt/perl/lib/site_perl/5.16.3/i686-linux-64int' +installsitearch='/opt/perl/lib/site_perl/5.18.2/i686-linux-64int' installsitebin='/opt/perl/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='/opt/perl/lib/site_perl/5.16.3' +installsitelib='/opt/perl/lib/site_perl/5.18.2' installsiteman1dir='/opt/perl/man/man1' installsiteman3dir='/opt/perl/man/man3' installsitescript='/opt/perl/bin' @@ -883,7 +887,7 @@ perl_patchlevel='34948' perl_static_inline='static __inline__' perladmin='yourname@yourhost.yourplace.com' perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc' -perlpath='/opt/perl/bin/perl5.16.3' +perlpath='/opt/perl/bin/perl5.18.2' pg='pg' phostname='' pidtype='pid_t' @@ -892,8 +896,8 @@ pmake='' pr='' prefix='/opt/perl' prefixexp='/opt/perl' -privlib='/opt/perl/lib/5.16.3' -privlibexp='/opt/perl/lib/5.16.3' +privlib='/opt/perl/lib/5.18.2' +privlibexp='/opt/perl/lib/5.18.2' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' @@ -959,17 +963,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' sig_size='69' signal_t='void' -sitearch='/opt/perl/lib/site_perl/5.16.3/i686-linux-64int' -sitearchexp='/opt/perl/lib/site_perl/5.16.3/i686-linux-64int' +sitearch='/opt/perl/lib/site_perl/5.18.2/i686-linux-64int' +sitearchexp='/opt/perl/lib/site_perl/5.18.2/i686-linux-64int' sitebin='/opt/perl/bin' sitebinexp='/opt/perl/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/opt/perl/lib/site_perl/5.16.3' +sitelib='/opt/perl/lib/site_perl/5.18.2' sitelib_stem='/opt/perl/lib/site_perl' -sitelibexp='/opt/perl/lib/site_perl/5.16.3' +sitelibexp='/opt/perl/lib/site_perl/5.18.2' siteman1dir='/opt/perl/man/man1' siteman1direxp='/opt/perl/man/man1' siteman3dir='/opt/perl/man/man3' @@ -995,7 +999,7 @@ src='.' ssizetype='ssize_t' st_ino_sign='1' st_ino_size='4' -startperl='#!/opt/perl/bin/perl5.16.3' +startperl='#!/opt/perl/bin/perl5.18.2' startsh='#!/bin/sh' static_ext=' ' stdchar='char' @@ -1008,7 +1012,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -subversion='3' +subversion='2' sysman='/usr/share/man/man1' tail='' tar='' @@ -1098,8 +1102,8 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.16.3' -version_patchlevel_string='version 16 subversion 3' +version='5.18.2' +version_patchlevel_string='version 18 subversion 2' versiononly='define' vi='' voidflags='15' @@ -1122,10 +1126,10 @@ config_arg7='-Duse64bitint' config_arg8='-Dusedevel' config_arg9='-dE' PERL_REVISION=5 -PERL_VERSION=16 -PERL_SUBVERSION=3 +PERL_VERSION=18 +PERL_SUBVERSION=2 PERL_API_REVISION=5 -PERL_API_VERSION=16 +PERL_API_VERSION=18 PERL_API_SUBVERSION=0 PERL_PATCHLEVEL=34948 PERL_CONFIG_SH=true diff --git a/gnu/usr.bin/perl/Porting/config_h.pl b/gnu/usr.bin/perl/Porting/config_h.pl index cf69b2ad320..0042526b16a 100755 --- a/gnu/usr.bin/perl/Porting/config_h.pl +++ b/gnu/usr.bin/perl/Porting/config_h.pl @@ -3,7 +3,10 @@ # This script reorders config_h.SH after metaconfig # Changing metaconfig is too complicated # -# Copyright (C) 2005-2007 by H.Merijn Brand (m)'07 [18-04-2007] +# This script is run just after metaconfig, and it +# is run ONLY ONCE. Not to be used afterwards +# +# Copyright (C) 2005-2012 by H.Merijn Brand (m)'12 [22-09-2012] # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the README file. @@ -68,6 +71,8 @@ push @ch, ";;\nesac\n"; open $ch, "> $cSH" or die "Cannot write $cSH: $!\n"; print $ch <<EOW; +#!/bin/sh +# # THIS IS A GENERATED FILE # DO NOT HAND-EDIT # diff --git a/gnu/usr.bin/perl/Porting/core-cpan-diff b/gnu/usr.bin/perl/Porting/core-cpan-diff index 2ecbc2c49fb..60a27d18c97 100644 --- a/gnu/usr.bin/perl/Porting/core-cpan-diff +++ b/gnu/usr.bin/perl/Porting/core-cpan-diff @@ -45,7 +45,6 @@ use constant SRC_DIR => 'tarballs'; use constant UNTAR_DIR => 'untarred'; use constant DIFF_CMD => 'diff'; -use constant WGET_CMD => 'wget'; sub usage { print STDERR "\n@_\n\n" if @_; @@ -59,7 +58,6 @@ Usage: $0 [opts] [ -d | -v | -x ] [ -a | module ... ] -d/--diff Display file differences using diff(1), rather than just listing which files have changed. - The diff(1) command is assumed to be in your PATH. --diffopts Options to pass to the diff command. Defaults to '-u'. @@ -88,6 +86,10 @@ those in the perl source tree. Must be run from the root of the perl source tree. Module names must match the keys of %Modules in Maintainers.pl. + +The diff(1) command is assumed to be in your PATH and is used to diff files +regardless of whether the --diff option has been chosen to display any file +differences. HERE exit(1); } @@ -120,6 +122,8 @@ sub run { 'x|crosscheck' => \$do_crosscheck, ) or usage; + @wanted_upstreams = map { $_ eq 'undef' ? undef : $_ } @wanted_upstreams; + my @modules; usage("Cannot mix -a with module list") if $scan_all && @ARGV; @@ -151,7 +155,9 @@ sub run { } if ( defined $cache_dir ) { - die "ERROR: no such directory: '$cache_dir'\n" unless -d $cache_dir; + die "ERROR: not a directory: '$cache_dir'\n" + if !-d $cache_dir && -e $cache_dir; + File::Path::mkpath($cache_dir); } else { $cache_dir = File::Temp::tempdir( CLEANUP => 1 ); @@ -165,7 +171,10 @@ sub run { ) or die "ERROR: not a CPAN mirror '$mirror_url'\n"; if ($do_crosscheck) { - do_crosscheck( $outfh, $cache_dir, $mirror_url, $force, \@modules ); + do_crosscheck( + $outfh, $cache_dir, $mirror_url, + $force, \@modules, \@wanted_upstreams + ); } else { do_compare( @@ -194,7 +203,7 @@ sub cpan_url_distribution { my ( $mirror_url, $distribution ) = @_; $distribution =~ /^([A-Z])([A-Z])/ or die "ERROR: invalid DISTRIBUTION name (not /^[A-Z]{2}/): $distribution\n"; - my $path = "modules/by-authors/id/$1/$1$2/$distribution"; + my $path = "authors/id/$1/$1$2/$distribution"; return cpan_url( $mirror_url, $path ); } @@ -217,6 +226,7 @@ sub do_compare { } my %ignorable = map { ( $_ => 1 ) } @Maintainers::IGNORABLE; + my %wanted_upstream = map { ( $_ => 1 ) } @$wanted_upstreams; my %seen_dist; for my $module (@$modules) { @@ -237,13 +247,13 @@ sub do_compare { warn "WARNING: duplicate entry for $dist in $module\n"; } - my $upstream = $m->{UPSTREAM} || 'UNKNOWN'; - next if @$wanted_upstreams and !( $upstream ~~ $wanted_upstreams ); + my $upstream = $m->{UPSTREAM}; + next if @$wanted_upstreams and !$wanted_upstream{$upstream}; print $outfh "\n$module - " . $Maintainers::Modules{$module}->{DISTRIBUTION} . "\n"; print $outfh " upstream is: " - . ( $m->{UPSTREAM} || 'UNKNOWN!' ) . "\n"; + . ( $m->{UPSTREAM} // 'UNKNOWN!' ) . "\n"; my $cpan_dir; eval { @@ -419,7 +429,10 @@ sub distro_base { # Maintainers.pl sub do_crosscheck { - my ( $outfh, $cache_dir, $mirror_url, $force, $modules ) = @_; + my ( + $outfh, $cache_dir, $mirror_url, + $force, $modules, $wanted_upstreams, + ) = @_; my $file = '02packages.details.txt'; my $download_dir = $cache_dir || File::Temp::tempdir( CLEANUP => 1 ); @@ -465,6 +478,7 @@ sub do_crosscheck { $distros{ distro_base($short_distro) }{$distro} = 1; } + my %wanted_upstream = map { ( $_ => 1 ) } @$wanted_upstreams; for my $module (@$modules) { my $m = $Maintainers::Modules{$module} or die "ERROR: No such module in Maintainers.pl: '$module'\n"; @@ -482,6 +496,9 @@ sub do_crosscheck { my $pdist = $m->{DISTRIBUTION}; die "ERROR: $module has no DISTRIBUTION entry\n" unless defined $pdist; + my $upstream = $m->{UPSTREAM}; + next if @$wanted_upstreams and !$wanted_upstream{$upstream}; + my $cdist = $modules{$module}; ( my $short_pdist = $pdist ) =~ s{^.*/}{}; @@ -563,8 +580,9 @@ sub get_map { sub cpan_to_perl { my ( $excluded, $map, $customized, $cpan_file ) = @_; + my %customized = map { ( $_ => 1 ) } @$customized; for my $exclude (@$excluded) { - next if $exclude ~~ $customized; + next if $customized{$exclude}; # may be a simple string to match exactly, or a pattern if ( ref $exclude ) { @@ -625,7 +643,7 @@ sub get_distribution { if ( -f $download_file and !-s $download_file ) { - # wget can leave a zero-length file on failed download + # failed download might leave a zero-length file unlink $download_file; } @@ -642,6 +660,7 @@ sub get_distribution { my $path = catfile( $untar_dir, $filename ); $path =~ s/\.tar\.gz$// + or $path =~ s/\.tgz$// or $path =~ s/\.zip$// or die "ERROR: downloaded file does not have a recognised suffix: $path\n"; diff --git a/gnu/usr.bin/perl/Porting/corelist-perldelta.pl b/gnu/usr.bin/perl/Porting/corelist-perldelta.pl index 44b6ea7ddc0..e6fb582ab9a 100755 --- a/gnu/usr.bin/perl/Porting/corelist-perldelta.pl +++ b/gnu/usr.bin/perl/Porting/corelist-perldelta.pl @@ -13,7 +13,7 @@ use Getopt::Long; ./perl Porting/corelist-perldelta.pl # generate a diff between the corelist sections of two perldelta* files: - perl Porting/corelist-perldelta.pl --mode=check 5.17.1 5.17.2 <perl5172delta.pod + perl Porting/corelist-perldelta.pl --mode=check 5.017001 5.017002 <perl5172delta.pod =head1 ABOUT @@ -49,15 +49,15 @@ my $deprecated; sub added { my ($mod, $old_v, $new_v) = @_; say "=item *\n"; - say "C<$mod> $new_v has been added to the Perl core.\n"; + say "L<$mod> $new_v has been added to the Perl core.\n"; } sub updated { my ($mod, $old_v, $new_v) = @_; say "=item *\n"; - say "C<$mod> has been upgraded from version $old_v to $new_v.\n"; + say "L<$mod> has been upgraded from version $old_v to $new_v.\n"; if ( $deprecated->{$mod} ) { - say "NOTE: C<$mod> is deprecated and may be removed from a future version of Perl.\n"; + say "NOTE: L<$mod> is deprecated and may be removed from a future version of Perl.\n"; } } diff --git a/gnu/usr.bin/perl/Porting/corelist.pl b/gnu/usr.bin/perl/Porting/corelist.pl index c5952c30284..c60b5df5200 100755 --- a/gnu/usr.bin/perl/Porting/corelist.pl +++ b/gnu/usr.bin/perl/Porting/corelist.pl @@ -106,7 +106,6 @@ find( $module =~ s{^Sys-Syslog/win32}{Sys-Syslog}, $module =~ s{^Time-Piece/Seconds}{Time/Seconds}, ); - $module =~ s{^vms/ext}{VMS}; $module =~ s{^lib/}{}g; $module =~ s{/}{::}g; $module =~ s{-}{::}g; @@ -115,7 +114,6 @@ find( $lines{$module} = $version; $module_to_file{$module} = $File::Find::name; }, - 'vms/ext', 'symbian/ext', 'lib', 'ext', @@ -131,13 +129,29 @@ if ( open my $ucdv, "<", "lib/unicore/version" ) { close $ucdv; } +my $delta_data = make_corelist_delta( + $perl_vnum, + \%lines, + \%Module::CoreList::version +); + my $versions_in_release = " " . $perl_vnum . " => {\n"; -foreach my $key ( sort keys %lines ) { - $versions_in_release .= sprintf "\t%-24s=> %s,\n", "'$key'", $lines{$key}; +$versions_in_release .= " delta_from => $delta_data->{delta_from},\n"; +$versions_in_release .= " changed => {\n"; +foreach my $key (sort keys $delta_data->{changed}) { + $versions_in_release .= sprintf " %-24s=> %s,\n", "'$key'", + defined $delta_data->{changed}{$key} ? "'" + . $delta_data->{changed}{$key} . "'" : "undef"; +} +$versions_in_release .= " },\n"; +$versions_in_release .= " removed => {\n"; +for my $key (sort keys($delta_data->{removed} || {})) { + $versions_in_release .= sprintf " %-24s=> %s,\n", "'$key'", 1; } +$versions_in_release .= " }\n"; $versions_in_release .= " },\n"; -$corelist =~ s/^(%version\s*=\s*.*?)(^\);)$/$1$versions_in_release$2/xism; +$corelist =~ s/^(my %delta\s*=\s*.*?)(^\);)$/$1$versions_in_release$2/ism; exit unless %modlist; @@ -145,6 +159,18 @@ exit unless %modlist; # data by "Module", which is really a dist. my $file_to_M = files_to_modules( values %module_to_file ); +sub slurp_utf8($) { + open my $fh, "<:utf8", "$_[0]" + or die "can't open $_[0] for reading: $!"; + return do { local $/; <$fh> }; +} + +sub parse_cpan_meta($) { + return Parse::CPAN::Meta->${ + $_[0] =~ /\A\x7b/ ? \"load_json_string" : \"load_yaml_string" + }($_[0]); +} + my %module_to_upstream; my %module_to_dist; my %dist_to_meta_YAML; @@ -171,17 +197,18 @@ while ( my ( $module, $file ) = each %module_to_file ) { # Like it or lump it, this has to be Unix format. my $meta_YAML_path = "authors/id/$dist"; - $meta_YAML_path =~ s/(?:tar\.gz|tar\.bz2|zip|tgz)$/meta/ or die "$meta_YAML_path"; + $meta_YAML_path =~ s/(?:tar\.gz|tar\.bz2|zip|tgz)$/meta/ + or die "ERROR: bad meta YAML path: '$meta_YAML_path'"; my $meta_YAML_url = 'http://ftp.funet.fi/pub/CPAN/' . $meta_YAML_path; if ( -e "$cpan/$meta_YAML_path" ) { - $dist_to_meta_YAML{$dist} = Parse::CPAN::Meta::LoadFile( $cpan . "/" . $meta_YAML_path ); + $dist_to_meta_YAML{$dist} = parse_cpan_meta(slurp_utf8( $cpan . "/" . $meta_YAML_path )); } elsif ( my $content = fetch_url($meta_YAML_url) ) { unless ($content) { warn "Failed to fetch $meta_YAML_url\n"; next; } - eval { $dist_to_meta_YAML{$dist} = Parse::CPAN::Meta::Load($content); }; + eval { $dist_to_meta_YAML{$dist} = parse_cpan_meta($content); }; if ( my $err = $@ ) { warn "$meta_YAML_path: ".$err; next; @@ -206,13 +233,31 @@ $upstream_stanza .= ");"; $corelist =~ s/^%upstream .*? ;$/$upstream_stanza/ismx; # Deprecation generation -my $deprecated_stanza = " " . $perl_vnum . " => {\n"; -foreach my $module ( sort keys %module_to_deprecated ) { - my $deprecated = defined $module_to_deprecated{$module} ? "'$module_to_deprecated{$module}'" : 'undef'; - $deprecated_stanza .= sprintf "\t%-24s=> %s,\n", "'$module'", $deprecated; +{ + my $delta_data = make_corelist_delta( + $perl_vnum, + \%module_to_deprecated, + do { no warnings 'once'; \%Module::CoreList::deprecated }, + ); + + my $deprecated_stanza = " " . $perl_vnum . " => {\n"; + $deprecated_stanza .= " delta_from => $delta_data->{delta_from},\n"; + $deprecated_stanza .= " changed => {\n"; + foreach my $key (sort keys $delta_data->{changed}) { + $deprecated_stanza .= sprintf " %-24s=> %s,\n", "'$key'", + defined $delta_data->{changed}{$key} ? "'" + . $delta_data->{changed}{$key} . "'" : "undef"; + } + $deprecated_stanza .= " },\n"; + $deprecated_stanza .= " removed => {\n"; + for my $key (sort keys($delta_data->{removed} || {})) { + $deprecated_stanza .= sprintf " %-24s=> %s,\n", "'$key'", 1; + } + $deprecated_stanza .= " }\n"; + $deprecated_stanza .= " },\n"; + + $corelist =~ s/^(%deprecated\s*=\s*.*?)(^\);)$/$1$deprecated_stanza$2/xism; } -$deprecated_stanza .= " },\n"; -$corelist =~ s/^(%deprecated\s*=\s*.*?)(^\);)$/$1$deprecated_stanza$2/xism; my $tracker = "%bug_tracker = (\n"; foreach my $module ( sort keys %module_to_upstream ) { @@ -226,8 +271,9 @@ foreach my $module ( sort keys %module_to_upstream ) { my $dist = $module_to_dist{$module}; $bug_tracker = $dist_to_meta_YAML{$dist}->{resources}{bugtracker} if $dist; + $bug_tracker = $bug_tracker->{web} if ref($bug_tracker) eq "HASH"; - $bug_tracker = defined $bug_tracker ? "'$bug_tracker'" : 'undef'; + $bug_tracker = defined $bug_tracker ? quote($bug_tracker) : 'undef'; next if $bug_tracker eq "'http://rt.perl.org/perlbug/'"; $tracker .= sprintf " %-24s=> %s,\n", "'$module'", $bug_tracker; } @@ -254,7 +300,7 @@ my $pod = join( '', <$pod_fh> ); unless ( $pod =~ /and $perl_vstring releases of perl/ ) { warn "Adding $perl_vstring to the list of perl versions covered by Module::CoreList\n"; - $pod =~ s/(currently covers (?:.*?))\s*and (.*?) releases of perl/$1, $2 and $perl_vstring releases of perl/ism; + $pod =~ s/(currently\s+covers\s+(?:.*?))\s*and\s+(.*?)\s+releases\s+of\s+perl/$1, $2 and $perl_vstring releases of perl/ism; } write_corelist($pod,$pod_file); @@ -266,6 +312,7 @@ sub write_corelist { my $content = shift; my $filename = shift; open (my $clfh, ">", $filename); + binmode $clfh; print $clfh $content; close($clfh); } @@ -281,3 +328,69 @@ sub fetch_url { return; } } + +sub make_corelist_delta { + my($version, $lines, $existing) = @_; + # Trust core perl, if someone does use a weird version number the worst that + # can happen is an extra delta entry for a module. + my %versions = map { $_ => eval $lines->{$_} } keys %$lines; + + # Ensure we have the corelist data loaded from this perl checkout, not the system one. + require $corelist_file; + + my %deltas; + # Search for the release with the least amount of changes (this avoids having + # to ask for where this perl was branched from). + for my $previous(reverse sort keys %$existing) { + # Shouldn't happen, but ensure we don't load weird data... + next if $previous > $version || $previous == $version && $previous eq $version; + + my $delta = $deltas{$previous} = {}; + ($delta->{changed}, $delta->{removed}) = calculate_delta( + $existing->{$previous}, \%versions); + } + + my $smallest = (sort { + (keys($deltas{$a}->{changed}) + keys($deltas{$a}->{removed})) <=> + (keys($deltas{$b}->{changed})+ keys($deltas{$b}->{removed})) + } keys %deltas)[0]; + + return { + delta_from => $smallest, + changed => $deltas{$smallest}{changed}, + removed => $deltas{$smallest}{removed}, + } +} + +# Calculate (changed, removed) modules between two versions. +sub calculate_delta { + my($from, $to) = @_; + my(%changed, %removed); + + for my $package(keys $from) { + if(not exists $to->{$package}) { + $removed{$package} = 1; + } + } + + for my $package(keys $to) { + if(!exists $from->{$package} + || (defined $from->{$package} && !defined $to->{$package}) + || (!defined $from->{$package} && defined $to->{$package}) + || (defined $from->{$package} && defined $to->{$package} + && $from->{$package} ne $to->{$package})) { + $changed{$package} = $to->{$package}; + } + } + + return \%changed, \%removed; +} + +sub quote { + my ($str) = @_; + # There's gotta be something already doing this properly that we could just + # reuse, but I can't quite thing of where to look for it, so I'm gonna do + # the simplest possible thing that'll allow me to release 5.17.7. --rafl + $str =~ s/'/\\'/g; + "'${str}'"; +} diff --git a/gnu/usr.bin/perl/Porting/epigraphs.pod b/gnu/usr.bin/perl/Porting/epigraphs.pod index 5fee947d7ab..dc20fb71424 100644 --- a/gnu/usr.bin/perl/Porting/epigraphs.pod +++ b/gnu/usr.bin/perl/Porting/epigraphs.pod @@ -17,24 +17,349 @@ Consult your favorite dictionary for details. =head1 EPIGRAPHS +=head2 v5.17.10 - Vernor Vinge, A Fire Upon The Deep + +L<Announced on 2013-03-22 by Max Maischein|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-03/msg00908.html> + +The archive informed the automation. Data structures were built, recipes +followed. A local network was built, faster than anything on Straum, but surely +safe. Nodes were added, modified by other recipes. The archive was a friendly +place, with hierarchies of translation keys that led them along. Straum itself +would be famous for this. + +Six months passed. A year. + +The omniscient view. Not self-aware really. Self-awareness is much over-rated. +Most automation works far better as a part of a whole, and even if human- +powerful, it does not need to self-know. + +=head2 v5.16.3 - Devo, Freedom of Choice + +L<Announced on 2013-03-11 by Ricardo Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-03/msg00414.html> + + A victim of collision on the open sea + Nobody ever said that life was free + Sink, swim, go down with the ship + But use your freedom of choice + +=head2 v5.14.4 - Arthur C. Clarke, The Nine Billion Names of God + +L<Announced on 2013-03-11 by Dave Mitchell|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-03/msg00393.html> + +He began to sing, but gave it up after a while. This vast arena of +mountains, gleaming like whitely hooded ghosts on every side, did not +encourage such ebullience. Presently George glanced at his watch. + +'Should be there in an hour,' he called back over his shoulder to +Chuck. Then he added, in an afterthought: 'Wonder if the computer's +finished its run. It was due about now.' + +Chuck didn't reply, so George swung round in his saddle. He could just +see Chuck's face, a white oval turned towards the sky. + +'Look,' whispered Chuck, and George lifted his eyes to heaven. (There +is always a last time for everything.) + +Overhead, without any fuss, the stars were going out. + + +=head2 v5.17.9 - Douglas Adams, The Hitch-Hikers Guide to the Galaxy + +L<Announced on 2013-02-20 by Chris 'BinGOs' Williams|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-02/msg01146.html> + +Vogon poetry is of course, the third worst in the universe. +The second worst is that of the Azgoths of Kria. During a +recitation by their poet master Grunthos the Flatulent of +his poem 'Ode To A Small Lump of Green Putty I Found In My +Armpit One Midsummer Morning' four of his audience died +of internal haemorrhaging and the president of the +Mid-Galactic Arts Nobbling Council survived by gnawing one +of his own legs off. Grunthos is reported to have been +'disappointed' by the poem's reception, and was about to +embark on a reading of his twelve-book epic entitled +'My Favourite Bathtime Gurgles' when his own major intestine, +in a desperate attempt to save life and civilisation, +leapt straight up through his neck and throttled his brain. + +The very worst poetry of all perished along with its creator +Paula Nancy Millstone Jennings of Greenbridge, Essex, England, +in the destruction of the planet Earth. + +=head2 v5.17.8 - Iain Pears, An Instance of the Fingerpost + +L<Announced on 2013-01-20 by Aaron Crane|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00518.html> + +I must here declare myself as someone who does not for a moment subscribe to +the general view that a willingness to perform oneself is detrimental to the +dignity of experimental philosophy. There is, after all, a clear distinction +between labour carried out for financial reward, and that done for the +improvement of mankind: to put it another way, Lower as a philosopher was +fully my equal even if he fell away when he became the practising physician. +I think ridiculous of certain professors of anatomy, who find it beneath +them to pick up the knife themselves, but merely comment while hired hands +do the cutting. Sylvius would never have dreamt of sitting on a dais reading +from an authority while others cut E<0x2014> when he taught, the knife was +in his hand and the blood spattered his coat. Boyle also did not scruple to +perform his own experiments and, on one occasion in my presence, even showed +himself willing to anatomise a rat with his very own hands. Nor was he less +a gentleman when he had finished. Indeed, in my opinion, his stature was all +the greater, for in Boyle wealth, humility and curiosity mingled, and the +world is richer for it. + +=head2 v5.17.7 - R. Scott Bakker, The Darkness That Comes Before + +L<Announced on 2012-12-18 by Dave Rolsky|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-12/msg00679.html> + +No thought. + The boy extinguished. Only a place. + This place. + Motionless, the Pragma sat facing him, the bare soles of his feet flat against each other, his dark frock scored by the shadows of deep folds, his eyes as empty as the child they watched. + A place without breath or sound. A place of sight alone. A place without before or after . . . almost. + For the first lances of sunlight careered over the glacier, as ponderous as great tree limbs in the wind. Shadows hardened and light gleamed across the Pragma’s ancient skull. + The old man’s left hand forsook his right sleeve, bearing a watery knife. And like a rope in water, his arm pitched outward, fingertips trailing across the blade as the knife swung languidly into the air, the sun skating and the dark shrine plunging across its mirror back . . . + And the place where Kellhus had once existed extended an open hand—the blond hairs like luminous filaments against tanned skin—and grasped the knife from stunned space. + The slap of pommel against palm triggered the collapse of place into little boy. The pale stench of his body. Breath, sound, and lurching thoughts. + I have been legion . . . + In his periphery, he could see the spike of the sun ease from the mountain. He felt drunk with exhaustion. In the recoil of his trance, it seemed all he could hear were the twigs arching and bobbing in the wind, pulled by leaves like a million sails no bigger than his hand. Cause everywhere, but amid countless minute happenings—diffuse, useless. + Now I understand. + +=head2 v5.17.6 - Kurt Vonnegut, The Sirens of Titan + +L<Announced on 2012-11-20 by Ricardo Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-11/msg00760.html> + +Beatrice, looking like a gypsy queen, smoldered at the foot of a statue +of a young physical student. At first glance, the laboratory-gowned +scientist seemed to be a perfect servant of nothing but truth. At first +glance, one was convinced that nothing but truth could please him as he +beamed at his test tube. At first glance, one thought that he was as +much above the beastly concerns of mankind as the harmoniums in the +caves of Mercury. There, at first glance, was a young man without +vanity, without lust — and one accepted at its face value the title Salo +had engraved on the statue, "Discovery of Atomic Power." + +=head2 v5.12.5 - William Shakespeare, Measure for Measure + +Announced on 2012-11-10 by Dominic Hargreaves + + Music oft hath such a charm + To make bad good, and good provoke to harm. + +=head2 v5.16.2 - Stanislaw Lem, The Cyberiad, Trurl's Machine + +L<Announced on 2012-11-01 by Ricardo Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-11/msg00017.html> + +Once upon a time Trurl the constructor built an eight-story thinking +machine. When it was finished, he gave it a coat of white paint, +trimmed the edges in lavender, stepped back, squinted, then added a +little curlicue on the front and, where one might imagine the forehead +to be, a few pale orange polkadots. Extremely pleased with himself, +he whistled an air and, as is always done on such occasions, asked it +the ritual question of how much is two plus two. + +The machine stirred. Its tubes began to glow, its coils warmed up, +current coursed through all its circuits like a waterfall, +transformers hummed and throbbed, there was a clanging, and a +chugging, and such an ungodly racket that Trurl began to think of +adding a special mentation muffler. Meanwhile the machine labored on, +as if it had been given the most difficult problem in the Universe to +solve; the ground shook, the sand slid underfoot from the vibration, +valves popped like champagne corks, the relays nearly gave way under +the strain. At last, when Trurl had grown extremely impatient, the +machine ground to a halt and said in a voice like thunder: SEVEN! + +=head2 v5.17.5 - Charles Stross, "Singularity Sky" + +L<Announced on 2012-10-20 by Florian Ragwitz|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-10/msg01007.html> + +Neither of them noticed the pair of polka-dotted knickers hiding +behind the ventilation duct overhead, listening patiently and +recording everything. + +=head2 v5.17.4 - Roald Dahl, "Little Red Riding Hood and the Wolf" + +L<Announced on 2012-09-20 by Florian Ragwitz|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-09/msg01226.html> + + The small girl smiles. One eyelid flickers. + She whips a pistol from her knickers. + She aims it at the creature's head, + And bang bang bang, she shoots him dead. + + A few weeks later, in the wood, + I came across Miss Riding Hood. + But what a change! No cloak of red, + No silly hood upon her head. + She said, "Hello, and do please note + My lovely furry wolfskin coat." + +=head2 v5.17.3 - Kris Ta-belle, "Smoked Perl Onion Soup" + +L<Announced on 2012-08-20 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2012/08/msg190775.html> + +Preparation: + +Cut 16 Perl Onions into quarters and put them in a grill smoker rack +or a perforated pan over a BBQ using hickory wood chips or Special +Blend Smoker Bisquettes. Smoke them for an hour and remove once they +look golden brown. +Let them cool and put them in the fridge (or freezer) until you are +ready to create the soup. + +Ingredients: + + 16 diced, pre-smoked, Perl Onions + 3 tbsp butter + 1/4 cup olive oil + 2 small garlic cloves, finely minced + 1 tsp salt + 1 tsp sugar + black pepper to taste + 1 cup red wine + 1/4 cup all purpose flour + 6 cups of beef or vegetable stock + 1 cup of thick cream (milk can be used as a substitute) + +Method: + + Melt the butter in a pan and then add olive oil. + Heat and add the onions to caramelize over a medium-high heat for up + to half an hour. + Add the garlic, turn down the heat and cook for a further 5 minutes. + Add the salt, pepper and sugar. + Now add the red wine and reduce to a jam like consistency. + Add the flour, stir well and add the stock a cup at a time. + Simmer for 30 minutes, add the cream and heat to almost boiling. + +Enjoy. + +=head2 v5.17.2 - Terry Pratchet, "The Colour of Magic" + +L<Announced on 2012-07-21 by TonyC|http://www.nntp.perl.org/group/perl.perl5.porters/2012/07/msg189828.html> + +‘I knew it,’ said Rincewind. ‘We're in a strong magical field.’ + +Twoflower and Hrun looked around the little hollow where they had made +their noonday halt. Then they looked at each other. + +The horses were quietly cropping the rich grass by the stream. Yellow +butterflies skittered among the bushes. There was a smell of thyme +and a buzzing of bees. The wild pigs on the spit sizzled gently. + +Hrun shrugged and went back to oiling his biceps. They gleamed. + +‘Looks alright to me,’ he said. + +‘Try tossing a coin,’ said Rincewind. + +‘What?’ + +‘Go on. Toss a coin.’ + +‘Hokay,’ said Hrun. 'If that gives you any pleasure.’ He reached into +his pouch and withdrew a handful of loose change plundered from a +dozen realms. With some care he selected a Zchloty leaden +quarter-iotum and balanced it on a purple thumbnail. + +‘You call,’ he said. ‘Heads or—’ he inspected the obverse with +an air of intense concentration, ‘some sort of a fish with legs.’ + +‘When it's in the air,’ said Rincewind. Hrun grinned and flicked his thumb. + +The iotum rose, spinning. + +‘Edge,’ said Rincewind, without looking at it. + +=head2 v5.17.1 - Rand Miller, "Myst: The Book of Ti'ana" + +L<Announced on 2012-06-20 by doy|http://www.nntp.perl.org/group/perl.perl5.porters/2012/06/msg188354.html> + +On their return from Ko'ah, Aitrus had shown her the Book, patiently +taking her through page after page, and showing her how such an Age was +"made." She had seen at once the differences between this archaic form +and the ordinary written speech of the D'ni, noting how it was not +merely more elaborate but more specific: a language of precise yet +subtle descriptive power. Yet seeing was one thing, believing another. +Given all the evidence, her rational mind still fought against accepting +it. + +=head2 v5.17.0 - Charles Stross, "Singularity Sky" + +L<Announced on 2012-05-26 by Zefram|http://www.nntp.perl.org/group/perl.perl5.porters/2012/05/msg187214.html> + +`Welcome, comrades!' Burya opened his arms toward the soldier. +`Yes it is true! With help from our allies of the Festival, the iron +hand of the reactionary junta is about to be overthrown for all time! +The new economy is being born; the marginal cost of production has +been abolished, and from now on, if any item is produced once, it can +be replicated infinitely. From each according to his imagination, +to each according to his needs! Join us or better still, bring your +fellow soldiers and workers to join us!' + +There was a sharp bang from the roof of the Corn Exchange, right at the +climax of his impromptu speech; heads turned in alarm. Something had +broken inside the spork factory and a stream of rainbow-hued plastic +implements fountained toward the sky and clattered to the cobblestones +on every side, like a harbinger of the postindustrial society to come. +Workers and peasants alike stared in open-mouthed bewilderment at this +astounding display of productivity, then bent to scrabble in the muck +for the brightly colored sporks of revolution. A volley of shots rang +out and Burya Rubenstein raised his hands, grinning wildly, to accept +the salute of the soldiers from the Skull Hill garrison. + +=head2 v5.16.1 - Emerald Rose - Never Split The Party + +L<Announced on 2012-08-08 by Ricardo +Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-08/msg00307.html> + + Don't you know? You never split the party + Clerics in the back to keep those fighters hale and hearty + The wizard in the middle, where he can shed some light + And you never let that damn thief out of sight… + + -- Emerald Rose, Never Split The Party + +=head2 v5.16.1 RC1 - Tom Moldvay - Dungeons & Dragons + +L<Announced on 2012-08-03 by Ricardo +Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-08/msg00157.html> + +I was busy rescuing the captured maiden when the dragon showed up. +Fifty feed of scaled terror glared down at us with smoldering red eyes. +Tendrils of smoke drifted out from between fangs larger than daggers. +The dragon blocked the only exit from the cave. + +⋮ + +I unwrapped the sword which the mysterious cleric had given me. The +sword was golden-tinted steel. Its hilt was set with a rainbow +collection of precious gems. I shouted my battle cry and charged + +My charge caught the dragon by surprise. Its titanic jaws snapped shut +inches from my face. I swung the golden sword with both arms. The +swordblade bit into the dragon's neck and continued through to the other +side. With an earth-shaking crash, the dragon dropped dead at my feet. +The magic sword had saved my life and ended the reign of the +dragon-tyrant. The countryside was freed and I could return as a hero. + + -- Tom Moldvay, Foreward to the Dungeons & Dragons Basic Rulebook + =head2 v5.16.0 - W.H. Auden - September 1, 1939 L<Announced on 2012-05-20 by Ricardo Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2012-05/msg00728.html> - All I have is a voice - To undo the folded lie, - The romantic lie in the brain - Of the sensual man-in-the-street - And the lie of Authority - Whose buildings grope the sky: - There is no such thing as the State - And no one exists alone; - Hunger allows no choice - To the citizen or the police; - We must love one another or die. + All I have is a voice + To undo the folded lie, + The romantic lie in the brain + Of the sensual man-in-the-street + And the lie of Authority + Whose buildings grope the sky: + There is no such thing as the State + And no one exists alone; + Hunger allows no choice + To the citizen or the police; + We must love one another or die. - -- W.H. Auden, September 1, 1939 + -- W.H. Auden, September 1, 1939 =head2 v5.15.9 - Bob Dylan - Blowin' In The Wind @@ -186,6 +511,25 @@ don't have enough dots to connect, and they end up with very linear solutions without a broad perspective on the problem. The broader one's understanding of the human experience, the better design we will have. +=head2 v5.14.3 - William Shakespeare, As You Like It + +L<Announced on 2012-10-12 by Dominic Hargreaves|http://www.nntp.perl.org/group/perl.perl5.porters/2012/10/msg194057.html> + + The poor world is almost six thousand years old, and in all + this time there was not any man died in his own person, + videlicit, in a love-cause. Troilus had his brains dashed + out with a Grecian club; yet he did what he could to die + before, and he is one of the patterns of love. Leander, he + would have lived many a fair year, though Hero had turned + nun, if it had not been for a hot midsummer night; for, good + youth, he went but forth to wash him in the Hellespont and + being taken with the cramp was drowned and the foolish + coroners of that age found it was 'Hero of Sestos.' But these + are all lies: men have died from time to time and worms have + eaten them, but not for love. + + -- As You Like It, William Shakespeare + =head2 v5.14.2 - L<< Larry Wall, January 12, 1988 <992@devvax.JPL.NASA.GOV> |http://groups.google.com/group/comp.sources.d/msg/5d17fa68c250b9b2 >> L<Announced on 2011-09-26 by Florian @@ -232,21 +576,21 @@ Little|http://www.nntp.perl.org/group/perl.perl5.porters/2011/09/msg177427.html> L<Announced on 2011-08-20 by Ricardo Signes|http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2011-08/msg00694.html> -True, it is strange to live no more on earth, -no longer follow the folkways scarecely learned; -not to give roses and other especially auspicious -things the significance of a human future; -to be no more what one was in infinitely anxious hands, -and to put aside even one's name, like a broken plaything. -Strange, to wish wishes no longer. Strange, to see -all that was related fluttering so loosely in space. -And being dead is hard, full of catching-up, -so that finally one feels a little eternity.– -But the living all make the mistake of too sharp discrimination. -Often angels (it's said) don't know if they move -among the quick or the dead. The eternal current -hurtles all ages along with it forever -through both realms and drowns their voices in both. + True, it is strange to live no more on earth, + no longer follow the folkways scarecely learned; + not to give roses and other especially auspicious + things the significance of a human future; + to be no more what one was in infinitely anxious hands, + and to put aside even one's name, like a broken plaything. + Strange, to wish wishes no longer. Strange, to see + all that was related fluttering so loosely in space. + And being dead is hard, full of catching-up, + so that finally one feels a little eternity.– + But the living all make the mistake of too sharp discrimination. + Often angels (it's said) don't know if they move + among the quick or the dead. The eternal current + hurtles all ages along with it forever + through both realms and drowns their voices in both. -- Rainer Maria Rilke, Duino, The First Elegy trans., C. F. MacIntyre @@ -285,18 +629,18 @@ L<Announced on 2011-06-20 by David Golden|http://www.nntp.perl.org/group/perl.pe L<Announced on 2011-06-20 by Leon Brocard|http://www.nntp.perl.org/group/perl.perl5.porters/2011/06/msg173725.html> -You cannot eat breakfast all day, -Nor is it the act of a sinner, -When breakfast is taken away, -To turn his attention to dinner; -And it's not in the range of belief, -To look upon him as a glutton, -Who, when he is tired of beef, -Determines to tackle the mutton. -Ah! But this I am willing to say, -If it will appease her sorrow, -I'll marry this lady today, -And I'll marry the other tomorrow! + You cannot eat breakfast all day, + Nor is it the act of a sinner, + When breakfast is taken away, + To turn his attention to dinner; + And it's not in the range of belief, + To look upon him as a glutton, + Who, when he is tired of beef, + Determines to tackle the mutton. + Ah! But this I am willing to say, + If it will appease her sorrow, + I'll marry this lady today, + And I'll marry the other tomorrow! =head2 v5.14.1 - L<< Larry Wall, January 12, 1988 <992@devvax.JPL.NASA.GOV> |http://groups.google.com/group/comp.sources.d/msg/5d17fa68c250b9b2 >> @@ -316,36 +660,36 @@ unreadable conglomeration of awk, sed, sh and C. L<Announced on 2011-06-15 by Leon Brocard|http://www.nntp.perl.org/group/perl.perl5.porters/2011/06/msg173609.html> -Now for sugar, -- nay, our plan -Tolerates no work of man. -Hurry, then, ye golden bees; -Fetch your clearest honey, please, -Garnered on a Yorkshire moor, -While the last larks sing and soar, -From the heather-blossoms sweet -Where sea-breeze and sunshine meet, -And the Augusts mask as Junes, -- -Eleanor makes macaroons! + Now for sugar, -- nay, our plan + Tolerates no work of man. + Hurry, then, ye golden bees; + Fetch your clearest honey, please, + Garnered on a Yorkshire moor, + While the last larks sing and soar, + From the heather-blossoms sweet + Where sea-breeze and sunshine meet, + And the Augusts mask as Junes, -- + Eleanor makes macaroons! =head2 v5.12.4-RC1 - Ogden Nash, "The Clean Plater" L<Announced on 2011-06-08 by Leon Brocard|http://www.nntp.perl.org/group/perl.perl5.porters/2011/06/msg173352.html> -Pheasant is pleasant, of course, -And terrapin, too, is tasty, -Lobster I freely endorse, -In pate or patty or pasty. -But there's nothing the matter with butter, -And nothing the matter with jam, -And the warmest greetings I utter -To the ham and the yam and the clam. -For they're food, -All food, -And I think very fondly of food. -Through I'm broody at times -When bothered by rhymes, -I brood -On food. + Pheasant is pleasant, of course, + And terrapin, too, is tasty, + Lobster I freely endorse, + In pate or patty or pasty. + But there's nothing the matter with butter, + And nothing the matter with jam, + And the warmest greetings I utter + To the ham and the yam and the clam. + For they're food, + All food, + And I think very fondly of food. + Through I'm broody at times + When bothered by rhymes, + I brood + On food. =head2 v5.14.0 - L<< Larry Wall, January 12, 1988 <992@devvax.JPL.NASA.GOV> |http://groups.google.com/group/comp.sources.d/msg/5d17fa68c250b9b2 >> @@ -491,20 +835,22 @@ L<Announced on 2010-11-20 by Chris 'BinGOs' Williams|http://www.nntp.perl.org/gr [Neo sees a black cat walk by them, and then a similar black cat walk by them just like the first one] -Neo: Whoa. Deja vu. + Neo: Whoa. Deja vu. [Everyone freezes right in their tracks] -Trinity: What did you just say? -Neo: Nothing. Just had a little deja vu. -Trinity: What did you see? -Cypher: What happened? -Neo: A black cat went past us, and then another that looked just like it. -Trinity: How much like it? Was it the same cat? -Neo: It might have been. I'm not sure. -Morpheus: Switch! Apoc! -Neo: What is it? -Trinity: A deja vu is usually a glitch in the Matrix. It happens when they change something. + Trinity: What did you just say? + Neo: Nothing. Just had a little deja vu. + Trinity: What did you see? + Cypher: What happened? + Neo: A black cat went past us, and then another that looked just + like it. + Trinity: How much like it? Was it the same cat? + Neo: It might have been. I'm not sure. + Morpheus: Switch! Apoc! + Neo: What is it? + Trinity: A deja vu is usually a glitch in the Matrix. It happens when + they change something. =head2 v5.13.6 - Haruki Murakami, "Kafka on the Shore" @@ -913,7 +1259,7 @@ absorbed. Presently he said: "Say, Tom, let me whitewash a little." =head2 v5.11.2 - Michael Marshall Smith, "Only Forward" -L<Announced on 2009-11-20 by |http://www.nntp.perl.org/group/perl.perl5.porters/2009/11/msg153646.html> +L<Announced on 2009-11-20 by Léon Brocard|http://www.nntp.perl.org/group/perl.perl5.porters/2009/11/msg153646.html> The streets were pretty quiet, which was nice. They're always quiet here at that time: you have to be wearing a black jacket to be out on the diff --git a/gnu/usr.bin/perl/Porting/exec-bit.txt b/gnu/usr.bin/perl/Porting/exec-bit.txt index 05a896762cf..e2f445b0952 100644 --- a/gnu/usr.bin/perl/Porting/exec-bit.txt +++ b/gnu/usr.bin/perl/Porting/exec-bit.txt @@ -45,7 +45,6 @@ Porting/config_h.pl Porting/corecpan.pl Porting/corelist-perldelta.pl Porting/corelist.pl -Porting/curliff.pl Porting/expand-macro.pl Porting/findrfuncs Porting/makerel @@ -56,7 +55,5 @@ Porting/perlhist_calculate.pl Porting/sort_perldiag.pl Porting/sync-with-cpan Porting/valgrindpp.pl -mpeix/nm -mpeix/relink Cross/generate_config_sh Cross/warp diff --git a/gnu/usr.bin/perl/Porting/leakfinder.pl b/gnu/usr.bin/perl/Porting/leakfinder.pl new file mode 100644 index 00000000000..c22a58e4cfd --- /dev/null +++ b/gnu/usr.bin/perl/Porting/leakfinder.pl @@ -0,0 +1,166 @@ + +# WARNING! This script can be dangerous. It executes every line in every +# file in the build directory and its subdirectories, so it could do some +# harm if the line contains `rm *` or something similar. +# +# Run this as ./perl -Ilib Porting/leakfinder.pl after building perl. +# +# This is a quick non-portable hack that evaluates pieces of code in an +# eval twice and sees whether the number of SVs goes up. Any lines that +# leak are printed to STDOUT. +# +# push and unshift will give false positives. Some lines (listed at the +# bottom) are explicitly skipped. Some patterns (at the beginning of the +# inner for loop) are also skipped. + +use XS::APItest "sv_count"; +use Data::Dumper; +$Data::Dumper::Useqq++; +for(`find .`) { + warn $_; + chomp; + for(`cat \Q$_\E 2>/dev/null`) { + next if exists $exceptions{s/^\s+//r}; + next if /rm -rf/; # Could be an example from perlsec, e.g. + # Creating one of these special blocks creates SVs, obviously + next if /(?:END|CHECK|INIT)\s*\{/; + next if /^[{(]?\s*(?:push|unshift|(?:\@r = )?splice|binmode|sleep)/; + next if /\bselect(?:\s*|\()[^()]+,/; # 4-arg select hangs + next if /use parent/; + my $q = s/[\\']/sprintf "\\%02x", ord $&/gore + =~ s/\0/'."\\0".'/grid; + $prog = <<end; + open oUt, ">&", STDOUT; + open STDOUT, ">/dev/null"; + open STDIN, "</dev/null"; + open STDERR, ">/dev/null"; + \$unused_variable = '$q'; + eval \$unused_variable while \$also_unused++ < 4; + print oUt sv_count, "\n"; + eval \$unused_variable; + print oUt sv_count, "\n"; +end + open my $fh, "-|", $^X, "-Ilib", "-MXS::APItest=sv_count", + '-e', $prog or warn($!), next; + local $/; + $out = <$fh>; + close $fh; + @_ = split ' ', $out; + if (@_ == 2 && $_[1] > $_[0]) { print Dumper $_ } + } +} + +BEGIN { + @exceptions = split /^/, <<'end'; +1 while 1; +1 while some_condition_with_side_effects; */ +$a{buttons}[2*$a{default_button}] = [$a{buttons}[2*$a{default_button}]]; +$aliases{$code_point} = [ $aliases{$code_point} ]; +$aliases_maps->[$i] = [ $aliases_maps->[$i] ] +$allow ? $hash{$acc} = $allow : push @list, $acc; +/(a*(*MARK:a)b?)(*MARK:x)(*SKIP:a)(?{$count++; push @res,$1})(*FAIL)/g; +$^A .= new version ~$_ for "\xce", v205, "\xcc"; +A rare race condition that would lead to L<sleep|perlfunc/sleep> taking more +$args{include_dirs} = [ $args{include_dirs} ] +$ARRAY[++$#ARRAY] = $value; +@a = sort ($b, @a) +$a = {x => $a}; +$base =~ /^[cwnv]/i or push @tmpl, "$base>", "$base<"; +$base =~ /^[nv]/i or push @formats, "$base>", "$base<"; +BEGIN { unshift(@INC, "./blib") } +BEGIN { unshift @INC, "lib" } +BEGIN { unshift(@INC, LIST) } +binmode *STDERR, ":encoding(utf8)"; +binmode *STDOUT, ":encoding(utf8)"; +char const *file = __FILE__; +$char++ while substr( $got, $char, 1 ) eq substr( $wanted, $char, 1 ); +CHECK { $main::phase++ } +$config{$k} = [ $config{$k} ] +const char *file = __FILE__; +const char* file = __FILE__; +$count4 = unshift (@array, 0); +$count7 = unshift (@array, 3, 2, 1); +$data = [ $data ]; +do { $tainted_value = shift @ENV_values } while(!$tainted_value || ref $tainted_value); +do {$x[$x] = $x;} while ($x++) < 10; +eval {CHECK {print ":c3"}}; +eval {INIT {print ":i2"}}; +eval { $proto->can($method) } || push @nok, $method; +eval { push \@ISA, __FILE__ }; +eval 'v23: $counter++; goto v23 unless $counter == 2'; +eval 'v23 : $counter++; goto v23 unless $counter == 2'; +$formdata->{$key} = [ $formdata->{$key}, $value ]; +$func = $next{$func} until $pod{$func}; +$got_arrayref ? unshift(@{$args[0]}, $cmd) : unshift(@args, $cmd); +$h{ []} = 123; +{ $h[++$i] = $_ } +High resolution alarm, sleep, gettimeofday, interval timers +if (-d "$directory/$_") { push @ARGV, "$directory/$_" } +$i = int($i/2) until defined $self->[$i/2]; +$invmap_ref->[$i] = [ $invmap_ref->[$i] ]; +is(push(@ary,4), 3); +is(push(@ary,56), 4); +is(unshift(@ary,12), 5); +$i++ while $self->{ids}{"$t$i"}++; +{ --$level; push @out, (" " x $level) . "</ul>"; } +$mod_hash->{$k} = [ $mod_hash->{$k} ]; +$modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename +my $deep1 = []; push @$deep1, $deep1; +my $deep2 = []; push @$deep2, $deep2; +my $nfound = select($_[0], $_[1], $_[2], $_[3]); +my $nfound = select($_[0], $_[1], $_[2], $gran); +my $n = unshift(@ary,5,6); +my @result = splice @temp, $self, $offset, $length, @_; +my @r = splice @a, 0, 1, "x", "y"; +$_ = {name=>$_}; +$n = push @a, "rec0", "rec1", "rec2"; +$n = push @a, "rec3", "rec4$:"; +$n = unshift @a, "rec0", "rec1", "rec2"; +$n = unshift @a, "rec3", "rec4$:"; +@$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference +@old = splice(@h, 1, 2, qw(bananas just before)); +unlink <"$filename*">; +package XS::APItest; require XSLoader; XSLoader::load() +$pa = { -exitval => $pa }; +$pa = { -message => $pa }; +pop @lines while $lines[-1] eq ""; +pop @to while $#to and $to[$#to] == $to[$#to -1]; +pop(@$x); unshift(@q, $q); +@prgs = (@prgs, $file, split "\n########\n", <$fh>) ; +print "LA LA LA\n" while 1; # loops forever +prog => 'use Config; CHECK { $Config{awk} }', +$p->{share_dir} = { dist => [ $p->{share_dir} ] }; +$p->{share_dir} = { dist => $p->{share_dir} }; +-sleep +$resp = [$resp] +$r = eval q[ qr/$r(??{$x})/; ]; +$r = qr/$r(??{$x})/; +s/a|/push @bar, 1/e; +$self->{DIR} = [grep $_, split ":", $self->{DIR}]; +$share_dir->{dist} = [ $share_dir->{dist} ]; +s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,#_;END{print"@m"}' +$spec = [$spec, $_[0]]; +*s = ~(*s); +$stack[$i++] &= ~1; +$step = [$step]; +sub CHECK {print ":check"} +sub INIT {print ":init"} +system("find . -type f -print | xargs chmod 0444"); +the while clause. */ +Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers +*tmpl = ~*tmpl; +*tmps = ~*tmps; +until ($i) { } +weaken($objs[@objs] = $h{$_} = []); +weaken($objs[@objs] = $$h{$_} = []); +while (1) { my $k; } +while(1) { sleep(1); } +while($foo--) { print("In thread $thread\n"); } +"words" =~ /(word|word|word)(?{push @got, $1})s$/; +"words" =~ /(word|word|word)(?{push @got,$1})s$/i; +$x->[$j] -= $BASE if $car = (($x->[$j] += $car) >= $BASE) ? 1 : 0; $j++; +$x->[scalar @$x] = 0; # avoid || 0 test inside loop +$z = splice @a, 3, 1, "recordZ"; +end + @exceptions{@exceptions} = (); +} diff --git a/gnu/usr.bin/perl/Porting/makemeta b/gnu/usr.bin/perl/Porting/makemeta index 90ce9bf075e..1c7016b0a7e 100644 --- a/gnu/usr.bin/perl/Porting/makemeta +++ b/gnu/usr.bin/perl/Porting/makemeta @@ -1,36 +1,81 @@ #!./perl -w # this script must be run by the current perl to get perl's version right # -# Create a META.yml file in the current directory. Must be run from the +# Create META.yml and META.json files in the current directory. Must be run from the # root directory of a perl source tree. use strict; use warnings; -use lib "Porting"; +use Getopt::Std; -use File::Basename qw( dirname ); +my $opts = { + 'META.yml' => { version => '1.4' }, + 'META.json' => { version => '2' }, +}; + +my %switches; +getopts('byj', \%switches); + +my @metafiles; +if ( $switches{y} ) { + push @metafiles, 'META.yml'; +} +elsif ( $switches{j} ) { + push @metafiles, 'META.json'; +} +else { + push @metafiles, keys %$opts; +} + +my ($vers, $stat ) = _determine_status(); + +my $distmeta = { + 'version' => $vers, + 'name' => 'perl', + 'author' => [ + 'perl5-porters@perl.org' + ], + 'license' => [ + 'perl_5' + ], + 'abstract' => 'The Perl 5 language interpreter', + 'release_status' => $stat, + 'dynamic_config' => 1, + 'resources' => { + 'repository' => { + 'url' => 'http://perl5.git.perl.org/' + }, + 'homepage' => 'http://www.perl.org/', + 'bugtracker' => { + 'web' => 'http://rt.perl.org/perlbug/' + }, + 'license' => [ + 'http://dev.perl.org/licenses/' + ], + }, +}; +use lib "Porting"; +use File::Basename qw( dirname ); +use CPAN::Meta; BEGIN { # Get function prototypes require 'regen/regen_lib.pl'; } - -my $file = "META.yml"; - use Maintainers qw(%Modules get_module_files get_module_pat); my @CPAN = grep { $Modules{$_}{CPAN} } keys %Modules; my @files = ('autodoc.pl', 'lib/unicore/mktables', 'TestInit.pm', - 'Porting/Maintainers.pm', 'Porting/perldelta_template.pod', - map { get_module_files($_) } @CPAN); -my @dirs = ('cpan', 'win32', grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN); + 'Porting/Maintainers.pm', 'Porting/perldelta_template.pod', + map { get_module_files($_) } @CPAN); +my @dirs = ('cpan', 'win32', 'mad', grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN); my %dirs; @dirs{@dirs} = (); -@files = map { " - $_" } +@files = grep { my $d = $_; my $previous_d = ''; @@ -42,34 +87,55 @@ my %dirs; # if $d is "." it means we tried every parent dir of the file and none # of them were in the private list - + $d eq "." || $d eq $previous_d; } sort { lc $a cmp lc $b } @files; -@dirs = map { " - $_" } sort { lc $a cmp lc $b } @dirs; - -my $fh = open_new($file); - -local $" = "\n"; -print $fh <<"EOI"; -name: perl -version: $] -abstract: The Perl 5 language interpreter -author: perl5-porters\@perl.org -license: perl -resources: - homepage: http://www.perl.org/ - bugtracker: http://rt.perl.org/perlbug/ - license: http://dev.perl.org/licenses/ - repository: http://perl5.git.perl.org/ -distribution_type: core -generated_by: $0 -no_index: - directory: -@dirs - file: -@files -EOI - -close_and_rename($fh); +@dirs = sort { lc $a cmp lc $b } @dirs; + +$distmeta->{no_index}->{file} = \@files; +$distmeta->{no_index}->{directory} = \@dirs; + +my $meta = CPAN::Meta->create( $distmeta ); +foreach my $file ( @metafiles ) { + my $fh = open_new($file); + print $fh $meta->as_string( $opts->{$file} ); + close_and_rename($fh); +} +exit 0; + +sub _determine_status { + my $patchlevel_h = 'patchlevel.h'; + return unless -e $patchlevel_h; + my $status = ''; + my $version = ''; + { + my %defines; + open my $fh, '<', $patchlevel_h; + my @vers; + while (<$fh>) { + chomp; + next unless m!^#define! or m!!; + if ( m!^#define! ) { + my ($foo,$bar) = ( split /\s+/ )[1,2]; + $defines{$foo} = $bar; + } + elsif ( m!\"RC\d+\"! ) { + $status = 'testing'; + last; + } + } + unless ( $status ) { + $status = $defines{PERL_VERSION} % 2 ? 'unstable' : 'stable'; + } + if ( my @wotsits = grep { defined $defines{$_} } qw(PERL_REVISION PERL_VERSION PERL_SUBVERSION) ) { + $version = sprintf '%d.%03d%03d', map { $defines{$_} } @wotsits; + } + else { + # Well, you never know + $version = sprintf '5.%03d_%02d', map { $defines{$_} } qw(PATCHLEVEL SUBVERSION); + } + } + return ( $version, $status ); +} diff --git a/gnu/usr.bin/perl/Porting/manisort b/gnu/usr.bin/perl/Porting/manisort index 1c02120573d..6cf7d927177 100644 --- a/gnu/usr.bin/perl/Porting/manisort +++ b/gnu/usr.bin/perl/Porting/manisort @@ -50,6 +50,7 @@ for (my $ii = 0; $ii < $#manifest; $ii++) { if (defined($outfile)) { open(my $OUT, '>', $outfile) or die("Can't open output file '$outfile': $!"); + binmode($OUT); print($OUT join("\n", @sorted), "\n"); close($OUT) or die($!); } diff --git a/gnu/usr.bin/perl/Porting/new-perldelta.pl b/gnu/usr.bin/perl/Porting/new-perldelta.pl index dc4c1361095..7aa605e66c4 100644 --- a/gnu/usr.bin/perl/Porting/new-perldelta.pl +++ b/gnu/usr.bin/perl/Porting/new-perldelta.pl @@ -88,7 +88,7 @@ my $pod_master = slurp_or_die($filename); $pod_master =~ s{^(\s*perl5)($was_major$was_minor)(delta\s+Perl changes in version )(5\.\d+\.\d+)(.*)} {$1 . $old_major . $old_minor .$3 . "5.$old_major.$old_minor" . $5 . "\n" . "$1$2$3$4$5"}me - or die "Can't find perldelta line (for perl5$was_major${was_minor}delta) in $filename"; + or warn "Couldn't find perldelta line (for perl5$was_major${was_minor}delta) in $filename"; write_or_die($filename, $pod_master); git_add_modified($filename); diff --git a/gnu/usr.bin/perl/Porting/perldelta_template.pod b/gnu/usr.bin/perl/Porting/perldelta_template.pod index 659805e0e7f..5916b7c17d8 100644 --- a/gnu/usr.bin/perl/Porting/perldelta_template.pod +++ b/gnu/usr.bin/perl/Porting/perldelta_template.pod @@ -2,19 +2,18 @@ =head1 NAME -[ this is a template for a new perldelta file. Any text flagged as -XXX needs to be processed before release. ] +[ this is a template for a new perldelta file. Any text flagged as XXX needs +to be processed before release. ] perldelta - what is new for perl v5.tXXX.cXXX =head1 DESCRIPTION -This document describes differences between the 5.sXXX.bXXX release and -the 5.tXXX.cXXX release. +This document describes differences between the 5.sXXX.bXXX release and the 5.tXXX.cXXX +release. If you are upgrading from an earlier release such as 5.rXXX.aXXX, first read -L<perl5XXXdelta>, which describes differences between 5.rXXX.aXXX and -5.sXXX.bXXX. +L<perl5XXXdelta>, which describes differences between 5.rXXX.aXXX and 5.sXXX.bXXX. =head1 Notice @@ -22,8 +21,8 @@ XXX Any important notices here =head1 Core Enhancements -XXX New core language features go here. Summarise user-visible core language -enhancements. Particularly prominent performance optimisations could go +XXX New core language features go here. Summarize user-visible core language +enhancements. Particularly prominent performance optimisations could go here, but most should go in the L</Performance Enhancements> section. [ List each enhancement as a =head2 entry ] @@ -49,15 +48,37 @@ XXX For a release on a stable branch, this section aspires to be: =head1 Deprecations XXX Any deprecated features, syntax, modules etc. should be listed here. -In particular, deprecated modules should be listed here even if they are -listed as an updated module in the L</Modules and Pragmata> section. -[ List each deprecation as a =head2 entry ] +=head2 Module removals + +XXX Remove this section if inapplicable. + +The following modules will be removed from the core distribution in a future +release, and will at that time need to be installed from CPAN. Distributions +on CPAN which require these modules will need to list them as prerequisites. + +The core versions of these modules will now issue C<"deprecated">-category +warnings to alert you to this fact. To silence these deprecation warnings, +install the modules in question from CPAN. + +Note that these are (with rare exceptions) fine modules that you are encouraged +to continue to use. Their disinclusion from core primarily hinges on their +necessity to bootstrapping a fully functional, CPAN-capable Perl installation, +not usually on concerns over their design. + +=over + +XXX Note that deprecated modules should be listed here even if they are listed +as an updated module in the L</Modules and Pragmata> section. + +=back + +[ List each other deprecation as a =head2 entry ] =head1 Performance Enhancements -XXX Changes which enhance performance without changing behaviour go here. There -may well be none in a stable release. +XXX Changes which enhance performance without changing behaviour go here. +There may well be none in a stable release. [ List each enhancement as a =item entry ] @@ -97,7 +118,7 @@ XXX =item * -L<XXX> has been upgraded from version 0.69 to version 0.70. +L<XXX> has been upgraded from version A.xx to B.yy. =back @@ -146,20 +167,13 @@ The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see L<perldiag>. -XXX New or changed warnings emitted by the core's C<C> code go here. Also +XXX New or changed warnings emitted by the core's C<C> code go here. Also include any changes in L<perldiag> that reconcile it to the C<C> code. -[ Within each section, list entries as a =item entry that links to perldiag, - e.g. - - =item * - - L<Invalid version object|perldiag/"Invalid version object"> -] - =head2 New Diagnostics -XXX Newly added diagnostic messages go here +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings =head3 New Errors @@ -195,8 +209,8 @@ XXX Describe change here =head1 Utility Changes -XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go -here. Most of these are built within the directories F<utils> and F<x2p>. +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. +Most of these are built within the directories F<utils> and F<x2p>. [ List utility changes as a =head3 entry for each utility and =item entries for each change @@ -234,7 +248,7 @@ XXX XXX Any significant changes to the testing of a freshly built perl should be listed here. Changes which create B<new> files in F<t/> go here as do any large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F<t/> aren't worth summarising, although the bugs +Changes to existing files in F<t/> aren't worth summarizing, although the bugs that they represent may be covered elsewhere. [ List each test improvement as a =item entry ] @@ -257,7 +271,7 @@ changes as paragraphs below it. ] =head2 New Platforms XXX List any platforms that this version of perl compiles on, that previous -versions did not. These will either be enabled by new files in the F<hints/> +versions did not. These will either be enabled by new files in the F<hints/> directories, or new subdirectories and F<README> files at the top level of the source tree. @@ -283,7 +297,7 @@ XXX =head2 Platform-Specific Notes -XXX List any changes for specific platforms. This could include configuration +XXX List any changes for specific platforms. This could include configuration and compilation changes or changes in portability/compatibility. However, changes within modules for platforms should generally be listed in the L</Modules and Pragmata> section. @@ -298,9 +312,9 @@ XXX =head1 Internal Changes -XXX Changes which affect the interface available to C<XS> code go here. -Other significant internal changes for future core maintainers should -be noted as well. +XXX Changes which affect the interface available to C<XS> code go here. Other +significant internal changes for future core maintainers should be noted as +well. [ List each change as a =item entry ] @@ -314,9 +328,8 @@ XXX =head1 Selected Bug Fixes -XXX Important bug fixes in the core language are summarised here. -Bug fixes in files in F<ext/> and F<lib/> are best summarised in -L</Modules and Pragmata>. +XXX Important bug fixes in the core language are summarized here. Bug fixes in +files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>. [ List each fix as a =item entry ] @@ -330,12 +343,9 @@ XXX =head1 Known Problems -XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any -tests that had to be C<TODO>ed for the release would be noted here, unless -they were specific to a particular platform (see below). - -This is a list of some significant unfixed bugs, which are regressions -from either 5.XXX.XXX or 5.XXX.XXX. +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be C<TODO>ed for the release would be noted here. Unfixed +platform specific bugs also go here. [ List each fix as a =item entry ] @@ -356,36 +366,34 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.16.3..HEAD + perl Porting/acknowledgements.pl v5.18.2..HEAD =head1 Reporting Bugs -If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl -bug database at http://rt.perl.org/perlbug/ . There may also be -information at http://www.perl.org/ , the Perl Home Page. +If you find what you think is a bug, you might check the articles recently +posted to the comp.lang.perl.misc newsgroup and the perl bug database at +http://rt.perl.org/perlbug/ . There may also be information at +http://www.perl.org/ , the Perl Home Page. -If you believe you have an unreported bug, please run the L<perlbug> -program included with your release. Be sure to trim your bug down -to a tiny but sufficient test case. Your bug report, along with the -output of C<perl -V>, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. +If you believe you have an unreported bug, please run the L<perlbug> program +included with your release. Be sure to trim your bug down to a tiny but +sufficient test case. Your bug report, along with the output of C<perl -V>, +will be sent off to perlbug@perl.org to be analysed by the Perl porting team. If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please send -it to perl5-security-report@perl.org. This points to a closed subscription -unarchived mailing list, which includes -all the core committers, who will be able -to help assess the impact of issues, figure out a resolution, and help +inappropriate to send to a publicly archived mailing list, then please send it +to perl5-security-report@perl.org. This points to a closed subscription +unarchived mailing list, which includes all the core committers, who will be +able to help assess the impact of issues, figure out a resolution, and help co-ordinate the release of patches to mitigate or fix the problem across all -platforms on which Perl is supported. Please only use this address for -security issues in the Perl core, not for modules independently -distributed on CPAN. +platforms on which Perl is supported. Please only use this address for +security issues in the Perl core, not for modules independently distributed on +CPAN. =head1 SEE ALSO -The F<Changes> file for an explanation of how to view exhaustive details -on what changed. +The F<Changes> file for an explanation of how to view exhaustive details on +what changed. The F<INSTALL> file for how to build Perl. diff --git a/gnu/usr.bin/perl/Porting/perlhist_calculate.pl b/gnu/usr.bin/perl/Porting/perlhist_calculate.pl index b03fef480d0..0d739919939 100644 --- a/gnu/usr.bin/perl/Porting/perlhist_calculate.pl +++ b/gnu/usr.bin/perl/Porting/perlhist_calculate.pl @@ -9,6 +9,12 @@ use File::Find; use warnings; use strict; +sub emit { + my $H = '%-9s:'; + my $D = '%6d'; + printf "$H $D $D\n", @_; +} + sub calc_core { my @core; @@ -24,7 +30,7 @@ sub calc_core { my $corenumber = scalar @core; $coresize = int $coresize; - say "core: $coresize $corenumber"; + return $coresize, $corenumber; } sub calc_lib { @@ -40,7 +46,7 @@ sub calc_lib { find(\&wanted_lib, 'lib'); $libsize = int $libsize; - say "lib: $libsize $libnumber"; + return $libsize, $libnumber; } sub calc_ext { @@ -61,7 +67,7 @@ sub calc_ext { $extsize = int $extsize; - say "ext: $extsize $extnumber"; + return $extsize, $extnumber; } sub calc_t { @@ -78,7 +84,7 @@ sub calc_t { $tsize = int $tsize; - say "t: $tsize $tnumber"; + return $tsize, $tnumber; } sub calc_doc { @@ -105,7 +111,7 @@ sub calc_doc { $docsize = int $docsize; - say "doc: $docsize $docnumber"; + return $docsize, $docnumber; } sub calc_dir { @@ -125,23 +131,19 @@ sub calc_dir { $dirsize = int $dirsize; - say "$dir: $dirsize $dirnumber"; + emit $dir => $dirsize, $dirnumber; } sub calc_longtable { - print "\n\nTable\n"; - - foreach my $dir (qw(beos)) { - calc_dir($dir); - } + print "\n\nTable:\n"; my $configure_size = int ((-s 'Configure') / 1000); - say "Configure: $configure_size 1"; + emit Configure => $configure_size, 1; - foreach my $dir (qw(Cross djgpp emacs epoc h2pl hints mad mint mpeix NetWare os2 plan9 Porting qnx symbian utils uts vmesa vms vos win32 x2p)) { + foreach my $dir (qw(Cross djgpp emacs h2pl hints mad NetWare os2 plan9 Porting qnx symbian utils vms vos win32 x2p)) { calc_dir($dir); } } @@ -149,11 +151,15 @@ sub calc_longtable { say "Selected release sizes for perl tarball:"; print "\n"; -calc_core(); -calc_lib(); -calc_ext(); -calc_t(); -calc_doc(); + #5.16.0 5562 109 1077 80 20504 2702 8750 2375 4815 152 + +sub calc_line { + printf " %-12s %6s %3s %6s %3s %6s %4s %6s %4s %6s %3s\n", + '5.xx.0', calc_core(), calc_lib(), calc_ext(), calc_t(), calc_doc(); +} + +calc_line(); + calc_longtable(); exit; diff --git a/gnu/usr.bin/perl/Porting/pod_lib.pl b/gnu/usr.bin/perl/Porting/pod_lib.pl index b257c66ed78..5d923ba9aca 100644 --- a/gnu/usr.bin/perl/Porting/pod_lib.pl +++ b/gnu/usr.bin/perl/Porting/pod_lib.pl @@ -4,8 +4,63 @@ use strict; use Digest::MD5 'md5'; use File::Find; -# make it clearer when we haven't run to completion, as we can be quite -# noisy when things are working ok +=head1 NAME + +Porting/pod_lib.pl - functions for building and installing POD + +=head1 SYNOPSIS + + require './Porting/pod_lib.pl'; + +=cut + +=head1 DESCRIPTION + +This program, when C<require>d into other programs in the Perl 5 core +distribution, provides functions useful during building and, secondarily, +testing. + +As of this writing, the functions in this program are used in these other +programs: + + installman + installperl + pod/buildtoc + pod/perl.pod + Porting/new-perldelta.pl + Porting/pod_rules.pl + +Note: Since these functions are used during the Perl build process, they must +work with F<miniperl>. That necessarily implies that these functions must not +rely on XS modules, either directly or indirectly (e.g., C<autodie>). + +=head1 SUBROUTINES + +=head2 C<my_die()> + +=over 4 + +=item * Purpose + +Exit from a process with an error code and a message. + +=item * Arguments + +List of arguments to be passed with the error message. Example: + + close $fh or my_die("close 'utils.lst': $!"); + +=item * Return Value + +Exit code C<255>. + +=item * Comment + +Prints C<ABORTED> to STDERR. + +=back + +=cut sub my_die { print STDERR "$0: ", @_; @@ -14,12 +69,56 @@ sub my_die { exit 255; } +=head2 C<open_or_die()> + +=over 4 + +=item * Purpose + +Opens a file or fails if it cannot. + +=item * Arguments + +String holding filename to be opened. Example: + + $fh = open_or_die('utils.lst'); + +=item * Return Value + +Handle to opened file. + +=back + +=cut + sub open_or_die { my $filename = shift; open my $fh, '<', $filename or my_die "Can't open $filename: $!"; return $fh; } +=head2 C<slurp_or_die()> + +=over 4 + +=item * Purpose + +Read the contents of a file into memory as a single string. + +=item * Arguments + +String holding name of file to be read into memory. + + $olddelta = slurp_or_die('pod/perldelta.pod'); + +=item * Return Value + +String holding contents of file. + +=back + +=cut + sub slurp_or_die { my $filename = shift; my $fh = open_or_die($filename); @@ -30,6 +129,29 @@ sub slurp_or_die { return $contents; } +=head2 C<write_or_die()> + +=over 4 + +=item * Purpose + +Write out a string to a file. + +=item * Arguments + +List of two arguments: (i) String holding name of file to be written to; (ii) +String holding contents to be written. + + write_or_die($olddeltaname, $olddelta); + +=item * Return Value + +Implicitly returns true value upon success. + +=back + +=cut + sub write_or_die { my ($filename, $contents) = @_; open my $fh, '>', $filename or die "Can't open $filename for writing: $!"; @@ -38,6 +160,48 @@ sub write_or_die { close $fh or die "Can't close $filename: $!"; } +=head2 C<pods_to_install()> + +=over 4 + +=item * Purpose + +Create a lookup table holding information about PODs to be installed. + +=item * Arguments + +None. + +=item * Return Value + +Reference to a hash with a structure like this: + + $found = { + 'MODULE' => { + 'CPAN::Bundle' => 'lib/CPAN/Bundle.pm', + 'Locale::Codes::Script_Retired' => + 'lib/Locale/Codes/Script_Retired.pm', + 'Pod::Simple::DumpAsText' => + 'lib/Pod/Simple/DumpAsText.pm', + # ... + 'Locale::Codes::LangVar' => + 'lib/Locale/Codes/LangVar.pod' + }, + 'PRAGMA' => { + 'fields' => 'lib/fields.pm', + 'subs' => 'lib/subs.pm', + # ... + }, + +=item * Comment + +Broadly speaking, the function assembles a list of all F<.pm> and F<.pod> +files in the distribution and then excludes certain files from installation. + +=back + +=cut + sub pods_to_install { # manpages not to be installed my %do_not_install = map { ($_ => 1) } @@ -225,6 +389,60 @@ sub __prime_state { if keys %flag_set; } +=head2 C<get_pod_metadata()> + +=over 4 + +=item * Purpose + +=item * Arguments + +List of one or more arguments. + +=over 4 + +=item * Boolean true or false + +=item * Reference to a suboutine. + +=item * Various other arguments. + +=back + +Example: + + $state = get_pod_metadata( + 0, sub { warn @_ if @_ }, 'pod/perltoc.pod'); + + get_pod_metadata( + 1, sub { warn @_ if @_ }, values %Build); + +=item * Return Value + +Hash reference; each element provides either a list or a lookup table for +information about various types of POD files. + + 'aux' => [ # utility programs like + 'h2xs' and 'perlbug' ] + 'generated' => { # lookup table for generated POD files + like 'perlapi.pod' } + 'ignore' => { # lookup table for files to be ignored } + 'pods' => { # lookup table in "name" => + "short description" format } + 'readmes' => { # lookup table for OS-specific + and other READMEs } + 'delta_version' => [ # major version number, minor no., + patch no. ] + 'delta_target' => 'perl<Mmmpp>delta.pod', + 'master' => [ # list holding entries for files callable + by 'perldoc' ] + 'copies' => { # patch version perldelta => + minor version perldelta } + +=back + +=cut + sub get_pod_metadata { # Do we expect to find generated pods on disk? my $permit_missing_generated = shift; diff --git a/gnu/usr.bin/perl/Porting/pod_rules.pl b/gnu/usr.bin/perl/Porting/pod_rules.pl index 838601597e2..f0b72ed41bd 100644 --- a/gnu/usr.bin/perl/Porting/pod_rules.pl +++ b/gnu/usr.bin/perl/Porting/pod_rules.pl @@ -204,8 +204,12 @@ sub do_unix { # pod/perl511delta.pod: pod/perldelta.pod # cd pod && $(LNS) perldelta.pod perl511delta.pod + # although it seems that HP-UX make gets confused, always tried to + # regenerate the symlink, and then the ln -s fails, as the target exists. + $makefile_SH =~ s!( pod/perl[a-z0-9_]+\.pod: pod/perl[a-z0-9_]+\.pod + \$\(RMS\) pod/perl[a-z0-9_]+\.pod \$\(LNS\) perl[a-z0-9_]+\.pod pod/perl[a-z0-9_]+\.pod )+!\0!gm; @@ -213,6 +217,7 @@ pod/perl[a-z0-9_]+\.pod: pod/perl[a-z0-9_]+\.pod my @copy_rules = map " pod/$_: pod/$state->{copies}{$_} + \$(RMS) pod/$_ \$(LNS) $state->{copies}{$_} pod/$_ ", keys %{$state->{copies}}; diff --git a/gnu/usr.bin/perl/Porting/release_announcement_template.txt b/gnu/usr.bin/perl/Porting/release_announcement_template.txt index 21f395e2d34..3536935861e 100644 --- a/gnu/usr.bin/perl/Porting/release_announcement_template.txt +++ b/gnu/usr.bin/perl/Porting/release_announcement_template.txt @@ -2,25 +2,26 @@ -- [ATTRIBUTION] -We are [SYNONYM FOR 'pleased'] to announce Perl [VERSION], the [N-TH] -development release of Perl 5.15. +We are [SYNONYM FOR 'pleased'] to announce version [VERSION.SUBVERSION], +the [N-TH] development release of version 17 of Perl 5. -You will soon be able to download Perl [VERSION] from your favorite CPAN -mirror or find it at: +You will soon be able to download Perl 5.[VERSION.SUBVERSION] from your +favorite CPAN mirror or find it at: -https://metacpan.org/release/[AUTHOR]/perl-[VERSION]/ +https://metacpan.org/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/ SHA1 digests for this release are: - [TAR.GZ SHA1] perl-[VERSION].tar.gz - [TAR.BZ2 SHA1] perl-[VERSION].tar.bz2 + [TAR.GZ SHA1] perl-5.[VERSION.SUBVERSION].tar.gz + [TAR.BZ2 SHA1] perl-5.[VERSION.SUBVERSION].tar.bz2 You can find a full list of changes in the file "perldelta.pod" located in the "pod" directory inside the release and on the web. [ACKNOWLEDGEMENTS SECTION FROM PERLDELTA] -We expect to release Perl [NEXT BLEAD VERSION] on [FUTURE DATE]. The next -major stable release of Perl 5, version 5.16.3, should appear in May 2012. +We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE +DATE]. The next major stable release of Perl 5, version 18.0, should +appear in May 2013. [YOUR SALUATION HERE] diff --git a/gnu/usr.bin/perl/Porting/release_managers_guide.pod b/gnu/usr.bin/perl/Porting/release_managers_guide.pod index 67cd0017981..466a5c7613c 100644 --- a/gnu/usr.bin/perl/Porting/release_managers_guide.pod +++ b/gnu/usr.bin/perl/Porting/release_managers_guide.pod @@ -35,8 +35,8 @@ pumpking. Blead releases from 5.11.0 forward are made each month on the 20th by a non-pumpking release engineer. The release engineer roster and schedule can be found in Porting/release_schedule.pod. -This document both helps as a check-list for the release engineer -and is a base for ideas on how the various tasks could be automated +This document both helps as a check-list for the release engineer +and is a base for ideas on how the various tasks could be automated or distributed. The checklist of a typical release cycle is as follows: @@ -65,7 +65,7 @@ The checklist of a typical release cycle is as follows: Some of the tasks described below apply to all four types of release of Perl. (blead, RC, final release of maint, final release of blead). Some of these tasks apply only to a subset -of these release types. If a step does not apply to a given +of these release types. If a step does not apply to a given type of release, you will see a notation to that effect at the beginning of the step. @@ -96,6 +96,13 @@ changes since. It's essentially the same procedure as for making a release candidate, but with a whole bunch of extra post-release steps. +Note that for a maint release there are two versions of this guide to +consider: the one in the maint branch, and the one in blead. Which one to +use is a fine judgement. The blead one will be most up-to-date, while +it might describe some steps or new tools that aren't applicable to older +maint branches. It is probably best to review both versions of this +document, but to most closely follow the steps in the maint version. + =item A blead point release (BLEAD-POINT) A release with an odd version number, such as 5.15.0 or 5.15.1. @@ -184,26 +191,33 @@ but all I<must> be done in the run up to a release. =head3 dual-life CPAN module synchronisation -Ensure that dual-life CPAN modules are synchronised with CPAN. Basically, -run the following: +To see which core distro versions differ from the current CPAN versions: - $ ./perl -Ilib Porting/core-cpan-diff -a -o /tmp/corediffs + $ ./perl -Ilib Porting/core-cpan-diff -x -a -to see any inconsistencies between the core and CPAN versions of distros, -then fix the core, or cajole CPAN authors as appropriate. See also the -C<-d> and C<-v> options for more detail. You'll probably want to use the -C<-c cachedir> option to avoid repeated CPAN downloads and may want to -use C<-m file:///mirror/path> if you made a local CPAN mirror. +Passing C<-u cpan> (and maybe C<-u undef>) will probably be helpful, since +those are the only types of distributions that you can actually affect as a +perl release manager (as opposed to a CPAN module maintainer). -To see which core distro versions differ from the current CPAN versions: +You can also run an actual diff of the contents of the modules, comparing core +to CPAN, to ensure that there were no erroneous/extraneous changes that need to +be dealt with. You do this by not passing the C<-x> option: - $ ./perl -Ilib Porting/core-cpan-diff -x -a + $ ./perl -Ilib Porting/core-cpan-diff -a -o /tmp/corediffs + +then fix the core, or cajole CPAN authors as appropriate. See also the C<-d> +and C<-v> options for more detail (and the C<-u> option as mentioned above). +You'll probably want to use the C<-c cachedir> option to avoid repeated CPAN +downloads and may want to use C<-m file:///mirror/path> if you made a local +CPAN mirror. Note that a minicpan mirror won't actually work, but can provide a +good first pass to quickly get a list of modules which definitely haven't +changed, to avoid having to download absolutely everything. If you are making a MAINT release, run C<core-cpan-diff> on both blead and maint, then diff the two outputs. Compare this with what you expect, and if necessary, fix things up. For example, you might think that both blead and maint are synchronised with a particular CPAN module, but one might -have some extra changes. +have some extra changes. =head3 How to sync a CPAN module with a cpan/ distro @@ -220,13 +234,13 @@ directory to the original name. =item * -Restore any F<.gitignore> file. This can be done by issueing +Restore any F<.gitignore> file. This can be done by issuing C<git checkout .gitignore> in the F<cpan/Distro> directory. =item * Remove files we do not need. That is, remove any files that match the -entries in C<@IGNORE> in F<Porting/Maintainer.pl>, and anything that +entries in C<@IGNORE> in F<Porting/Maintainer.pl>, and anything that matches the C<EXCLUDED> section of the distro's entry in the C<%Modules> hash. @@ -261,7 +275,7 @@ bit, or edit F<Porting/exec-bit.txt> =item * -Run C<make>, see if C<perl> compiles. +Run C<make> (or C<nmake> on Windows), see if C<perl> compiles. =item * @@ -289,7 +303,10 @@ For entries with a non-simple C<FILES> section, or with a C<MAP>, you may have to take more steps than listed above. F<Porting/sync-with-cpan> is a script that automates most of the steps -above; but see the comments at the beginning of the file. +above; but see the comments at the beginning of the file. In particular, +it has not yet been exercised on Windows, but will certainly require a set +of Unix tools such as Cygwin, and steps that run C<make> will need to run +C<nmake> instead. =head3 dual-life CPAN module stability @@ -318,7 +335,8 @@ Ensure dual-life CPAN modules are stable, which comes down to: =head3 monitor smoke tests for failures Similarly, monitor the smoking of core tests, and try to fix. See -L<http://doc.procura.nl/smoke/index.html> for a summary. See also +L<http://doc.procura.nl/smoke/index.html> and L<http://perl5.test-smoke.org/> +for a summary. See also L<http://www.nntp.perl.org/group/perl.daily-build.reports/> which has the raw reports. @@ -337,10 +355,12 @@ edit the whole document. =head3 Bump the version number +Do not do this yet for a BLEAD-POINT release! You will do this at the end of +the release process. + Increase the version number (e.g. from 5.12.0 to 5.12.1). -For a BLEAD-POINT release, this can happen on the day of the release. For a -release candidate for a stable perl, this should happen a week or two +For a release candidate for a stable perl, this should happen a week or two before the first release candidate to allow sufficient time for testing and smoking with the target version built into the perl executable. For subsequent release candidates and the final release, it it not necessary to @@ -375,6 +395,8 @@ After editing, regenerate uconfig.h (this must be run on a system with a $ perl regen/uconfig_h.pl +This might not cause any new changes. + Test your changes: $ git clean -xdf # careful if you don't have local files to keep! @@ -391,7 +413,7 @@ Commit your changes: $ git commit -a -m 'Bump the perl version in various places for 5.x.y' At this point you may want to compare the commit with a previous bump to -see if they look similar. See commit 8891dd8d for an example of a +see if they look similar. See commit 0e79a3d1bc for an example of a previous version bump. When the version number is bumped, you should also update Module::CoreList @@ -417,15 +439,27 @@ release (so for 5.15.3 this would be 5.15.2). =head3 Check more build configurations -Check some more build configurations. +Try running the full test suite against multiple Perl configurations. Here are +some sets of Configure flags you can try: - $ sh Configure -Dprefix=/tmp/perl-5.x.y -Uinstallusrbinperl \ - -Duseshrplib -Dusesitecustomize - $ make - $ make test +=over 4 -XXX think of other configurations that need testing. +=item * +C<-Duseshrplib -Dusesitecustomize> + +=item * + +C<-Duserelocatableinc> + +=item * + +C<-Dusethreads> + +=back + +If you have multiple compilers on your machine, you might also consider +compiling with C<-Dcc=$other_compiler>. =head3 update perlport @@ -438,7 +472,7 @@ If necessary update the list and the indicated version number. =head2 Building a release - on the day This section describes the actions required to make a release -that are performed on the actual day. +that are performed near to, or on the actual release day. =head3 re-check earlier actions @@ -448,10 +482,14 @@ L<"Building a release - advance actions"> to ensure they are all done and up-to-date. -=head3 bump version number +=head3 create a release branch + +For BLEAD-POINT releases, making a release from a release branch avoids the +need to freeze blead during the release. This is less important for +BLEAD-FINAL, MAINT, and RC releases, since blead will already be frozen in +those cases. Create the branch by running -For a BLEAD-POINT release, if you did not bump the perl version number as -part of I<advance actions>, do that now. + git checkout -b release-5.xx.yy =head3 finalize perldelta @@ -494,10 +532,26 @@ For example, for RC0 of 5.16.0: $ cd pod $ git rm perldelta515*.pod -All mention to them should also be removed. Edit F<pod/perl.pod> to remove -them from its table of contents, then run F<Porting/pod_rules.pl> to -propagate your changes there into all the other files that mention them -(including F<MANIFEST>). You'll need to C<git add> the files that it changes. +=for checklist skip BLEAD BLEAD-POINT + +=head3 add recent perldeltas + +For the first RC for a MAINT release, copy in any recent perldeltas from +blead that have been added since the last release on this branch. This +should include any recent maint releases on branches older than your one, +but not newer. For example if you're producing a 5.14.x release, copy any +perldeltas from recent 5.10.x, 5.12.x etc maint releases, but not from +5.16.x or higher. Remember to + + $ git add <file1> <file2> ... + +=head3 update and commit perldelta files + +If you have added or removed any perldelta files via the previous two +steps, then edit F<pod/perl.pod> to add/remove them from its table of +contents, then run F<Porting/pod_rules.pl> to propagate your changes there +into all the other files that mention them (including F<MANIFEST>). You'll +need to C<git add> the files that it changes. Then build a clean perl and do a full test @@ -511,7 +565,7 @@ Once all tests pass, commit your changes. =head3 build a clean perl -If you skipped the previous step (removing the stale perldeltas) +If you skipped the previous step (adding/removing perldeltas) make sure you have a gitwise-clean perl directory (no modified files, unpushed commits etc): @@ -531,13 +585,26 @@ from the maint branch, but commit the C<CoreList.pm> changes in I<blead> and subsequently cherry-pick any releases since the last maint release and then your recent commit. XXX need a better example +[ Note that the procedure for handling Module::CoreList in maint branches +is a bit complex, and the RMG currently don't describe a full and +workable approach. The main issue is keeping Module::CoreList +and its version number synchronised across all maint branches, blead and +CPAN, while having to bump its version number for every RC release. +See this brief p5p thread: + + Message-ID: <20130311174402.GZ2294@iabyn.com> + +If you can devise a workable system, feel free to try it out, and to +update the RMG accordingly! + +DAPM May 2013 ] + + F<corelist.pl> uses ftp.funet.fi to verify information about dual-lived -modules on CPAN. It can use a full, local CPAN mirror or fall back -to C<wget> or C<curl> to fetch only package metadata remotely. (If you're -on Win32, then installing Cygwin is one way to have commands like C<wget> -and C<curl> available.) +modules on CPAN. It can use a full, local CPAN mirror and/or fall back +on HTTP::Tiny to fetch package metadata remotely. -(If you'd prefer to have a full CPAN mirror, see +(If you'd prefer to have a full CPAN mirror, see http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN) Then change to your perl checkout, and if necessary, @@ -582,6 +649,16 @@ number as a CPAN release.) Edit the version number in the new C<< 'Module::CoreList' => 'X.YZ' >> entry, as that is likely to reflect the previous version number. +=head4 Bump C<$Module::CoreList::TieHashDelta::VERSION> + +C<$Module::CoreList::TieHashDelta::VERSION> should always be equal to +C<$Module::CoreList::VERSION>. Make sure the two versions match before +proceeding. + +Edit the version number in the new +C<< 'Module::CoreList::TieHashDelta' => 'X.YZ' >> entry, as that is likely to +reflect the previous version number. + =head4 Bump version in Module::CoreList F<Changes> Also edit Module::CoreList's new version number in its F<Changes> @@ -597,7 +674,7 @@ Add a perldelta entry for the new Module::CoreList version. In addition, if this is a final release (rather than a release candidate): -=over 4 +=over 4 =item * @@ -619,6 +696,21 @@ cherry-pick it back). $ git commit -m 'Update Module::CoreList for 5.x.y' dist/Module-CoreList/lib/Module/CoreList.pm dist/Module-CoreList/lib/Module/CoreList.pod +=for checklist skip BLEAD BLEAD-POINT + +=head3 synchronise from blead's perlhist.pod + +For the first RC for a MAINT release, copy in the latest +F<pod/perlhist.pod> from blead; this will include details of newer +releases in all branches. In theory, blead's version should be a strict +superset of the one in this branch, but it's probably safest to diff them +first to ensure that there's nothing in this branch that was forgotten +from blead: + + $ diff pod/perlhist.pod ..../blead/pod/perlhist.pod + $ cp ..../blead/pod/perlhist.pod pod/ + $ git commit -m 'sync perlhist from blead' pod/perlhist.pod + =for checklist skip RC =head3 update perlhist.pod @@ -634,6 +726,10 @@ if this is the first release under the stewardship of a new pumpking, make sure that his or her name is listed in the section entitled C<THE KEEPERS OF THE PUMPKIN>. +I<If you're making a BLEAD-FINAL release>, also update the "SELECTED +RELEASE SIZES" section with the output of +F<Porting/perlhist_calculate.pl>. + Be sure to commit your changes: $ git commit -m 'add new release to perlhist' pod/perlhist.pod @@ -656,6 +752,14 @@ Be sure to commit your change: $ git commit -m 'bump version to RCnnn' patchlevel.h +=head3 run makemeta to update META files + + $ ./perl -Ilib Porting/makemeta + +Be sure to commit any changes (if applicable): + + $ git status # any changes? + $ git commit -m 'Update META files' META.* =head3 build, test and check a fresh perl @@ -677,9 +781,9 @@ directory, they will still identify themselves using git tags and commits. (Note that for an odd-numbered version, perl will install itself as C<perl5.x.y>). C<perl -v> will identify itself as: - This is perl 5, version X, subversion Y (v5.X.Y (v5.X.Z-NNN-deadbeef)) + This is perl 5, version X, subversion Y (v5.X.Y (v5.X.Z-NNN-gdeadbeef)) -where 5.X.Z is the latest tag, Z the number of commits since this tag, +where 5.X.Z is the latest tag, NNN the number of commits since this tag, and C<< deadbeef >> commit of that tag. Then delete the temporary installation. @@ -689,8 +793,7 @@ Then delete the temporary installation. Push all your recent commits: - $ git push origin .... - + $ git push origin release-5.xx.yy =head3 tag the release @@ -757,7 +860,7 @@ have access to. =head4 Download the tarball to another machine -Download the tarball to some other machine. For a release candidate, +Download the tarball to some other machine. For a release candidate, you really want to test your tarball on two or more different platforms and architectures. The #p5p IRC channel on irc.perl.org is a good place to find willing victims. @@ -780,7 +883,7 @@ Check that the test harness and install work on each test machine: Check that the output of C<perl -v> and C<perl -V> are as expected, especially as regards version numbers, patch and/or RC levels, and @INC -paths. +paths. Note that the results may be different without a F<.git/> directory, which is why you should test from the tarball. @@ -807,17 +910,13 @@ previous is 5.10.0: find . -type f | sort > /tmp/f2 diff -u /tmp/f[12] -=head4 Test the CPAN client +=head4 Bootstrap the CPAN client Bootstrap the CPAN client on the clean install: - $ bin/perl -MCPAN -e "shell" + $ bin/cpan -If you're running this on Win32 you probably also need a set of Unix -command-line tools available for CPAN to function correctly without -Perl alternatives like LWP installed. Cygwin is an obvious choice.) - -=head4 Install the Inline module and test it +=head4 Install the Inline module with CPAN and test it Try installing a popular CPAN module that's reasonably complex and that has dependencies; for example: @@ -837,10 +936,6 @@ Bootstrap the CPANPLUS client on the clean install: $ bin/cpanp -(Again, on Win32 you'll need something like Cygwin installed, but make sure -that you don't end up with its various F<bin/cpan*> programs being found on -the PATH before those of the Perl that you're trying to test.) - =head4 Install the DBI module with CPANPLUS CPAN Terminal> i DBI @@ -855,14 +950,14 @@ Test L<perlbug> with the following: $ bin/perlbug ... Subject: test bug report - Local perl administrator [yourself]: - Editor [vi]: - Module: - Category [core]: - Severity [low]: + Local perl administrator [yourself]: + Editor [vi]: + Module: + Category [core]: + Severity [low]: (edit report) Action (Send/Display/Edit/Subject/Save to File): f - Name of file to save message in [perlbug.rep]: + Name of file to save message in [perlbug.rep]: Action (Send/Display/Edit/Subject/Save to File): q and carefully examine the output (in F<perlbug.rep]>), especially @@ -962,6 +1057,20 @@ Mail p5p to announce your new release, with a quote you prepared earlier. Use the template at Porting/release_announcement_template.txt +Send a carbon copy to C<noc@metacpan.org> + +=head3 merge release branch back to blead + +If you made a release branch for this release, merge it back into master now, +and delete it. + + git checkout blead + git pull + git merge release-5.xx.yy + git push + git push origin :release-5.xx.yy + git branch -d release-5.xx.yy + =head3 update epigraphs.pod Add your quote to F<Porting/epigraphs.pod> and commit it. @@ -1008,8 +1117,7 @@ Run the C<git add> commands it outputs to add new and modified files. =item * Verify that the build still works, by running C<./Configure> and -C<make test_porting>. (On Win32, run C<nmake> and -C<nmake test TEST_FILES="porting\*.t ..\lib\diagnostics.t">.) +C<make test_porting>. (On Win32 use the appropriate make utility). =item * @@ -1024,14 +1132,14 @@ When C<make test_porting> passes, commit the new perldelta. =back At this point you may want to compare the commit with a previous bump to -see if they look similar. See commit e3c71926d3 for an example of a +see if they look similar. See commit 4eabcf701b for an example of a previous version bump. -=for checklist skip BLEAD-POINT MAINT RC +=for checklist skip MAINT RC =head3 bump version -I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT> +I<You MUST SKIP this step for RC and MAINT> If this was a BLEAD-FINAL release (i.e. the first release of a new maint series, 5.x.0 where x is even), then bump the version in the blead branch @@ -1049,6 +1157,9 @@ Run F<regen/feature.pl> to propagate the changes to F<lib/feature.pm>. Then follow the section L<"Bump the version number"> to bump the version in the remaining files and test and commit. +If this was a BLEAD-POINT release, then just follow the section +L<"Bump the version number">. + =head3 clean build and test @@ -1117,13 +1228,13 @@ And nag the sysadmins to make this directory available via rsync. =for checklist skip BLEAD-POINT RC -=head3 copy perldelta.pod to other branches +=head3 copy perldelta.pod to blead I<You MUST SKIP this step for RC, BLEAD-POINT> -Copy the perldelta.pod for this release into the other branches; for -example: +Copy the perldelta.pod for this release into blead; for example: + $ cd ..../blead $ cp -i ../5.10.x/pod/perldelta.pod pod/perl5101delta.pod # for example $ git add pod/perl5101delta.pod @@ -1133,18 +1244,17 @@ Edit F<pod/perl.pod> to add an entry for the file, e.g.: Then rebuild various files: - $ perl pod/buildtoc --build-all + $ perl Porting/pod_rules.pl Finally, commit: $ git commit -a -m 'add perlXXXdelta' -=head3 update perlhist.pod in other branches +=head3 copy perlhist.pod entries to blead Make sure any recent F<pod/perlhist.pod> entries are copied to -F<perlhist.pod> on other branches -e.g. +F<perlhist.pod> on blead. e.g. 5.8.9 2008-Dec-14 @@ -1190,12 +1300,11 @@ to ensure that the tarballs are available on the website. Check C</src> on CPAN (on a fast mirror) to ensure that links to the new tarballs have appeared. There should be links in C</src/5.0> -(which is accumulating all new versions), links in C</src> (which shows -only the latest version on each branch), and an appropriate mention in -C</src/README.html> (which describes the latest versions). +(which is accumulating all new versions), and an appropriate mention in +C</src> (which describes the latest versions in each branch, with links). These links should appear automatically, some hours after upload. -If they don't, or the C<README.html> description is inadequate, +If they don't, or the C</src> description is inadequate, ask Ask <ask@perl.org>. =item * @@ -1217,10 +1326,13 @@ It should be visible at a URL like C<http://search.cpan.org/dist/perl-5.10.1/>. I<You MUST SKIP this step for a RC release> -In the C<perlorg> repository, edit F<docs/dev/perl5/index.html> -to link to this new release. Then make a pull request to Leo Lapworth. -If this fails for some reason and you cannot cajole anybody else into -submitting that change, you can mail Leo as last resort. +In your C<perlweb> repository, link to the new release. For a new +latest-maint release, edit F<docs/shared/tpl/stats.html>. Otherwise, +edit F<docs/dev/perl5/index.html>. + +Then make a pull request to Leo Lapworth. If this fails for some reason +and you cannot cajole anybody else into submitting that change, you can +mail Leo as last resort. This repository can be found on L<github|https://github.com/perlorg/perlweb>. diff --git a/gnu/usr.bin/perl/Porting/release_schedule.pod b/gnu/usr.bin/perl/Porting/release_schedule.pod index d55e8e1ea9e..9249f185306 100644 --- a/gnu/usr.bin/perl/Porting/release_schedule.pod +++ b/gnu/usr.bin/perl/Porting/release_schedule.pod @@ -7,43 +7,42 @@ release schedules for the next, current and previous stable versions of Perl. Dates with all question marks will only be releases if deemed necessary by the Pumpking. -=head2 Perl 5.16 +=head2 Perl 5.18 -Code freezes (which happen in the 5.15.X series) +Code freezes (which happen in the 5.17.X series) - 2011-12-20 5.15.6 Contentious changes freeze - 2012-02-20 5.15.8 User-visible changes freeze - 2012-03-20 5.15.9 Full code freeze + 2013-01-20 5.17.8 Contentious changes freeze + 2013-02-20 5.17.9 User-visible changes freeze + 2013-03-20 5.17.10 Full code freeze Release schedule (with release manager): - 2012-04-?? 5.16.0-RC0 Ricardo Signes + 2013-04-?? 5.18.0-RC0 Ricardo Signes ...(interim RC releases)... - 2012-05-16 5.16.0 (final) Ricardo Signes + 2013-05-18 5.18.0 (final) Ricardo Signes (RC0 will be released once we think that all the blockers have been -addressed. This typically means some time in April.) +addressed. This typically means some time in April or May.) -=head2 Perl 5.14 +=head2 Perl 5.16 Release schedule (with release managers): - 2011-05-14 5.14.0 (final) Jesse Vincent - 2011-06-16 5.14.1 ✓ Jesse Vincent - 2011-09-14 5.14.2 ✓ Florian Ragwitz - 2012-0?-?? 5.14.3 Ricardo Signes - ????-??-?? 5.14.4 ?? + 2012-05-20 5.16.0 ✓ Ricardo Signes + 2012-08-08 5.16.1 ✓ Ricardo Signes + 2012-11-01 5.16.2 ✓ Ricardo Signes + 2013-03-11 5.16.3 ✓ Ricardo Signes + ????-??-?? 5.16.4 ?? -=head2 Perl 5.12 +=head2 Perl 5.14 Release schedule (with release managers): - 2010-04-12 5.12.0 ✓ Jesse Vincent - 2010-05-16 5.12.1 ✓ Jesse Vincent - 2010-09-06 5.12.2 ✓ Jesse Vincent - 2011-01-21 5.12.3 ✓ Ricardo Signes - 2011-06-20 5.12.4 ✓ Leon Brocard - ????-??-?? 5.12.5 ?? + 2011-05-14 5.14.0 (final) Jesse Vincent + 2011-06-16 5.14.1 ✓ Jesse Vincent + 2011-09-14 5.14.2 ✓ Florian Ragwitz + 2012-10-12 5.14.3 ✓ Dominic Hargreaves + 2013-03-10 5.14.4 ✓ David Mitchell =head1 DEVELOPMENT RELEASE SCHEDULE @@ -59,27 +58,31 @@ When shipping a release, you should include the schedule for (at least) the next four releases. If a stable version of Perl is released, you should reset the version numbers to the next blead series. -=head2 Perl 5.15 - -Release schedule (with release managers and code freeze points): - - 2011-06-20 5.15.0 ✓ David Golden - 2011-07-20 5.15.1 ✓ Zefram - 2011-08-20 5.15.2 ✓ Ricardo Signes - 2011-09-20 5.15.3 ✓ Stevan Little - 2011-10-20 5.15.4 ✓ Florian Ragwitz - 2011-11-20 5.15.5 ✓ Steve Hay - 2011-12-20 5.15.6 ✓ Dave Rolsky (Contentious code freeze) - 2012-01-20 5.15.7 ✓ Chris Williams - 2012-02-20 5.15.8 ✓ Max Maischein (User-visible code freeze) - 2012-03-20 5.15.9 Abigail (Full code freeze) - =head2 Perl 5.17 - 2012-04-20 5.17.0 Dave Cross - 2012-05-20 5.17.1 Zefram - 2012-06-20 5.17.2 Jesse Luehrs - 2012-07-20 5.17.3 + 2012-05-26 5.17.0 ✓ Zefram + 2012-06-20 5.17.1 ✓ Jesse Luehrs + 2012-07-20 5.17.2 ✓ Tony Cook + 2012-08-20 5.17.3 ✓ Steve Hay + 2012-09-20 5.17.4 ✓ Florian Ragwitz + 2012-10-20 5.17.5 ✓ Florian Ragwitz + 2012-11-20 5.17.6 ✓ Ricardo Signes + 2012-12-18 5.17.7 ✓ Dave Rolsky + 2013-01-20 5.17.8 ✓ Aaron Crane + 2013-02-20 5.17.9 ✓ Chris Williams + 2013-03-20 5.17.10 Max Maischein + 2013-04-20 5.17.11 + +=head2 Perl 5.19 + + 2013-05-20 5.19.0 Ricardo Signes + 2013-06-20 5.19.1 David Golden + 2013-07-20 5.19.2 Aristotle Pagaltzis + 2013-08-20 5.19.3 Steve Hay + 2013-09-20 5.19.4 + 2013-10-20 5.19.5 + 2013-11-20 5.19.6 + 2013-12-20 5.19.7 =head1 VICTIMS @@ -109,6 +112,8 @@ Dave Rolsky <autarch@urth.org> Abigail <abigail@abigail.be> Max Maischein <corion@cpan.org> Dave Cross <dave@perlhacks.com> +Jesse Luehrs <doy@cpan.org> +Tony Cook <tony@develop-help.com> =head1 AUTHOR diff --git a/gnu/usr.bin/perl/Porting/sync-with-cpan b/gnu/usr.bin/perl/Porting/sync-with-cpan index aee808b7606..b6ee2464078 100644 --- a/gnu/usr.bin/perl/Porting/sync-with-cpan +++ b/gnu/usr.bin/perl/Porting/sync-with-cpan @@ -1,45 +1,124 @@ #!/usr/bin/env perl -# -# Script to help out with syncing cpan distros. -# -# Does the following: -# - Fetches the package list from CPAN. Finds the current version of -# the given package. [1] -# - Downloads the relevant tarball; unpacks the tarball;. [1] -# - Clean out the old directory (git clean -dfx) -# - Moves the old directory out of the way, moves the new directory in place. -# - Restores any .gitignore file. -# - Removes files from @IGNORE and EXCLUDED -# - git add any new files. -# - git rm any files that are gone. -# - Remove the +x bit on files in t/ -# - Remove the +x bit on files that don't have in enabled in the current dir -# - Restore files mentioned in CUSTOMIZED -# - Adds new files to MANIFEST -# - Runs a "make" (assumes a configure has been run) -# - Cleans up -# - Runs tests for the package -# - Runs the porting tests -# -# [1] If the --tarball option is given, then CPAN is not consulted. -# --tarball should be the path to the tarball; the version is extracted -# from the filename -- but can be overwritten by the --version option. -# -# TODO: - Delete files from MANIFEST -# - Update Porting/Maintainers.pl -# - Optional, run a full test suite -# - Handle complicated FILES -# -# This is an initial version; no attempt has been made yet to make this -# portable. It shells out instead of trying to find a Perl solution. -# In particular, it assumes wget, git, tar, chmod, perl, make, and rm -# to be available. -# -# Usage: perl Porting/sync-with-cpan <module> -# where <module> is the name it appears in the %Modules hash -# of Porting/Maintainers.pl -# +=head1 NAME + +Porting/sync-with-cpan - Synchronize with CPAN distributions + +=head1 SYNOPSIS + + perl Porting/sync-with-cpan <module> + +where <module> is the name it appears in the C<%Modules> hash +of F<Porting/Maintainers.pl> + +=head1 DESCRIPTION + +Script to help out with syncing cpan distros. + +Does the following: + +=over 4 + +=item * + +Fetches the package list from CPAN. Finds the current version of the given +package. [1] + +=item * + +Downloads the relevant tarball; unpacks the tarball. [1] + +=item * + +Clean out the old directory (C<git clean -dfx>) + +=item * + +Moves the old directory out of the way, moves the new directory in place. + +=item * + +Restores any F<.gitignore> file. + +=item * + +Removes files from C<@IGNORE> and C<EXCLUDED> + +=item * + +C<git add> any new files. + +=item * + +C<git rm> any files that are gone. + +=item * + +Remove the +x bit on files in F<t/> + +=item * + +Remove the +x bit on files that don't have it enabled in the current dir + +=item * + +Restore files mentioned in C<CUSTOMIZED> + +=item * + +Adds new files to F<MANIFEST> + +=item * + +Runs a C<make> (assumes a configure has been run) + +=item * + +Cleans up + +=item * + +Runs tests for the package + +=item * + +Runs the porting tests + +=back + +[1] If the C<--tarball> option is given, then CPAN is not consulted. +C<--tarball> should be the path to the tarball; the version is extracted +from the filename -- but can be overwritten by the C<--version> option. + +=head1 TODO + +=over 4 + +=item * + +Delete files from F<MANIFEST> + +=item * + +Update F<Porting/Maintainers.pl> + +=item * + +Optional, run a full test suite + +=item * + +Handle complicated C<FILES> + +=back + +This is an initial version; no attempt has been made yet to make this +portable. It shells out instead of trying to find a Perl solution. +In particular, it assumes wget, git, tar, chmod, perl, make, and rm +to be available. + +=cut + package Maintainers; @@ -48,11 +127,10 @@ use 5.010; use strict; use warnings; use Getopt::Long; -no warnings 'syntax'; $| = 1; -die "This does not like top level directory" +die "This does not look like a top level directory" unless -d "cpan" && -d "Porting"; our @IGNORABLE; @@ -68,6 +146,10 @@ my $package = "02packages.details.txt"; my $package_url = "http://www.cpan.org/modules/$package"; my $package_file = "/tmp/$package"; +my @problematic = ( + 'podlators', # weird CUSTOMIZED section due to .PL files +); + GetOptions ('tarball=s' => \my $tarball, 'version=s' => \my $version, @@ -84,7 +166,7 @@ my $info = $Modules {$module} or die "Cannot find module $module"; my $distribution = $$info {DISTRIBUTION}; my @files = glob $$info {FILES}; -if (@files != 1 || !-d $files [0] || $$info {MAP}) { +if (!-d $files [0] || grep { $_ eq $module } @problematic) { say "This looks like a setup $0 cannot handle (yet)"; unless ($force) { say "Will not continue without a --force option"; @@ -96,7 +178,7 @@ if (@files != 1 || !-d $files [0] || $$info {MAP}) { chdir "cpan"; -my $pkg_dir = $$info {FILES}; +my $pkg_dir = $files[0]; $pkg_dir =~ s!.*/!!; my ($old_version) = $distribution =~ /-([0-9.]+)\.tar\.gz/; @@ -123,6 +205,10 @@ unless ($tarball) { or die "Cannot find $cpan_mod on CPAN\n"; chomp $new_line; (undef, $new_version, my $new_path) = split ' ', $new_line; + if (defined $version) { + $new_path =~ s/-$new_version\./-$version\./; + $new_version = $version; + } $new_file = (split '/', $new_path) [-1]; my $url = "http://search.cpan.org/CPAN/authors/id/$new_path"; @@ -138,7 +224,6 @@ else { } my $old_dir = "$pkg_dir-$old_version"; -my $new_dir = "$pkg_dir-$new_version"; say "Cleaning out old directory"; system git => 'clean', '-dfxq', $pkg_dir; @@ -146,11 +231,66 @@ system git => 'clean', '-dfxq', $pkg_dir; say "Unpacking $new_file"; system tar => 'xfz', $new_file; +(my $new_dir = $new_file) =~ s/\.tar\.gz//; +# ensure 'make' will update all files +system('find', $new_dir, '-exec', 'touch', '{}', ';'); say "Renaming directories"; rename $pkg_dir => $old_dir; -rename $new_dir => $pkg_dir; +say "Creating new package directory"; +mkdir $pkg_dir; + +say "Populating new package directory"; +my $map = $$info {MAP}; +my @EXCLUDED_QR; +my %EXCLUDED_QQ; +if ($$info {EXCLUDED}) { + foreach my $entry (@{$$info {EXCLUDED}}) { + if (ref $entry) {push @EXCLUDED_QR => $entry} + else {$EXCLUDED_QQ {$entry} = 1} + } +} + +FILE: for my $file ( `find $new_dir -type f` ) { + chomp $file; + my $old_file = $file; + $file =~ s{^$new_dir/}{}; + + next if $EXCLUDED_QQ{$file}; + for my $qr (@EXCLUDED_QR) { + next FILE if $file =~ $qr; + } + + if ( $map ) { + for my $key ( sort { length $b <=> length $a } keys %$map ) { + my $val = $map->{$key}; + last if $file =~ s/^$key/$val/; + } + } + else { + $file = $files[0] . '/' . $file; + } + + if ( $file =~ m{^cpan/} ) { + $file =~ s{^cpan/}{}; + } + else { + $file = '../' . $file; + } + + my $prefix = ''; + my @parts = split '/', $file; + pop @parts; + for my $part (@parts) { + $prefix .= '/' if $prefix; + $prefix .= $part; + mkdir $prefix unless -d $prefix; + } + + rename $old_file => $file; +} +system 'rm', '-rf', $new_dir; if (-f "$old_dir/.gitignore") { say "Restoring .gitignore"; @@ -169,18 +309,6 @@ chomp @old_files; s!^[^/]+/!! for @old_files; my %old_files = map {$_ => 1} @old_files; -# -# Find files that can be deleted. -# -my @EXCLUDED_QR; -my %EXCLUDED_QQ; -if ($$info {EXCLUDED}) { - foreach my $entry (@{$$info {EXCLUDED}}) { - if (ref $entry) {push @EXCLUDED_QR => $entry} - else {$EXCLUDED_QQ {$entry} = 1} - } -} - my @delete; my @commit; my @gone; @@ -192,16 +320,6 @@ foreach my $file (@new_files) { push @delete => $file; next; } - if ($EXCLUDED_QQ {$file}) { - push @delete => $file; - next; - } - foreach my $pattern (@EXCLUDED_QR) { - if ($file =~ /$pattern/) { - push @delete => $file; - next FILE; - } - } push @commit => $file; } foreach my $file (@old_files) { @@ -319,10 +437,48 @@ print "\n"; say "Failed tests: @failed" if @failed; -print "Now you ought to run a make; make test ...\n"; +say "Attempting to update Maintainers.pl"; +chdir '..'; + +open my $Maintainers_pl, '<', 'Porting/Maintainers.pl'; +open my $new_Maintainers_pl, '>', 'Maintainers.pl'; + +my $found; +my $in_mod_section; +while (<$Maintainers_pl>) { + if (!$found) { + if ($in_mod_section) { + if (/DISTRIBUTION/) { + if (s/\Q$old_version/$new_version/) { + $found = 1; + } + } + + if (/^ }/) { + $in_mod_section = 0; + } + } + + if (/\Q$cpan_mod/) { + $in_mod_section = 1; + } + } + + print $new_Maintainers_pl $_; +} + +if ($found) { + unlink 'Porting/Maintainers.pl'; + rename 'Maintainers.pl' => 'Porting/Maintainers.pl'; + system chmod => 'a+x', 'Porting/Maintainers.pl'; +} +else { + say "Could not update Porting/Maintainers.pl."; + say "Make sure you update this by hand before committing."; +} -say "Do not forget to update Porting/Maintainers.pl before committing"; say "$o_module is now version $new_version"; +say "Now you ought to run a make; make test ..."; __END__ diff --git a/gnu/usr.bin/perl/Porting/todo.pod b/gnu/usr.bin/perl/Porting/todo.pod index 6d2d51a5ba1..67792531ff2 100644 --- a/gnu/usr.bin/perl/Porting/todo.pod +++ b/gnu/usr.bin/perl/Porting/todo.pod @@ -23,8 +23,44 @@ not, but if your patch is incorporated, then we'll add your name to the F<AUTHORS> file, which ships in the official distribution. How many other programming languages offer you 1 line of immortality? +=head1 Tasks that need only a little Perl knowledge + +=head2 Fix POD errors in Perl documentation + +Perl documentation is furnished in POD (Plain Old Documentation); see +L<perlpod>. We also have a utility that checks for various errors in +this documentation: F<t/porting/podcheck.t>. Unfortunately many files +have errors in them, and there is a database of known problems, kept in +F<t/porting/known_pod_issues.dat>. The most prevalent errors are lines +too wide to fit in a standard terminal window, but there are more +serious problems as well; and there are items listed there that are not +in fact errors. The task would be to go through and clean up the +documentation. This would be a good way to learn more about Perl. + =head1 Tasks that only need Perl knowledge +=head2 Classify bug tickets by type + +Known bugs in Perl are tracked by L<https://rt.perl.org/rt3> (which also +includes Perl 6). A summary can be found at +L<https://rt.perl.org/rt3/NoAuth/perl5/Overview.html>. +It shows bugs classified by "type". However, the type of many of the +bugs is "unknown". This greatly lowers the chances of them getting +fixed, as the number of open bugs is overwhelming -- too many to wade +through for someone to try to find the bugs in the parts of +Perl that s/he knows well enough to try to fix. This task involves +going through these bugs and classifying them into one or more types. + +=head2 Ongoing: investigate new bug reports + +When a bug report is filed, it would be very helpful to have someone do +a quick investigation to see if it is a real problem, and to reply to +the poster about it, asking for example code that reproduces the +problem. Such code should be added to the test suite as TODO tests, and +the ticket should be classified by type. To get started on this task, +look at the tickets that are marked as "New Issues" in +L<https://rt.perl.org/rt3/NoAuth/perl5/Overview.html>. + =head2 Migrate t/ from custom TAP generation Many tests below F<t/> still generate TAP by "hand", rather than using library @@ -63,6 +99,14 @@ Schwern has promised to donate to $500 to TPF. We may need volunteers to hold him upside down and shake vigorously in order to actually extract the cash. +=head2 Write descriptions for all tests + +Many individual tests in the test suite lack descriptions (or names, or labels +-- call them what you will). Many files completely lack descriptions, meaning +that the only output you get is the test numbers. If all tests had +descriptions, understanding what the tests are testing and why they sometimes +fail would both get a whole lot easier. + =head2 Improve the coverage of the core tests Use Devel::Cover to ascertain the core modules' test coverage, then add @@ -150,6 +194,12 @@ whole category. Many diagnostic messages are not currently documented. The list is at the end of t/porting/diag.t. +=head2 Write TODO tests for open bugs + +Sometimes bugs get fixed as a side effect of something else, and +the bug remains open because no one realizes that it has been fixed. +Ideally, every open bug should have a TODO test in the core test suite. + =head1 Tasks that need a little sysadmin-type knowledge Or if you prefer, tasks that you would learn from, and broaden your skills @@ -416,7 +466,7 @@ Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall. On these systems, it might be the default compilation mode, and there is currently no guarantee that passing no use64bitall option to the Configure process will build a 32bit perl. Implementing -Duse32bit* -options would be nice for perl 5.18.0. +options would be nice for perl 5.18.2. =head2 Profile Perl - am I hot or not? @@ -438,19 +488,6 @@ suggest evictions and promotions to achieve a better F<pp_hot.c>. One piece of Perl code that might make a good testbed is F<installman>. -=head2 Allocate OPs from arenas - -Currently all new OP structures are individually malloc()ed and free()d. -All C<malloc> implementations have space overheads, and are now as fast as -custom allocates so it would both use less memory and less CPU to allocate -the various OP structures from arenas. The SV arena code can probably be -re-used for this. - -Note that Configuring perl with C<-Accflags=-DPL_OP_SLAB_ALLOC> will use -Perl_Slab_alloc() to pack optrees into a contiguous block, which is -probably superior to the use of OP arenas, esp. from a cache locality -standpoint. See L<Profile Perl - am I hot or not?>. - =head2 Improve win32/wince.c Currently, numerous functions look virtually, if not completely, @@ -723,6 +760,11 @@ L</"Virtualize operating system access">. Currently the %ENV entries are always byte strings. See L</"Virtualize operating system access">. +(See RT ticket #113536 for information on Win32's handling of %ENV, +which was fixed to work with native ANSI codepage characters in the +environment, but still doesn't work with other characters outside of +that codepage present in the environment.) + =head2 Unicode and glob() Currently glob patterns and filenames returned from File::Glob::glob() @@ -852,6 +894,12 @@ I<';' isn't legal inside an expression - if you need multiple statements use a do {...} block>. See the thread starting at L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-09/msg00573.html> +=head2 strict as warnings + +See L<http://markmail.org/message/vbrupaslr3bybmvk>, where Josua ben Jore +writes: I've been of the opinion that everything strict.pm does ought to be +able to considered just warnings that have been promoted to 'FATAL'. + =head2 lexicals used only once This warns: @@ -878,15 +926,6 @@ was added, with the result that the synthetic start class often will fail to narrow down the possible choices when given non-Latin1 input. Karl Williamson has been working on this - talk to him. -=begin todo - -Many things are fixed, but is these still true? - - The tokeniser ignores the UTF-8-ness of C<PL_rsfp>, or any SVs - returned from source filters. - -=end - =head2 state variable initialization in list context Currently this is illegal: @@ -1013,29 +1052,15 @@ implement per-thread working directories: Win32 already does this. See also L</"Extend PerlIO and PerlIO::Scalar">. -=head2 Store the current pad in the OP slab allocator - -=for clarification -I hope that I got that "current pad" part correct - -Currently we leak ops in various cases of parse failure. I suggested that we -could solve this by always using the op slab allocator, and walking it to -free ops. Dave comments that as some ops are already freed during optree -creation one would have to mark which ops are freed, and not double free them -when walking the slab. He notes that one problem with this is that for some ops -you have to know which pad was current at the time of allocation, which does -change. I suggested storing a pointer to the current pad in the memory allocated -for the slab, and swapping to a new slab each time the pad changes. Dave thinks -that this would work. - =head2 repack the optree Repacking the optree after execution order is determined could allow removal of NULL ops, and optimal ordering of OPs with respect to cache-line -filling. The slab allocator could be reused for this purpose. I think that +filling. I think that the best way to do this is to make it an optional step just before the completed optree is attached to anything else, and to use the slab allocator -unchanged, so that freeing ops is identical whether or not this step runs. +unchanged--but allocate a single slab the right size, avoiding partial +slabs--, so that freeing ops is identical whether or not this step runs. Note that the slab allocator allocates ops downwards in memory, so one would have to actually "allocate" the ops in reverse-execution order to get them contiguous in memory in execution order. @@ -1053,7 +1078,7 @@ This code use warnings; my $undef; - + if ($undef == 3) { } elsif ($undef == 0) { } @@ -1076,7 +1101,7 @@ most common and the most confusing). Ideally this code use warnings; my $undef; - + my $a = $undef + 1; my $b = $undef @@ -1130,10 +1155,25 @@ It has been proposed that octal constants be specifiable through the syntax C<0oddddd>, parallel to the existing construct to specify hex constants C<0xddddd> +=head2 Revisit the regex super-linear cache code + +Perl executes regexes using the traditional backtracking algorithm, which +makes it possible to implement a variety of powerful pattern-matching +features (like embedded code blocks), at the cost of taking exponential time +to run on some pathological patterns. The exponential-time problem is +mitigated by the I<super-linear cache>, which detects when we're processing +such a pathological pattern, and does some additional bookkeeping to avoid +much of the work. However, that code has bit-rotted a little; some patterns +don't make as much use of it as they should. The proposal is to analyse +where the current cache code has problems, and extend it to cover those cases. + +See also +L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00339.html> + =head1 Big projects Tasks that will get your name mentioned in the description of the "Highlights -of 5.18.0" +of 5.18.2" =head2 make ithreads more robust |