In perl.git, the branch maint-5.10 has been updated <http://perl5.git.perl.org/perl.git/commitdiff/97df84f5811e7c90ff7368de89dfd99104a684c7?hp=2517d1858d72bab250cbc0a4130617a6491b5499>
- Log ----------------------------------------------------------------- commit 97df84f5811e7c90ff7368de89dfd99104a684c7 Author: David Mitchell <[email protected]> Date: Mon Aug 10 09:35:05 2009 +0100 bump Module::Build in Maintainers.pl (cherry picked from commit 249829ce6656c2e763ab13102348a8d080941b6a) M Porting/Maintainers.pl commit 69d9627577327c4e3b0671cae7fed0fb02eb5dc5 Author: David Golden <[email protected]> Date: Sun Aug 9 22:13:50 2009 -0400 Bump Module::Build version to 0.340201 Module::Build automatically sets configure_requires to its current $VERSION, which causes problems if $VERSION is a dev release not on CPAN. To stabilize 5.10.1, this patch bumps Module::Build 0.34_02 (currently in 5.10.1-RC1) to 0.340201. No other code changes are included. A matching version will be released to CPAN. (cherry picked from commit 1a7f3fa0f2ee133d43509fa6b96901ab4a7781ce) M lib/Module/Build.pm M lib/Module/Build/Base.pm M lib/Module/Build/Changes M lib/Module/Build/Compat.pm M lib/Module/Build/Config.pm M lib/Module/Build/Cookbook.pm M lib/Module/Build/Dumper.pm M lib/Module/Build/ModuleInfo.pm M lib/Module/Build/Notes.pm M lib/Module/Build/PPMMaker.pm M lib/Module/Build/Platform/Amiga.pm M lib/Module/Build/Platform/Default.pm M lib/Module/Build/Platform/EBCDIC.pm M lib/Module/Build/Platform/MPEiX.pm M lib/Module/Build/Platform/MacOS.pm M lib/Module/Build/Platform/RiscOS.pm M lib/Module/Build/Platform/Unix.pm M lib/Module/Build/Platform/VMS.pm M lib/Module/Build/Platform/VOS.pm M lib/Module/Build/Platform/Windows.pm M lib/Module/Build/Platform/aix.pm M lib/Module/Build/Platform/cygwin.pm M lib/Module/Build/Platform/darwin.pm M lib/Module/Build/Platform/os2.pm M lib/Module/Build/PodParser.pm commit 477932373b1a6a56b1e9d9e6b3d88769961d1a71 Author: Rainer Tammer <[email protected]> Date: Fri Aug 7 14:29:07 2009 +0200 5.10.1-RC1 is released Hello, I have attached a small fix for README.aix (5.10.1 / blead). Please could you commit this? Fixes in this patch: * correct some typos * adjust some dates Bye Rainer Dave Mitchell wrote: > I've just uploaded 5.10.1-RC1 to CPAN. > > Once it's hit the mirrors it should be(*) available as > > http://www.cpan.org//authors/id/D/DA/DAPM/perl-5.10.1-RC1.tar.bz2 > > but until then, its available as > > http://www.iabyn.com/tmp/perl-5.10.1-RC1.tar.bz2 > > but please don't advertise that outside of this list. > > The .gz variant is also available. > > Rafael, once its hit the mirrors, can you announce it on use.perl.org? > > So please everyone, test away! > > I'm not planning to change anything between now and final release unless > it's a real showstopper: I'm past caring about the occasional test > failure on some random platform. > > Also note that I'm away this weekend. > > > (*) This is my first ever use of PAUSE > > From 4d658a15475a7866f56ff938d851e6df719c056e Mon Sep 17 00:00:00 2001 From: Rainer Tammer <[email protected]> Date: Fri, 7 Aug 2009 14:25:29 +0200 Subject: [PATCH] Small fix for READEM.aix Signed-off-by: H.Merijn Brand <[email protected]> (cherry picked from commit e37e7c833e8c45586a14c0e4909143bd89f25826) M README.aix commit 121b9059561e3694541e5c2f55ff38c110a3d428 Author: Rafael Garcia-Suarez <[email protected]> Date: Fri Aug 7 13:25:21 2009 +0200 perltodo: Propagate compilation hints to the debugger Suggested by Ben Morrow (cherry picked from commit 53967bb90ff3867cdf0a6117faed24c717c12c22) M pod/perltodo.pod commit 87650ddec1f387a9085353bfab3c564f817e3320 Author: Sam Vilain <[email protected]> Date: Fri Jul 31 15:32:14 2009 +1200 pod/perlipc.pod: add some hints on avoiding pipe deadlocks Tracking down deadlocks when using pipes for IPC can be hard, so put even more notes about gotchas in this section of perlipc. (cherry picked from commit c40e8e9bf43b15cbc5725b65e3085fba60a67489) M pod/perlipc.pod commit 8813a02abcb79b7a2b69c4397f55d9783fb6ed55 Author: Jesse Vincent <[email protected]> Date: Thu Aug 6 14:16:58 2009 +0100 broke out checkAUTHORS aliasing for our two "merijnb" porters Hopefully I got it right (cherry picked from commit 9c1f068a70493ee76b1e0fe3f95a09ae0306c700) M Porting/checkAUTHORS.pl commit 753c36a4923f465e4a26f268d0b0b43ab5d8bb6d Author: Jesse Vincent <[email protected]> Date: Thu Aug 6 14:13:42 2009 +0100 Minor typo and formatting fixes to the release manager guide (cherry picked from commit bf8ea2150222ec4f257861b93bc878bdcf3c882a) M Porting/release_managers_guide.pod commit f744f28c52dc414a9896be69da616c1656928ae1 Author: David Mitchell <[email protected]> Date: Thu Aug 6 03:06:48 2009 +0100 more release_managers_guide.pod tweaking (cherry picked from commit a42352eec1716ae3aeb00d35bc5648ac7ffe5558) M Porting/release_managers_guide.pod commit 178d8b556441a926f9f0566fe8010ed700fa2897 Author: David Mitchell <[email protected]> Date: Thu Aug 6 01:52:44 2009 +0100 Porting/makerel: handle more sha1 variants, and be quieter on failure (cherry picked from commit ecc9c9d9c3a4c0426f481023c08d9331c8c5775f) M Porting/makerel ----------------------------------------------------------------------- Summary of changes: Porting/Maintainers.pl | 2 +- Porting/checkAUTHORS.pl | 5 +- Porting/makerel | 14 +++-- Porting/release_managers_guide.pod | 48 ++++++++++++------- README.aix | 18 ++++---- lib/Module/Build.pm | 2 +- lib/Module/Build/Base.pm | 2 +- lib/Module/Build/Changes | 5 ++ lib/Module/Build/Compat.pm | 2 +- lib/Module/Build/Config.pm | 2 +- lib/Module/Build/Cookbook.pm | 2 +- lib/Module/Build/Dumper.pm | 2 +- lib/Module/Build/ModuleInfo.pm | 2 +- lib/Module/Build/Notes.pm | 2 +- lib/Module/Build/PPMMaker.pm | 2 +- lib/Module/Build/Platform/Amiga.pm | 2 +- lib/Module/Build/Platform/Default.pm | 2 +- lib/Module/Build/Platform/EBCDIC.pm | 2 +- lib/Module/Build/Platform/MPEiX.pm | 2 +- lib/Module/Build/Platform/MacOS.pm | 2 +- lib/Module/Build/Platform/RiscOS.pm | 2 +- lib/Module/Build/Platform/Unix.pm | 2 +- lib/Module/Build/Platform/VMS.pm | 2 +- lib/Module/Build/Platform/VOS.pm | 2 +- lib/Module/Build/Platform/Windows.pm | 2 +- lib/Module/Build/Platform/aix.pm | 2 +- lib/Module/Build/Platform/cygwin.pm | 2 +- lib/Module/Build/Platform/darwin.pm | 2 +- lib/Module/Build/Platform/os2.pm | 2 +- lib/Module/Build/PodParser.pm | 2 +- pod/perlipc.pod | 86 ++++++++++++++++++++++++++++++++++ pod/perltodo.pod | 9 ++++ 32 files changed, 175 insertions(+), 60 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 9b7e288..fd3dabd 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1186,7 +1186,7 @@ package Maintainers; 'Module::Build' => { 'MAINTAINER' => 'kwilliams', - 'DISTRIBUTION' => 'DAGOLDEN/Module-Build-0.34_02.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/Module-Build-0.340201.tar.gz', 'FILES' => q[lib/Module/Build lib/Module/Build.pm], 'EXCLUDED' => [ qw{ t/par.t t/signature.t scripts/bundle.pl}, ], 'CPAN' => 1, diff --git a/Porting/checkAUTHORS.pl b/Porting/checkAUTHORS.pl index 895dad3..e73b65c 100644 --- a/Porting/checkAUTHORS.pl +++ b/Porting/checkAUTHORS.pl @@ -320,9 +320,6 @@ merijn h.m.brand\100xs4all.nl + h.m.brand\100hccnet.nl + merijn\100l1.procura.nl + merijn\100a5.(none) -+ merijnb\100ms.com -+ merijnb\100iloquent.nl -+ merijnb\100iloquent.com mhx mhx-perl\100gmx.net + mhx\100r2d2.(none) nicholas nick\100unfortu.net @@ -549,6 +546,8 @@ mats\100sm6sxl.net mats\100sm5sxl.net mbarbon\100dsi.unive.it mattia.barbon\100libero.it mcmahon\100ibiblio.org mcmahon\100metalab.unc.edu me\100davidglasser.net glasser\100tang-eleven-seventy-nine.mit.edu +merijnb\100iloquent.nl merijnb\100ms.com ++ merijnb\100iloquent.com merlyn\100stonehenge.com merlyn\100gadget.cscaper.com mgjv\100comdyn.com.au mgjv\100tradingpost.com.au mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com diff --git a/Porting/makerel b/Porting/makerel index b23e1c7..2159579 100644 --- a/Porting/makerel +++ b/Porting/makerel @@ -208,10 +208,12 @@ if ($opts{b}) { print "\n"; -if (`which sha1`) { - system("sha1 $perl*.tar.*"); -} elsif (`which shasum`) { - system("shasum $perl*.tar.*"); -} else { - system("ls -ld $perl*"); +system("ls -ld $perl*"); +print "\n"; + +for my $sha (qw(sha1 shasum sha1sum)) { + if (`which $sha 2>/dev/null`) { + system("$sha $perl*.tar.*"); + last; + } } diff --git a/Porting/release_managers_guide.pod b/Porting/release_managers_guide.pod index 4d3a592..ea66609 100644 --- a/Porting/release_managers_guide.pod +++ b/Porting/release_managers_guide.pod @@ -364,13 +364,13 @@ remove any C<TODO> or C<XXX> flags; update the "Known Problems" section with any serious issues for which fixes are not going to happen now; and run through pod and spell checkers, e.g. - podchecker -warnings -warnings pod/perl5101delta.pod - spell pod/perl5101delta.pod + $ podchecker -warnings -warnings pod/perl5101delta.pod + $ spell pod/perl5101delta.pod Also, you may want to generate and view an HTML version of it to check formatting, e.g. - perl pod/pod2html pod/perl5101delta.pod > /tmp/perl5101delta.html + $ perl pod/pod2html pod/perl5101delta.pod > /tmp/perl5101delta.html =item * @@ -439,7 +439,7 @@ Then change to your perl checkout, and if necessary, $ make perl -Thenn, If you have a local CPAN mirror, run: +Then, If you have a local CPAN mirror, run: $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror @@ -523,8 +523,8 @@ Be sure to commit your changes: I<You MUST SKIP this step for SNAPSHOT> -Update patchlevel.h to add a C<-RC1>-or-whatever string; or, if this is a -final release, remove it. For example: +Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is +a final release, remove it. For example: static const char * const local_patches[] = { NULL @@ -540,7 +540,11 @@ Be sure to commit your change: Build perl, then make sure it passes its own test suite, and installs: $ git clean -xdf + $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest + + # or if it's an odd-numbered version: $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest + $ make test install =item * @@ -579,6 +583,12 @@ here =item * +Clean up the temporary directory, e.g. + + $ rm -rf ../perl-x.y.z-RC1 + +=item * + Copy the tarballs (.gz and possibly .bz2) to a web server somewhere you have access to. @@ -599,7 +609,9 @@ Check that basic configuration and tests work on each test machine: Check that the test harness and install work on each test machine: + $ make distclean $ ./Configure -des -Dprefix=/install/path && make all test_harness install + $ cd /install/path =item * @@ -618,13 +630,17 @@ Bootstrap the CPAN client on the clean install: =item * -Install Inline.pm +Try installing a popular CPAN module that's reasonably complex and that +has dependencies; for example: - $ ./bin/perl -MCPAN -e'install Inline' + CPAN> install Inline + CPAN> quit Check that your perl can run this: - $ ./bin/perl -lwe 'use Inline C => "int answer() { return 42;} "; print answer' + $ ./bin/perl -lwe 'use Inline C => "int f() { return 42;} "; print f' + 42 + $ =item * @@ -632,15 +648,13 @@ Bootstrap the CPANPLUS client on the clean install: $ ./bin/cpanp - =item * -Install an XS module. - -=item * +Install an XS module, for example: -If all is well, announce the snapshot to p5p. (For a release candidate, -instead follow the further steps described later.) + CPAN Terminal> i DBI + CPAN Terminal> quit + $ bin/perl -MDBI -e 1 =item * @@ -662,7 +676,7 @@ Once smoking is okay, upload it to PAUSE. This is the point of no return. If anything goes wrong after this point, you will need to re-prepare a new release with a new minor version or RC number. -You may wish to create a .bz2 version of the tarball and upload that too. +Upload both the .gz and .bz2 versions of the tarball. =item * @@ -680,7 +694,7 @@ created. I<You MUST SKIP this step for SNAPSHOT> -Disarm the patchlevel.h change; for example, +Disarm the F<patchlevel.h> change; for example, static const char * const local_patches[] = { NULL diff --git a/README.aix b/README.aix index 68c8503..12ca6ae 100644 --- a/README.aix +++ b/README.aix @@ -32,7 +32,7 @@ like DBD::Oracle, it is better to use the _r version of the compiler. This will not build a threaded Perl, but a thread-enabled Perl. See also L<Threaded Perl> later on. -As of writing (2009-07) only the IBM XL C for AIX or XL C/C++ for AIX +As of writing (2009-08) only the IBM XL C for AIX or XL C/C++ for AIX compiler is supported by IBM on AIX 5L/6.1. The following compiler versions are supported by IBM: @@ -60,7 +60,7 @@ development team. =head2 Incompatibility with AIX Toolbox lib gdbm -If the AIX Toolbox version of lib gdbm 1.8.x ist installed on the +If the AIX Toolbox version of lib gdbm 1.8.x is installed on the system then Perl will not work. This library contains a defect version of the dbm_store() function. @@ -82,11 +82,10 @@ of the dbm_store() function. w th = with thread w/o th = without thread - nyt = not yet tested OK = tested -Successfully tested means that all make test runs with an result of 100% OK. -All tests were conducted with -Duseshrplib set. +Successfully tested means that all "make test" runs finish with an +result of 100% OK. All tests were conducted with -Duseshrplib set. =head2 Building Dynamic Extensions on AIX @@ -136,7 +135,8 @@ can set: data = -1 (default is 262144 * 512 byte) With the default setting the size is limited to 128MB. -The -1 removes this limit. +The -1 removes this limit. If the "make test" fails please change +your /etc/security/limits as stated above. =head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (threaded/32-bit) @@ -204,8 +204,8 @@ make tests in 64-bit mode. The -Dprefix option will install Perl in a directory parallel to the IBM AIX system Perl installation. -If you choose gcc to compile 64-bit Perl then you need to use the -following options: +If you choose gcc to compile 64-bit Perl then you need to add the +following option: -Dcc='gcc -maix64' @@ -469,6 +469,6 @@ Rainer Tammer <[email protected]> =head1 DATE -Version 0.0.9: 08 Jul 2009 +Version 0.0.10: 07 Aug 2009 =cut diff --git a/lib/Module/Build.pm b/lib/Module/Build.pm index 7d3e501..3859fde 100644 --- a/lib/Module/Build.pm +++ b/lib/Module/Build.pm @@ -15,7 +15,7 @@ use Module::Build::Base; use vars qw($VERSION @ISA); @ISA = qw(Module::Build::Base); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; # Okay, this is the brute-force method of finding out what kind of diff --git a/lib/Module/Build/Base.pm b/lib/Module/Build/Base.pm index f902b75..ade64c8 100644 --- a/lib/Module/Build/Base.pm +++ b/lib/Module/Build/Base.pm @@ -4,7 +4,7 @@ package Module::Build::Base; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; BEGIN { require 5.00503 } diff --git a/lib/Module/Build/Changes b/lib/Module/Build/Changes index 930bfd1..9ef9eae 100644 --- a/lib/Module/Build/Changes +++ b/lib/Module/Build/Changes @@ -1,5 +1,10 @@ Revision history for Perl extension Module::Build. +0.340201 - Sun Aug 9 22:11:04 EDT 2009 + + Other: + - Version bump for Perl core for 5.10.1 release; no other changes + 0.34_02 - Sun Jul 26 22:50:40 EDT 2009 Bug-fixes: diff --git a/lib/Module/Build/Compat.pm b/lib/Module/Build/Compat.pm index f6f8f5d..58bed05 100644 --- a/lib/Module/Build/Compat.pm +++ b/lib/Module/Build/Compat.pm @@ -2,7 +2,7 @@ package Module::Build::Compat; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; use File::Basename (); use File::Spec; diff --git a/lib/Module/Build/Config.pm b/lib/Module/Build/Config.pm index 8e0207b..c153f02 100644 --- a/lib/Module/Build/Config.pm +++ b/lib/Module/Build/Config.pm @@ -2,7 +2,7 @@ package Module::Build::Config; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Config; diff --git a/lib/Module/Build/Cookbook.pm b/lib/Module/Build/Cookbook.pm index 40b84a8..300e79c 100644 --- a/lib/Module/Build/Cookbook.pm +++ b/lib/Module/Build/Cookbook.pm @@ -1,7 +1,7 @@ package Module::Build::Cookbook; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; =head1 NAME diff --git a/lib/Module/Build/Dumper.pm b/lib/Module/Build/Dumper.pm index 078ca7c..08ff42f 100644 --- a/lib/Module/Build/Dumper.pm +++ b/lib/Module/Build/Dumper.pm @@ -1,7 +1,7 @@ package Module::Build::Dumper; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; # This is just a split-out of a wrapper function to do Data::Dumper # stuff "the right way". See: diff --git a/lib/Module/Build/ModuleInfo.pm b/lib/Module/Build/ModuleInfo.pm index fc36c01..8df58b3 100644 --- a/lib/Module/Build/ModuleInfo.pm +++ b/lib/Module/Build/ModuleInfo.pm @@ -8,7 +8,7 @@ package Module::Build::ModuleInfo; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use File::Spec; diff --git a/lib/Module/Build/Notes.pm b/lib/Module/Build/Notes.pm index e020e12..72bde6c 100644 --- a/lib/Module/Build/Notes.pm +++ b/lib/Module/Build/Notes.pm @@ -4,7 +4,7 @@ package Module::Build::Notes; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Data::Dumper; use IO::File; diff --git a/lib/Module/Build/PPMMaker.pm b/lib/Module/Build/PPMMaker.pm index aa4b32a..588c799 100644 --- a/lib/Module/Build/PPMMaker.pm +++ b/lib/Module/Build/PPMMaker.pm @@ -2,7 +2,7 @@ package Module::Build::PPMMaker; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; # This code is mostly borrowed from ExtUtils::MM_Unix 6.10_03, with a diff --git a/lib/Module/Build/Platform/Amiga.pm b/lib/Module/Build/Platform/Amiga.pm index dd92320..34002db 100644 --- a/lib/Module/Build/Platform/Amiga.pm +++ b/lib/Module/Build/Platform/Amiga.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Amiga; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/Default.pm b/lib/Module/Build/Platform/Default.pm index 3b4cbc3..04cbcd7 100644 --- a/lib/Module/Build/Platform/Default.pm +++ b/lib/Module/Build/Platform/Default.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Default; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/EBCDIC.pm b/lib/Module/Build/Platform/EBCDIC.pm index 1b7f57e..be8bae7 100644 --- a/lib/Module/Build/Platform/EBCDIC.pm +++ b/lib/Module/Build/Platform/EBCDIC.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::EBCDIC; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/MPEiX.pm b/lib/Module/Build/Platform/MPEiX.pm index 895c08d..90adff5 100644 --- a/lib/Module/Build/Platform/MPEiX.pm +++ b/lib/Module/Build/Platform/MPEiX.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::MPEiX; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/MacOS.pm b/lib/Module/Build/Platform/MacOS.pm index 6d3489f..a355675 100644 --- a/lib/Module/Build/Platform/MacOS.pm +++ b/lib/Module/Build/Platform/MacOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::MacOS; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; use vars qw(@ISA); diff --git a/lib/Module/Build/Platform/RiscOS.pm b/lib/Module/Build/Platform/RiscOS.pm index e1e3c35..c039eca 100644 --- a/lib/Module/Build/Platform/RiscOS.pm +++ b/lib/Module/Build/Platform/RiscOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::RiscOS; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/Unix.pm b/lib/Module/Build/Platform/Unix.pm index 3b394c9..579b625 100644 --- a/lib/Module/Build/Platform/Unix.pm +++ b/lib/Module/Build/Platform/Unix.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Unix; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/VMS.pm b/lib/Module/Build/Platform/VMS.pm index d597148..102bc5f 100644 --- a/lib/Module/Build/Platform/VMS.pm +++ b/lib/Module/Build/Platform/VMS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::VMS; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/VOS.pm b/lib/Module/Build/Platform/VOS.pm index eaa4d66..b35e795 100644 --- a/lib/Module/Build/Platform/VOS.pm +++ b/lib/Module/Build/Platform/VOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::VOS; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/lib/Module/Build/Platform/Windows.pm b/lib/Module/Build/Platform/Windows.pm index 2184152..d70563f 100644 --- a/lib/Module/Build/Platform/Windows.pm +++ b/lib/Module/Build/Platform/Windows.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Windows; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Config; diff --git a/lib/Module/Build/Platform/aix.pm b/lib/Module/Build/Platform/aix.pm index 388dc44..0caa376 100644 --- a/lib/Module/Build/Platform/aix.pm +++ b/lib/Module/Build/Platform/aix.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::aix; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/lib/Module/Build/Platform/cygwin.pm b/lib/Module/Build/Platform/cygwin.pm index 1ce0a98..f73ce95 100644 --- a/lib/Module/Build/Platform/cygwin.pm +++ b/lib/Module/Build/Platform/cygwin.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::cygwin; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/lib/Module/Build/Platform/darwin.pm b/lib/Module/Build/Platform/darwin.pm index 1a0295a..6ba7cb9 100644 --- a/lib/Module/Build/Platform/darwin.pm +++ b/lib/Module/Build/Platform/darwin.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::darwin; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/lib/Module/Build/Platform/os2.pm b/lib/Module/Build/Platform/os2.pm index a65027c..a0c5fd5 100644 --- a/lib/Module/Build/Platform/os2.pm +++ b/lib/Module/Build/Platform/os2.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::os2; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/lib/Module/Build/PodParser.pm b/lib/Module/Build/PodParser.pm index e59ce01..d4e1822 100644 --- a/lib/Module/Build/PodParser.pm +++ b/lib/Module/Build/PodParser.pm @@ -2,7 +2,7 @@ package Module::Build::PodParser; use strict; use vars qw($VERSION); -$VERSION = '0.34_02'; +$VERSION = '0.340201'; $VERSION = eval $VERSION; use vars qw(@ISA); diff --git a/pod/perlipc.pod b/pod/perlipc.pod index 416ded5..77f0b6e 100644 --- a/pod/perlipc.pod +++ b/pod/perlipc.pod @@ -630,6 +630,68 @@ And here's a safe pipe open for writing: # NOTREACHED } +It is very easy to dead-lock a process using this form of open(), or +indeed any use of pipe() and multiple sub-processes. The above +example is 'safe' because it is simple and calls exec(). See +L</"Avoiding Pipe Deadlocks"> for general safety principles, but there +are extra gotchas with Safe Pipe Opens. + +In particular, if you opened the pipe using C<open FH, "|-">, then you +cannot simply use close() in the parent process to close an unwanted +writer. Consider this code: + + $pid = open WRITER, "|-"; + defined $pid or die "fork failed; $!"; + if ($pid) { + if (my $sub_pid = fork()) { + close WRITER; + # do something else... + } + else { + # write to WRITER... + exit; + } + } + else { + # do something with STDIN... + exit; + } + +In the above, the true parent does not want to write to the WRITER +filehandle, so it closes it. However, because WRITER was opened using +C<open FH, "|-">, it has a special behaviour: closing it will call +waitpid() (see L<perlfunc/waitpid>), which waits for the sub-process +to exit. If the child process ends up waiting for something happening +in the section marked "do something else", then you have a deadlock. + +This can also be a problem with intermediate sub-processes in more +complicated code, which will call waitpid() on all open filehandles +during global destruction; in no predictable order. + +To solve this, you must manually use pipe(), fork(), and the form of +open() which sets one file descriptor to another, as below: + + pipe(READER, WRITER); + $pid = fork(); + defined $pid or die "fork failed; $!"; + if ($pid) { + close READER; + if (my $sub_pid = fork()) { + close WRITER; + } + else { + # write to WRITER... + exit; + } + # write to WRITER... + } + else { + open STDIN, "<&READER"; + close WRITER; + # do something... + exit; + } + Since Perl 5.8.0, you can also use the list form of C<open> for pipes : the syntax @@ -645,6 +707,30 @@ correctly implemented on alien systems. Additionally, these are not true multithreading. If you'd like to learn more about threading, see the F<modules> file mentioned below in the SEE ALSO section. +=head2 Avoiding Pipe Deadlocks + +In general, if you have more than one sub-process, you need to be very +careful that any process which does not need the writer half of any +pipe you create for inter-process communication does not have it open. + +The reason for this is that any child process which is reading from +the pipe and expecting an EOF will never receive it, and therefore +never exit. A single process closing a pipe is not enough to close it; +the last process with the pipe open must close it for it to read EOF. + +There are some features built-in to unix to help prevent this most of +the time. For instance, filehandles have a 'close on exec' flag (set +I<en masse> with Perl using the C<$^F> L<perlvar>), so that any +filehandles which you didn't explicitly route to the STDIN, STDOUT or +STDERR of a child I<program> will automatically be closed for you. + +So, always explicitly and immediately call close() on the writable end +of any pipe, unless that process is actually writing to it. If you +don't explicitly call close() then be warned Perl will still close() +all the filehandles during global destruction. As warned above, if +those filehandles were opened with Safe Pipe Open, they will also call +waitpid() and you might again deadlock. + =head2 Bidirectional Communication with Another Process While this works reasonably well for unidirectional communication, what diff --git a/pod/perltodo.pod b/pod/perltodo.pod index 8a5a33a..7e7a352 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -926,6 +926,15 @@ L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html> There is no method on tied filehandles to allow them to be called back by formats. +=head2 Propagate compilation hints to the debugger + +Currently a debugger started with -dE on the command-line doesn't see the +features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't +propagated to the debugger. Probably it would be a good thing to propagate +hints from the innermost non-C<DB::> scope: this would make code eval'ed +in the debugger see the features (and strictures, etc.) currently in +scope. + =head2 Attach/detach debugger from running program The old perltodo notes "With C<gdb>, you can attach the debugger to a running -- Perl5 Master Repository
