Changes 5.14.1:

* Several modules were updated to fix minor bugs.
* Tests were fixed.
* Documentation was improved.

Changes 5.14.0:
* Unicode version 6.0 is now supported.
* Regular expressions can now be reset to the default modifiers.
* Four new regular expression modifiers, "/d", "/l" , "/u", and "/a", were
  introduced.
* The substitution operators now support the modifier "/r" to work
  non-destructively, leaving the original unmodified.
* Larger octals can now be specified.
* Array and hash operators can now experimentally operate directly on hard
  references.
* printf-like functions now understand post-1980 size modifiers.
* Exception handling was made more reliable and consistent.
* Other enhancements and many bug fixes were made

PkgSrc:
* Fixed configuring on Mac OS X 10.7.
This commit is contained in:
adam 2011-08-05 18:06:14 +00:00
parent 20ae37f03c
commit 91ce9f644c
22 changed files with 75 additions and 1192 deletions

View file

@ -1,9 +1,8 @@
# $NetBSD: Makefile,v 1.172 2011/05/16 07:59:04 abs Exp $
# $NetBSD: Makefile,v 1.173 2011/08/05 18:06:14 adam Exp $
.include "license.mk"
.include "Makefile.common"
PKGREVISION= 2
COMMENT= Practical Extraction and Report Language
PKG_DESTDIR_SUPPORT= user-destdir

View file

@ -1,9 +1,9 @@
# $NetBSD: Makefile.common,v 1.9 2010/09/09 20:35:43 sno Exp $
# $NetBSD: Makefile.common,v 1.10 2011/08/05 18:06:14 adam Exp $
#
# used by lang/perl5/Makefile
# used by databases/p5-gdbm/Makefile
DISTNAME= perl-5.12.2
DISTNAME= perl-5.14.1
CATEGORIES= lang devel perl5
MASTER_SITES= ${MASTER_SITE_PERL_CPAN:S,/modules/by-module/$,/src/5.0/,}
DISTFILES+= ${DISTNAME}${EXTRACT_SUFX}

View file

@ -1,4 +1,4 @@
# $NetBSD: buildlink3.mk,v 1.47 2010/08/27 05:27:37 sno Exp $
# $NetBSD: buildlink3.mk,v 1.48 2011/08/05 18:06:14 adam Exp $
BUILDLINK_TREE+= perl
@ -6,13 +6,13 @@ BUILDLINK_TREE+= perl
PERL_BUILDLINK3_MK:=
.include "../../mk/bsd.fast.prefs.mk"
PERL5_REQD+= 5.12.0
PERL5_REQD+= 5.14.0
.for _perl5_ver_ in ${PERL5_REQD}
BUILDLINK_API_DEPENDS.perl+= perl>=${_perl5_ver_}
.endfor
# Prevent p5-* etc. packages built for 5.12.0 to be used
# Prevent p5-* etc. packages built for 5.14.0 to be used
# with the next incompatible version of perl:
BUILDLINK_API_DEPENDS.perl+= perl<5.14.0
BUILDLINK_API_DEPENDS.perl+= perl<5.16.0
BUILDLINK_PKGSRCDIR.perl?= ../../lang/perl5

View file

@ -1,26 +1,18 @@
$NetBSD: distinfo,v 1.76 2011/08/05 13:12:18 ryoon Exp $
$NetBSD: distinfo,v 1.77 2011/08/05 18:06:14 adam Exp $
SHA1 (perl-5.12.2.tar.gz) = c157f214a93ce20fc06dc9d9c902c05ad1327cb1
RMD160 (perl-5.12.2.tar.gz) = b1fd7f05d96fa6a263d3622654af6b584c308ce4
Size (perl-5.12.2.tar.gz) = 15143778 bytes
SHA1 (perl-5.14.1.tar.gz) = bd24b7572330c4f87a47ea841f88deb925245a8b
RMD160 (perl-5.14.1.tar.gz) = a4b324dc280367d183987dfdc6e43518abb4b252
Size (perl-5.14.1.tar.gz) = 16321720 bytes
SHA1 (patch-aa) = 4c8197cdc0595a17ba377a28c7457f923c2d9bf9
SHA1 (patch-ab) = e3aa6bf9695addb9b754297120caf8683a625d1a
SHA1 (patch-ab) = b6104a02aa6fbeda2340042a93c2382d1a1965bb
SHA1 (patch-ac) = c1893ea4cf4b89b03b3acc5dec9b5828d50c5dad
SHA1 (patch-ad) = 6018c045b0bce177eab86b16746e189cddbf140f
SHA1 (patch-ah) = aca6b4bf08809789058f3ec259c6df86df2aaf83
SHA1 (patch-ai) = 5abdbbddcba79088996056ab88a34db5fcd16b01
SHA1 (patch-aq) = 3ece22678e3e6dcd3cf641e6389ff203cbe351b9
SHA1 (patch-ca) = e8340df59362d1d388a8b6ea36fc85d4b230a67f
SHA1 (patch-ah) = 6fe177646f0fc40f11f4b2b4f504ca45ddff1941
SHA1 (patch-aq) = 0afdf2d8a262ea09e2df6efae705e7227dc9f06f
SHA1 (patch-ca) = 112a98b85e8e276d8a211b440596ceba4f3302db
SHA1 (patch-ch) = 5b6a89c82e158bab0a5f06add48c28e600678099
SHA1 (patch-ck) = 28207b8186c9ad194a1edc696159915bc16d1097
SHA1 (patch-cn) = 7ca2b1ff19f8371637a34ec26779b37d74c74cca
SHA1 (patch-ck) = 5c381db130cdf4c315678e2d65380eaaa3065fee
SHA1 (patch-cn) = a88fcb04b32c6e446d77b62cb6883a04f04e2e75
SHA1 (patch-cp) = 0b22d334df24d128142855464bf6dd61d4d82975
SHA1 (patch-dm) = 8e8a0ede0f371ef0ad3a0433912967f3b8f3dd43
SHA1 (patch-ds) = e14502548e2b9579b9ac654bbc83d78cd249e8ab
SHA1 (patch-dt) = 4d15e650b3aa9a1c8e50e5f9db91d82db3b68b8f
SHA1 (patch-hints_darwin.sh) = 40e545a13938c96eab61cbf9d04050574a36a27b
SHA1 (patch-pp.c) = fc8eaa16bfb214d4c346827fbffa7cd345f46c4b
SHA1 (patch-ta) = 69f0d2df022eb8ff0dbcc77bde638cdc9c6391b1
SHA1 (patch-zc) = c2a4c65a849f221294eaa61b52cd1fcb196e675b
SHA1 (patch-ta) = 51a3e02148e78eaab882125f859e59add39a4fbe
SHA1 (patch-zd) = 15532739b4a582da322d3e51fc364905bacbcd7e
SHA1 (patch-ze) = 73ad81c7f4265837f5d0efca3f2432e7dde265a0
SHA1 (patch-ze) = 82f03439ab59aac4adfcb895ca22a0bbaaa0a6d1

View file

@ -1,4 +1,4 @@
# $NetBSD: module.mk,v 1.63 2010/08/27 05:27:37 sno Exp $
# $NetBSD: module.mk,v 1.64 2011/08/05 18:06:14 adam Exp $
#
# This Makefile fragment is intended to be included by packages that build
# and install perl5 modules.
@ -214,7 +214,7 @@ PERL5_MAKE_FLAGS.makemaker+= ${_var_}=${PERL5_${_var_}:Q}
# so override its value to the module's ${PREFIX}.
# Also, set VENDORARCHEXP, so existing .packlist won't be read.
#
PERL5_MAKE_FLAGS.makemaker+= PREFIX=${PREFIX:Q} VENDORARCHEXP=${DESTDIR}${PERL5_INSTALLVENDORARCH}
PERL5_MAKE_FLAGS.makemaker+= PREFIX=${PREFIX:Q} VENDORARCHEXP=${DESTDIR}${PERL5_INSTALLVENDORARCH}
PERL5_MAKE_FLAGS+= ${PERL5_MAKE_FLAGS.${PERL5_MODTYPE}}
MAKE_FLAGS+= ${PERL5_MAKE_FLAGS}

View file

@ -1,8 +1,8 @@
$NetBSD: patch-ab,v 1.15 2009/12/14 06:36:57 seb Exp $
$NetBSD: patch-ab,v 1.16 2011/08/05 18:06:14 adam Exp $
--- installperl.orig 2009-12-06 17:14:00.000000000 +0000
+++ installperl 2009-12-06 17:14:13.000000000 +0000
@@ -355,7 +355,6 @@
@@ -348,7 +348,6 @@
mkpath($installprivlib, $opts{verbose}, 0777);
mkpath($installarchlib, $opts{verbose}, 0777);
mkpath($installsitelib, $opts{verbose}, 0777) if ($installsitelib);

View file

@ -1,13 +0,0 @@
$NetBSD: patch-ad,v 1.15 2011/07/19 13:58:53 joerg Exp $
--- hints/netbsd.sh.orig 2011-07-15 12:39:37.000000000 +0000
+++ hints/netbsd.sh
@@ -35,7 +35,7 @@ case "$osvers" in
d_dlopen=$define
d_dlerror=$define
cccdlflags="-DPIC -fPIC $cccdlflags"
- lddlflags="--whole-archive -shared $lddlflags"
+ lddlflags="-shared $lddlflags"
rpathflag="-Wl,-rpath,"
case "$osvers" in
1.[0-5]*)

View file

@ -1,10 +1,10 @@
$NetBSD: patch-ah,v 1.12 2010/08/27 05:27:37 sno Exp $
$NetBSD: patch-ah,v 1.13 2011/08/05 18:06:14 adam Exp $
NetBSD's implementation sometimes returns "/"; reject that too.
--- perl.c.orig 2010-05-21 14:41:18.000000000 +0000
+++ perl.c 2010-05-21 14:44:01.000000000 +0000
@@ -1414,8 +1414,10 @@
@@ -1422,8 +1422,10 @@
to the executable (or returning an error from the readlink). Any valid
path has a '/' in it somewhere, so use that to validate the result.
See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703

View file

@ -1,17 +0,0 @@
$NetBSD: patch-ai,v 1.7 2009/05/02 18:42:32 sno Exp $
--- hints/solaris_2.sh.orig 2007-12-18 11:47:07.000000000 +0100
+++ hints/solaris_2.sh 2009-05-02 10:14:48.292729716 +0200
@@ -571,9 +571,9 @@
lddlflags="$lddlflags -G -m64"
;;
*)
- ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
- ldflags="$ldflags `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
- lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
+ ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null|sed 's/-xarch=generic64/-m64/g'`"
+ ldflags="$ldflags `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null|sed 's/-xarch=generic64/-m64/g'`"
+ lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null|sed 's/-xarch=generic64/-m64/g'`"
echo "int main() { return(0); } " > try.c
tryworkshopcc="${cc:-cc} try.c -o try $ccflags"
if test "$processor" = sparc; then

View file

@ -1,8 +1,8 @@
$NetBSD: patch-aq,v 1.2 2008/10/10 21:58:43 he Exp $
$NetBSD: patch-aq,v 1.3 2011/08/05 18:06:14 adam Exp $
--- XSUB.h.orig 2007-12-18 11:47:07.000000000 +0100
+++ XSUB.h
@@ -93,6 +93,9 @@ is a lexical $_ in scope.
@@ -94,6 +94,9 @@ is a lexical $_ in scope.
#ifndef PERL_UNUSED_VAR
# define PERL_UNUSED_VAR(x) ((void)x)
#endif
@ -12,7 +12,7 @@ $NetBSD: patch-aq,v 1.2 2008/10/10 21:58:43 he Exp $
#define ST(off) PL_stack_base[ax + (off)]
@@ -116,15 +119,7 @@ is a lexical $_ in scope.
@@ -117,15 +120,7 @@ is a lexical $_ in scope.
# define XS(name) EXPORT_C XSPROTO(name)
#endif
#ifndef XS

View file

@ -1,11 +1,8 @@
$NetBSD: patch-ca,v 1.9 2011/01/30 21:31:43 wiz Exp $
$NetBSD: patch-ca,v 1.10 2011/08/05 18:06:14 adam Exp $
Hunk 7 (MirBSD) was submitted and accepted upstream, see
http://rt.perl.org/rt3/Ticket/Display.html?id=82532
--- Configure.orig 2010-09-06 23:30:32.000000000 +0000
+++ Configure
@@ -3251,13 +3251,14 @@ EOM
--- Configure.orig 2011-06-09 22:04:29.000000000 +0200
+++ Configure 2011-07-31 12:24:09.000000000 +0200
@@ -3256,13 +3256,14 @@ EOM
osvers="$3"
;;
dragonfly) osname=dragonfly
@ -22,7 +19,7 @@ http://rt.perl.org/rt3/Ticket/Display.html?id=82532
genix) osname=genix ;;
gnu) osname=gnu
osvers="$3" ;;
@@ -3279,7 +3280,7 @@ EOM
@@ -3284,7 +3285,7 @@ EOM
MiNT) osname=mint
;;
netbsd*) osname=netbsd
@ -31,7 +28,7 @@ http://rt.perl.org/rt3/Ticket/Display.html?id=82532
;;
news-os) osvers="$3"
case "$3" in
@@ -3290,7 +3291,7 @@ EOM
@@ -3295,7 +3296,7 @@ EOM
next*) osname=next ;;
nonstop-ux) osname=nonstopux ;;
openbsd) osname=openbsd
@ -71,16 +68,23 @@ http://rt.perl.org/rt3/Ticket/Display.html?id=82532
prefixvar=vendorlib
. ./installprefix
@@ -8326,7 +8331,7 @@ if "$useshrplib"; then
solaris)
xxx="-R $shrpdir"
;;
- freebsd|netbsd|openbsd|interix|dragonfly)
+ freebsd|mirbsd|netbsd|openbsd|interix|dragonfly)
xxx="-Wl,-R$shrpdir"
;;
bsdos|linux|irix*|dec_osf|gnu*)
@@ -8339,7 +8344,7 @@ if "$useshrplib"; then
@@ -7510,6 +7515,15 @@ case "$nm_so_opt" in
;;
esac
+: Mac OS X 10.7 is different
+case "$osname" in
+ darwin)
+ case "$osvers" in
+ 11.*)
+ libnames="$libnames /usr/lib/system/libsystem_*.dylib"
+ esac
+esac
+
: Figure out where the libc is located
case "$runnm" in
true)
@@ -8339,7 +8353,7 @@ if "$useshrplib"; then
# beos doesn't like the default, either.
;;
haiku)
@ -89,7 +93,7 @@ http://rt.perl.org/rt3/Ticket/Display.html?id=82532
;;
hpux*)
# hpux doesn't like the default, either.
@@ -9410,6 +9415,13 @@ EOCP
@@ -9410,6 +9424,13 @@ EOCP
;;
esac
@ -103,7 +107,7 @@ http://rt.perl.org/rt3/Ticket/Display.html?id=82532
: Set the vendorbin variables
case "$vendorprefix" in
'') d_vendorbin="$undef"
@@ -18925,7 +18937,15 @@ RCAT(Rei,ser)
@@ -19061,7 +19082,15 @@ RCAT(Rei,ser)
ACAT(Cir,cus)
EOCP
$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1

View file

@ -1,4 +1,4 @@
$NetBSD: patch-ck,v 1.1 2005/06/24 06:43:47 jlam Exp $
$NetBSD: patch-ck,v 1.2 2011/08/05 18:06:14 adam Exp $
--- hints/aix_4.sh.orig 2004-09-09 23:29:04.000000000 -0700
+++ hints/aix_4.sh 2005-03-08 18:42:35.000000000 -0700
@@ -103,9 +103,10 @@
@ -15,7 +15,7 @@ $NetBSD: patch-ck,v 1.1 2005/06/24 06:43:47 jlam Exp $
cc=${cc:-cc}
ccflags="$ccflags -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE"
@@ -297,6 +298,7 @@
@@ -310,6 +311,7 @@
d_getgrent_r='undef'
d_getpwent_r='undef'
d_random_r='undef'

View file

@ -1,8 +1,8 @@
$NetBSD: patch-cn,v 1.2 2008/10/10 21:58:43 he Exp $
$NetBSD: patch-cn,v 1.3 2011/08/05 18:06:14 adam Exp $
--- hints/hpux.sh.orig 2007-12-18 11:47:07.000000000 +0100
+++ hints/hpux.sh
@@ -376,7 +376,7 @@ case "$ccisgcc" in
@@ -377,7 +377,7 @@ case "$ccisgcc" in
*O[3456789]*) optimize=`echo "$optimize" | sed -e 's/O[3-9]/O2/'` ;;
esac
#ld="$cc"
@ -11,7 +11,7 @@ $NetBSD: patch-cn,v 1.2 2008/10/10 21:58:43 he Exp $
cccdlflags='-fPIC'
#lddlflags='-shared'
lddlflags='-b'
@@ -434,7 +434,7 @@ case "$ccisgcc" in
@@ -435,7 +435,7 @@ case "$ccisgcc" in
toke_cflags="$toke_cflags;optimize=\"$opt\""
regexec_cflags="optimize=\"$opt\""
fi

View file

@ -1,280 +0,0 @@
$NetBSD: patch-dm,v 1.1 2010/09/23 21:47:48 sno Exp $
Update Math::BigInt to 1.95
--- cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm.orig 2010-09-05 15:14:32.000000000 +0000
+++ cpan/Math-BigInt/lib/Math/BigInt/CalcEmu.pm
@@ -5,7 +5,7 @@ use strict;
# use warnings; # dont use warnings for older Perls
use vars qw/$VERSION/;
-$VERSION = '0.05';
+$VERSION = '0.06';
package Math::BigInt;
--- cpan/Math-BigInt/lib/Math/BigInt/Calc.pm.orig 2010-09-05 15:14:32.000000000 +0000
+++ cpan/Math-BigInt/lib/Math/BigInt/Calc.pm
@@ -1,10 +1,10 @@
package Math::BigInt::Calc;
-use 5.006;
+use 5.006002;
use strict;
# use warnings; # dont use warnings for older Perls
-our $VERSION = '0.52';
+our $VERSION = '0.54';
# Package to store unsigned big integers in decimal and do math with them
@@ -1264,7 +1264,7 @@ sub _is_even
sub _is_odd
{
- # return true if arg is even
+ # return true if arg is odd
(($_[1]->[0] & 1)) <=> 0;
}
@@ -1536,22 +1536,20 @@ sub _nok
# ref to array, return ref to array
my ($c,$n,$k) = @_;
- # ( 7 ) 7! 7*6*5 * 4*3*2*1 7 * 6 * 5
- # ( - ) = --------- = --------------- = ---------
- # ( 3 ) 3! (7-3)! 3*2*1 * 4*3*2*1 3 * 2 * 1
+ # ( 7 ) 7! 1*2*3*4 * 5*6*7 5 * 6 * 7 6 7
+ # ( - ) = --------- = --------------- = --------- = 5 * - * -
+ # ( 3 ) (7-3)! 3! 1*2*3*4 * 1*2*3 1 * 2 * 3 2 3
- # compute n - k + 2 (so we start with 5 in the example above)
+ if (!_is_zero($c,$k))
+ {
my $x = _copy($c,$n);
-
_sub($c,$n,$k);
- if (!_is_one($c,$n))
- {
_inc($c,$n);
my $f = _copy($c,$n); _inc($c,$f); # n = 5, f = 6, d = 2
my $d = _two($c);
- while (_acmp($c,$f,$x) <= 0) # f < n ?
+ while (_acmp($c,$f,$x) <= 0) # f <= n ?
{
- # n = (n * f / d) == 5 * 6 / 2 => n == 3
+ # n = (n * f / d) == 5 * 6 / 2
$n = _mul($c,$n,$f); $n = _div($c,$n,$d);
# f = 7, d = 3
_inc($c,$f); _inc($c,$d);
--- cpan/Math-BigInt/lib/Math/BigInt.pm.orig 2010-09-05 15:14:32.000000000 +0000
+++ cpan/Math-BigInt/lib/Math/BigInt.pm
@@ -16,9 +16,9 @@ package Math::BigInt;
# underlying lib might change the reference!
my $class = "Math::BigInt";
-use 5.006;
+use 5.006002;
-$VERSION = '1.89_01';
+$VERSION = '1.95';
@ISA = qw(Exporter);
@EXPORT_OK = qw(objectify bgcd blcm);
@@ -1260,7 +1260,7 @@ sub blog
# objectify is costly, so avoid it
if ((!ref($_[0])) || (ref($_[0]) ne ref($_[1])))
{
- ($self,$x,$base,@r) = objectify(1,ref($x),@_);
+ ($self,$x,$base,@r) = objectify(2,@_);
}
return $x if $x->modify('blog');
@@ -1320,18 +1320,17 @@ sub bnok
}
else
{
- # ( 7 ) 7! 7*6*5 * 4*3*2*1 7 * 6 * 5
- # ( - ) = --------- = --------------- = ---------
- # ( 3 ) 3! (7-3)! 3*2*1 * 4*3*2*1 3 * 2 * 1
-
- # compute n - k + 2 (so we start with 5 in the example above)
- my $z = $x - $y;
- if (!$z->is_one())
+ # ( 7 ) 7! 1*2*3*4 * 5*6*7 5 * 6 * 7 6 7
+ # ( - ) = --------- = --------------- = --------- = 5 * - * -
+ # ( 3 ) (7-3)! 3! 1*2*3*4 * 1*2*3 1 * 2 * 3 2 3
+
+ if (!$y->is_zero())
{
+ my $z = $x - $y;
$z->binc();
my $r = $z->copy(); $z->binc();
my $d = $self->new(2);
- while ($z->bacmp($x) <= 0) # f < x ?
+ while ($z->bacmp($x) <= 0) # f <= x ?
{
$r->bmul($z); $r->bdiv($d);
$z->binc(); $d->binc();
@@ -1375,11 +1374,11 @@ sub bexp
else { $x = $u; }
}
-sub blcm
- {
+sub blcm
+ {
# (BINT or num_str, BINT or num_str) return BINT
# does not modify arguments, but returns new object
- # Lowest Common Multiplicator
+ # Lowest Common Multiple
my $y = shift; my ($x);
if (ref($y))
@@ -1498,13 +1497,13 @@ sub is_even
sub is_positive
{
- # return true when arg (BINT or num_str) is positive (>= 0)
+ # return true when arg (BINT or num_str) is positive (> 0)
my ($self,$x) = ref($_[0]) ? (undef,$_[0]) : objectify(1,@_);
return 1 if $x->{sign} eq '+inf'; # +inf is positive
-
+
# 0+ is neither positive nor negative
- ($x->{sign} eq '+' && !$x->is_zero()) ? 1 : 0;
+ ($x->{sign} eq '+' && !$x->is_zero()) ? 1 : 0;
}
sub is_negative
@@ -3136,8 +3135,8 @@ Math::BigInt - Arbitrary size integer/fl
$x->is_one('-'); # if $x is -1
$x->is_odd(); # if $x is odd
$x->is_even(); # if $x is even
- $x->is_pos(); # if $x >= 0
- $x->is_neg(); # if $x < 0
+ $x->is_pos(); # if $x > 0
+ $x->is_neg(); # if $x < 0
$x->is_inf($sign); # if $x is +inf, or -inf (sign is default '+')
$x->is_int(); # if $x is an integer (not a float)
@@ -3212,14 +3211,14 @@ Math::BigInt - Arbitrary size integer/fl
$x->bfloor(); # return integer less or equal than $x
$x->bceil(); # return integer greater or equal than $x
-
+
# The following do not modify their arguments:
# greatest common divisor (no OO style)
my $gcd = Math::BigInt::bgcd(@values);
- # lowest common multiplicator (no OO style)
- my $lcm = Math::BigInt::blcm(@values);
-
+ # lowest common multiple (no OO style)
+ my $lcm = Math::BigInt::blcm(@values);
+
$x->length(); # return number of digits in number
($xl,$f) = $x->length(); # length of number and length of fraction part,
# latter is always 0 digits long for BigInts
@@ -3393,15 +3392,15 @@ to the math operation as additional para
print scalar $x->copy()->bdiv($y, 2); # print 4300
print scalar $x->copy()->bdiv($y)->bround(2); # print 4300
-Please see the section about L<ACCURACY AND PRECISION> for further details.
+Please see the section about L<ACCURACY and PRECISION> for further details.
Value must be greater than zero. Pass an undef value to disable it:
$x->accuracy(undef);
Math::BigInt->accuracy(undef);
-Returns the current accuracy. For C<$x->accuracy()> it will return either the
-local accuracy, or if not defined, the global. This means the return value
+Returns the current accuracy. For C<< $x->accuracy() >> it will return either
+the local accuracy, or if not defined, the global. This means the return value
represents the accuracy that will be in effect for $x:
$y = Math::BigInt->new(1234567); # unrounded
@@ -3443,15 +3442,15 @@ In Math::BigInt, passing a negative numb
numbers have digits after the dot. In L<Math::BigFloat>, it will round all
results to P digits after the dot.
-Please see the section about L<ACCURACY AND PRECISION> for further details.
+Please see the section about L<ACCURACY and PRECISION> for further details.
Pass an undef value to disable it:
$x->precision(undef);
Math::BigInt->precision(undef);
-Returns the current precision. For C<$x->precision()> it will return either the
-local precision of $x, or if not defined, the global. This means the return
+Returns the current precision. For C<< $x->precision() >> it will return either
+the local precision of $x, or if not defined, the global. This means the return
value represents the prevision that will be in effect for $x:
$y = Math::BigInt->new(1234567); # unrounded
@@ -3509,7 +3508,7 @@ See L<Input> for more info on accepted i
=head2 from_bin()
- $x = Math::BigInt->from_oct("0x10011"); # input is binary
+ $x = Math::BigInt->from_bin("0x10011"); # input is binary
=head2 bnan()
@@ -3605,7 +3604,7 @@ Returns -1, 0, 1 or undef.
$x->bacmp($y);
-Compares $x with $y while ignoring their. Returns -1, 0, 1 or undef.
+Compares $x with $y while ignoring their sign. Returns -1, 0, 1 or undef.
=head2 sign()
@@ -3912,8 +3911,8 @@ does change $x in BigFloat.
=head2 blcm()
- blcm(@values); # lowest common multiplicator (no OO style)
-
+ blcm(@values); # lowest common multiple (no OO style)
+
head2 length()
$x->length();
@@ -4654,8 +4653,8 @@ directly.
=item *
-The private object hash keys like C<$x->{sign}> may not be changed, but
-additional keys can be added, like C<$x->{_custom}>.
+The private object hash keys like C<< $x->{sign} >> may not be changed, but
+additional keys can be added, like C<< $x->{_custom} >>.
=item *
--- cpan/Math-BigInt/lib/Math/BigFloat.pm.orig 2010-09-05 15:14:32.000000000 +0000
+++ cpan/Math-BigInt/lib/Math/BigFloat.pm
@@ -12,8 +12,8 @@ package Math::BigFloat;
# _a : accuracy
# _p : precision
-$VERSION = '1.60';
-require 5.006;
+$VERSION = '1.62';
+require 5.006002;
require Exporter;
@ISA = qw/Math::BigInt/;
@@ -3905,7 +3905,7 @@ Some routines (C<is_odd()>, C<is_even()>
C<is_nan()>) return true or false, while others (C<bcmp()>, C<bacmp()>)
return either undef, <0, 0 or >0 and are suited for sort.
-Actual math is done by using the class defined with C<with => Class;> (which
+Actual math is done by using the class defined with C<< with => Class; >> (which
defaults to BigInts) to represent the mantissa and exponent.
The sign C</^[+-]$/> is stored separately. The string 'NaN' is used to

View file

@ -1,109 +0,0 @@
$NetBSD: patch-ds,v 1.1 2010/09/23 21:47:48 sno Exp $
Update of threads::shared to 1.33
--- dist/threads-shared/shared.pm.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads-shared/shared.pm
@@ -7,7 +7,7 @@ use warnings;
use Scalar::Util qw(reftype refaddr blessed);
-our $VERSION = '1.32';
+our $VERSION = '1.33';
my $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -187,7 +187,7 @@ threads::shared - Perl extension for sha
=head1 VERSION
-This document describes threads::shared version 1.32
+This document describes threads::shared version 1.33
=head1 SYNOPSIS
@@ -527,7 +527,8 @@ that the contents of hash-based objects
mentioned limitation. See F<examples/class.pl> (in the CPAN distribution of
this module) for how to create a class that supports object sharing.
-Does not support C<splice> on arrays!
+Does not support C<splice> on arrays. Does not support explicitly changing
+array lengths via $#array -- use C<push> and C<pop> instead.
Taking references to the elements of shared arrays and hashes does not
autovivify the elements, and neither does slicing a shared array/hash over
@@ -588,7 +589,7 @@ L<threads::shared> Discussion Forum on C
L<http://www.cpanforum.com/dist/threads-shared>
Annotated POD for L<threads::shared>:
-L<http://annocpan.org/~JDHEDDEN/threads-shared-1.32/shared.pm>
+L<http://annocpan.org/~JDHEDDEN/threads-shared-1.33/shared.pm>
Source repository:
L<http://code.google.com/p/threads-shared/>
--- dist/threads-shared/shared.xs.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads-shared/shared.xs
@@ -864,29 +864,32 @@ sharedsv_elem_mg_FETCH(pTHX_ SV *sv, MAG
{
dTHXc;
SV *saggregate = S_sharedsv_from_obj(aTHX_ mg->mg_obj);
- SV** svp;
+ SV** svp = NULL;
ENTER_LOCK;
- if (SvTYPE(saggregate) == SVt_PVAV) {
- assert ( mg->mg_ptr == 0 );
- SHARED_CONTEXT;
- svp = av_fetch((AV*) saggregate, mg->mg_len, 0);
- } else {
- char *key = mg->mg_ptr;
- I32 len = mg->mg_len;
- assert ( mg->mg_ptr != 0 );
- if (mg->mg_len == HEf_SVKEY) {
- STRLEN slen;
- key = SvPV((SV *)mg->mg_ptr, slen);
- len = slen;
- if (SvUTF8((SV *)mg->mg_ptr)) {
- len = -len;
+ if (saggregate) { /* During global destruction, underlying
+ aggregate may no longer exist */
+ if (SvTYPE(saggregate) == SVt_PVAV) {
+ assert ( mg->mg_ptr == 0 );
+ SHARED_CONTEXT;
+ svp = av_fetch((AV*) saggregate, mg->mg_len, 0);
+ } else {
+ char *key = mg->mg_ptr;
+ I32 len = mg->mg_len;
+ assert ( mg->mg_ptr != 0 );
+ if (mg->mg_len == HEf_SVKEY) {
+ STRLEN slen;
+ key = SvPV((SV *)mg->mg_ptr, slen);
+ len = slen;
+ if (SvUTF8((SV *)mg->mg_ptr)) {
+ len = -len;
+ }
}
+ SHARED_CONTEXT;
+ svp = hv_fetch((HV*) saggregate, key, len, 0);
}
- SHARED_CONTEXT;
- svp = hv_fetch((HV*) saggregate, key, len, 0);
+ CALLER_CONTEXT;
}
- CALLER_CONTEXT;
if (svp) {
/* Exists in the array */
if (SvROK(*svp)) {
@@ -957,6 +960,12 @@ sharedsv_elem_mg_DELETE(pTHX_ SV *sv, MA
dTHXc;
MAGIC *shmg;
SV *saggregate = S_sharedsv_from_obj(aTHX_ mg->mg_obj);
+
+ /* Object may not exist during global destruction */
+ if (! saggregate) {
+ return (0);
+ }
+
ENTER_LOCK;
sharedsv_elem_mg_FETCH(aTHX_ sv, mg);
if ((shmg = mg_find(sv, PERL_MAGIC_shared_scalar)))

View file

@ -1,606 +0,0 @@
$NetBSD: patch-dt,v 1.2 2011/01/30 21:35:12 wiz Exp $
update of threads to 1.78
--- dist/threads/t/thread.t.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads/t/thread.t
@@ -20,7 +20,7 @@ BEGIN {
}
$| = 1;
- print("1..34\n"); ### Number of tests that will be run ###
+ print("1..35\n"); ### Number of tests that will be run ###
};
print("ok 1 - Loaded\n");
@@ -161,7 +161,7 @@ package main;
# bugid #24165
-run_perl(prog => 'use threads 1.75;' .
+run_perl(prog => 'use threads 1.78;' .
'sub a{threads->create(shift)} $t = a sub{};' .
'$t->tid; $t->join; $t->tid',
nolib => ($ENV{PERL_CORE}) ? 0 : 1,
@@ -304,6 +304,26 @@ SKIP: {
"counts of calls to DESTROY");
}
+# Bug 73330 - Apply magic to arg to ->object()
+{
+ my @tids :shared;
+
+ my $thr = threads->create(sub {
+ lock(@tids);
+ push(@tids, threads->tid());
+ cond_signal(@tids);
+ });
+
+ {
+ lock(@tids);
+ cond_wait(@tids) while (! @tids);
+ }
+
+ ok(threads->object($_), 'Got threads object') foreach (@tids);
+
+ $thr->join();
+}
+
exit(0);
# EOF
--- dist/threads/t/exit.t.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads/t/exit.t
@@ -48,7 +48,7 @@ my $rc = $thr->join();
ok(! defined($rc), 'Exited: threads->exit()');
-run_perl(prog => 'use threads 1.75;' .
+run_perl(prog => 'use threads 1.78;' .
'threads->exit(86);' .
'exit(99);',
nolib => ($ENV{PERL_CORE}) ? 0 : 1,
@@ -98,7 +98,7 @@ $rc = $thr->join();
ok(! defined($rc), 'Exited: $thr->set_thread_exit_only');
-run_perl(prog => 'use threads 1.75 qw(exit thread_only);' .
+run_perl(prog => 'use threads 1.78 qw(exit thread_only);' .
'threads->create(sub { exit(99); })->join();' .
'exit(86);',
nolib => ($ENV{PERL_CORE}) ? 0 : 1,
@@ -108,7 +108,7 @@ run_perl(prog => 'use threads 1.75 qw(ex
is($?>>8, 86, "'use threads 'exit' => 'thread_only'");
}
-my $out = run_perl(prog => 'use threads 1.75;' .
+my $out = run_perl(prog => 'use threads 1.78;' .
'threads->create(sub {' .
' exit(99);' .
'});' .
@@ -124,7 +124,7 @@ my $out = run_perl(prog => 'use threads
like($out, '1 finished and unjoined', "exit(status) in thread");
-$out = run_perl(prog => 'use threads 1.75 qw(exit thread_only);' .
+$out = run_perl(prog => 'use threads 1.78 qw(exit thread_only);' .
'threads->create(sub {' .
' threads->set_thread_exit_only(0);' .
' exit(99);' .
@@ -141,7 +141,7 @@ $out = run_perl(prog => 'use threads 1.7
like($out, '1 finished and unjoined', "set_thread_exit_only(0)");
-run_perl(prog => 'use threads 1.75;' .
+run_perl(prog => 'use threads 1.78;' .
'threads->create(sub {' .
' $SIG{__WARN__} = sub { exit(99); };' .
' die();' .
--- dist/threads/t/basic.t.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads/t/basic.t
@@ -27,7 +27,7 @@ sub ok {
BEGIN {
$| = 1;
- print("1..33\n"); ### Number of tests that will be run ###
+ print("1..34\n"); ### Number of tests that will be run ###
};
use threads;
@@ -153,14 +153,17 @@ $thrx = threads->object();
ok(30, ! defined($thrx), 'No object');
$thrx = threads->object(undef);
ok(31, ! defined($thrx), 'No object');
-$thrx = threads->object(0);
-ok(32, ! defined($thrx), 'No object');
threads->import('stringify');
$thr1 = threads->create(sub {});
-ok(33, "$thr1" eq $thr1->tid(), 'Stringify');
+ok(32, "$thr1" eq $thr1->tid(), 'Stringify');
$thr1->join();
+# ->object($tid) works like ->self() when $tid is thread's TID
+$thrx = threads->object(threads->tid());
+ok(33, defined($thrx), 'Main thread object');
+ok(34, 0 == $thrx->tid(), "Check so that tid for threads work for main thread");
+
exit(0);
# EOF
--- dist/threads/threads.xs.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads/threads.xs
@@ -52,7 +52,7 @@ typedef perl_os_thread pthread_t;
/* Values for 'state' member */
#define PERL_ITHR_DETACHED 1 /* Thread has been detached */
-#define PERL_ITHR_JOINED 2 /* Thread has been joined */
+#define PERL_ITHR_JOINED 2 /* Thread is being / has been joined */
#define PERL_ITHR_FINISHED 4 /* Thread has finished execution */
#define PERL_ITHR_THREAD_EXIT_ONLY 8 /* exit() only exits current thread */
#define PERL_ITHR_NONVIABLE 16 /* Thread creation failed */
@@ -71,7 +71,7 @@ typedef struct _ithread {
int state; /* Detached, joined, finished, etc. */
int gimme; /* Context of create */
SV *init_function; /* Code to run */
- SV *params; /* Args to pass function */
+ AV *params; /* Args to pass function */
#ifdef WIN32
DWORD thr; /* OS's idea if thread id */
HANDLE handle; /* OS's waitable handle */
@@ -215,7 +215,7 @@ S_ithread_clear(pTHX_ ithread *thread)
S_ithread_set(aTHX_ thread);
SvREFCNT_dec(thread->params);
- thread->params = Nullsv;
+ thread->params = NULL;
if (thread->err) {
SvREFCNT_dec(thread->err);
@@ -487,7 +487,7 @@ S_ithread_run(void * arg)
PL_perl_destruct_level = 2;
{
- AV *params = (AV *)SvRV(thread->params);
+ AV *params = thread->params;
int len = (int)av_len(params)+1;
int ii;
@@ -675,10 +675,13 @@ S_ithread_create(
IV stack_size,
int gimme,
int exit_opt,
- SV *params)
+ SV **params_start,
+ SV **params_end)
{
ithread *thread;
ithread *current_thread = S_ithread_get(aTHX);
+ AV *params;
+ SV **array;
#if PERL_VERSION <= 8 && PERL_SUBVERSION <= 7
SV **tmps_tmp = PL_tmps_stack;
@@ -781,7 +784,7 @@ S_ithread_create(
* they are created
*/
SvREFCNT_dec(PL_endav);
- PL_endav = newAV();
+ PL_endav = NULL;
clone_param.flags = 0;
if (SvPOK(init_function)) {
@@ -792,8 +795,13 @@ S_ithread_create(
SvREFCNT_inc(sv_dup(init_function, &clone_param));
}
- thread->params = sv_dup(params, &clone_param);
- SvREFCNT_inc_void(thread->params);
+ thread->params = params = newAV();
+ av_extend(params, params_end - params_start - 1);
+ AvFILLp(params) = params_end - params_start - 1;
+ array = AvARRAY(params);
+ while (params_start < params_end) {
+ *array++ = SvREFCNT_inc(sv_dup(*params_start++, &clone_param));
+ }
#if PERL_VERSION <= 8 && PERL_SUBVERSION <= 7
/* The code below checks that anything living on the tmps stack and
@@ -908,7 +916,6 @@ S_ithread_create(
#endif
/* Must unlock mutex for destruct call */
MUTEX_UNLOCK(&MY_POOL.create_destruct_mutex);
- sv_2mortal(params);
thread->state |= PERL_ITHR_NONVIABLE;
S_ithread_free(aTHX_ thread); /* Releases MUTEX */
#ifndef WIN32
@@ -924,7 +931,6 @@ S_ithread_create(
}
MY_POOL.running_threads++;
- sv_2mortal(params);
return (thread);
}
@@ -942,7 +948,6 @@ ithread_create(...)
char *classname;
ithread *thread;
SV *function_to_call;
- AV *params;
HV *specs;
IV stack_size;
int context;
@@ -950,7 +955,8 @@ ithread_create(...)
SV *thread_exit_only;
char *str;
int idx;
- int ii;
+ SV **args_start;
+ SV **args_end;
dMY_POOL;
CODE:
if ((items >= 2) && SvROK(ST(1)) && SvTYPE(SvRV(ST(1)))==SVt_PVHV) {
@@ -988,18 +994,19 @@ ithread_create(...)
context = -1;
if (specs) {
+ SV **svp;
/* stack_size */
- if (hv_exists(specs, "stack", 5)) {
- stack_size = SvIV(*hv_fetch(specs, "stack", 5, 0));
- } else if (hv_exists(specs, "stacksize", 9)) {
- stack_size = SvIV(*hv_fetch(specs, "stacksize", 9, 0));
- } else if (hv_exists(specs, "stack_size", 10)) {
- stack_size = SvIV(*hv_fetch(specs, "stack_size", 10, 0));
+ if ((svp = hv_fetch(specs, "stack", 5, 0))) {
+ stack_size = SvIV(*svp);
+ } else if ((svp = hv_fetch(specs, "stacksize", 9, 0))) {
+ stack_size = SvIV(*svp);
+ } else if ((svp = hv_fetch(specs, "stack_size", 10, 0))) {
+ stack_size = SvIV(*svp);
}
/* context */
- if (hv_exists(specs, "context", 7)) {
- str = (char *)SvPV_nolen(*hv_fetch(specs, "context", 7, 0));
+ if ((svp = hv_fetch(specs, "context", 7, 0))) {
+ str = (char *)SvPV_nolen(*svp);
switch (*str) {
case 'a':
case 'A':
@@ -1018,27 +1025,27 @@ ithread_create(...)
default:
Perl_croak(aTHX_ "Invalid context: %s", str);
}
- } else if (hv_exists(specs, "array", 5)) {
- if (SvTRUE(*hv_fetch(specs, "array", 5, 0))) {
+ } else if ((svp = hv_fetch(specs, "array", 5, 0))) {
+ if (SvTRUE(*svp)) {
context = G_ARRAY;
}
- } else if (hv_exists(specs, "list", 4)) {
- if (SvTRUE(*hv_fetch(specs, "list", 4, 0))) {
+ } else if ((svp = hv_fetch(specs, "list", 4, 0))) {
+ if (SvTRUE(*svp)) {
context = G_ARRAY;
}
- } else if (hv_exists(specs, "scalar", 6)) {
- if (SvTRUE(*hv_fetch(specs, "scalar", 6, 0))) {
+ } else if ((svp = hv_fetch(specs, "scalar", 6, 0))) {
+ if (SvTRUE(*svp)) {
context = G_SCALAR;
}
- } else if (hv_exists(specs, "void", 4)) {
- if (SvTRUE(*hv_fetch(specs, "void", 4, 0))) {
+ } else if ((svp = hv_fetch(specs, "void", 4, 0))) {
+ if (SvTRUE(*svp)) {
context = G_VOID;
}
}
/* exit => thread_only */
- if (hv_exists(specs, "exit", 4)) {
- str = (char *)SvPV_nolen(*hv_fetch(specs, "exit", 4, 0));
+ if ((svp = hv_fetch(specs, "exit", 4, 0))) {
+ str = (char *)SvPV_nolen(*svp);
exit_opt = (*str == 't' || *str == 'T')
? PERL_ITHR_THREAD_EXIT_ONLY : 0;
}
@@ -1050,11 +1057,11 @@ ithread_create(...)
}
/* Function args */
- params = newAV();
+ args_start = &ST(idx + 2);
if (items > 2) {
- for (ii=2; ii < items ; ii++) {
- av_push(params, SvREFCNT_inc(ST(idx+ii)));
- }
+ args_end = &ST(idx + items);
+ } else {
+ args_end = args_start;
}
/* Create thread */
@@ -1063,7 +1070,8 @@ ithread_create(...)
stack_size,
context,
exit_opt,
- newRV_noinc((SV*)params));
+ args_start,
+ args_end);
if (! thread) {
XSRETURN_UNDEF; /* Mutex already unlocked */
}
@@ -1236,7 +1244,7 @@ ithread_join(...)
PerlInterpreter *other_perl;
CLONE_PARAMS clone_params;
- params_copy = (AV *)SvRV(thread->params);
+ params_copy = thread->params;
other_perl = thread->interp;
clone_params.stashes = newAV();
clone_params.flags = CLONEf_JOIN_IN;
@@ -1337,6 +1345,7 @@ ithread_kill(...)
ithread *thread;
char *sig_name;
IV signal;
+ int no_handler = 1;
CODE:
/* Must have safe signals */
if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
@@ -1366,11 +1375,21 @@ ithread_kill(...)
MUTEX_LOCK(&thread->mutex);
if (thread->interp) {
dTHXa(thread->interp);
- PL_psig_pend[signal]++;
- PL_sig_pending = 1;
+ if (PL_psig_pend && PL_psig_ptr[signal]) {
+ PL_psig_pend[signal]++;
+ PL_sig_pending = 1;
+ no_handler = 0;
+ }
+ } else {
+ /* Ignore signal to terminated thread */
+ no_handler = 0;
}
MUTEX_UNLOCK(&thread->mutex);
+ if (no_handler) {
+ Perl_croak(aTHX_ "Signal %s received in thread %"UVuf", but no signal handler set.", sig_name, thread->tid);
+ }
+
/* Return the thread to allow for method chaining */
ST(0) = ST(0);
/* XSRETURN(1); - implied */
@@ -1409,6 +1428,7 @@ void
ithread_object(...)
PREINIT:
char *classname;
+ SV *arg;
UV tid;
ithread *thread;
int state;
@@ -1421,34 +1441,47 @@ ithread_object(...)
}
classname = (char *)SvPV_nolen(ST(0));
- if ((items < 2) || ! SvOK(ST(1))) {
+ /* Turn $tid from PVLV to SV if needed (bug #73330) */
+ arg = ST(1);
+ SvGETMAGIC(arg);
+
+ if ((items < 2) || ! SvOK(arg)) {
XSRETURN_UNDEF;
}
/* threads->object($tid) */
- tid = SvUV(ST(1));
+ tid = SvUV(arg);
- /* Walk through threads list */
- MUTEX_LOCK(&MY_POOL.create_destruct_mutex);
- for (thread = MY_POOL.main_thread.next;
- thread != &MY_POOL.main_thread;
- thread = thread->next)
- {
- /* Look for TID */
- if (thread->tid == tid) {
- /* Ignore if detached or joined */
- MUTEX_LOCK(&thread->mutex);
- state = thread->state;
- MUTEX_UNLOCK(&thread->mutex);
- if (! (state & PERL_ITHR_UNCALLABLE)) {
- /* Put object on stack */
- ST(0) = sv_2mortal(S_ithread_to_SV(aTHX_ Nullsv, thread, classname, TRUE));
- have_obj = 1;
+ /* If current thread wants its own object, then behave the same as
+ ->self() */
+ thread = S_ithread_get(aTHX);
+ if (thread->tid == tid) {
+ ST(0) = sv_2mortal(S_ithread_to_SV(aTHX_ Nullsv, thread, classname, TRUE));
+ have_obj = 1;
+
+ } else {
+ /* Walk through threads list */
+ MUTEX_LOCK(&MY_POOL.create_destruct_mutex);
+ for (thread = MY_POOL.main_thread.next;
+ thread != &MY_POOL.main_thread;
+ thread = thread->next)
+ {
+ /* Look for TID */
+ if (thread->tid == tid) {
+ /* Ignore if detached or joined */
+ MUTEX_LOCK(&thread->mutex);
+ state = thread->state;
+ MUTEX_UNLOCK(&thread->mutex);
+ if (! (state & PERL_ITHR_UNCALLABLE)) {
+ /* Put object on stack */
+ ST(0) = sv_2mortal(S_ithread_to_SV(aTHX_ Nullsv, thread, classname, TRUE));
+ have_obj = 1;
+ }
+ break;
}
- break;
}
+ MUTEX_UNLOCK(&MY_POOL.create_destruct_mutex);
}
- MUTEX_UNLOCK(&MY_POOL.create_destruct_mutex);
if (! have_obj) {
XSRETURN_UNDEF;
--- dist/threads/threads.pm.orig 2010-09-06 23:30:32.000000000 +0000
+++ dist/threads/threads.pm
@@ -5,7 +5,7 @@ use 5.008;
use strict;
use warnings;
-our $VERSION = '1.75';
+our $VERSION = '1.78';
my $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -134,7 +134,7 @@ threads - Perl interpreter-based threads
=head1 VERSION
-This document describes threads version 1.75
+This document describes threads version 1.78
=head1 SYNOPSIS
@@ -361,9 +361,10 @@ key) will cause its ID to be used as the
=item threads->object($tid)
This will return the I<threads> object for the I<active> thread associated
-with the specified thread ID. Returns C<undef> if there is no thread
-associated with the TID, if the thread is joined or detached, if no TID is
-specified or if the specified TID is undef.
+with the specified thread ID. If C<$tid> is the value for the current thread,
+then this call works the same as C<-E<gt>self()>. Otherwise, returns C<undef>
+if there is no thread associated with the TID, if the thread is joined or
+detached, if no TID is specified or if the specified TID is undef.
=item threads->yield()
@@ -902,6 +903,18 @@ other threads are started afterwards.
If the above does not work, or is not adequate for your application, then file
a bug report on L<http://rt.cpan.org/Public/> against the problematic module.
+=item Memory consumption
+
+On most systems, frequent and continual creation and destruction of threads
+can lead to ever-increasing growth in the memory footprint of the Perl
+interpreter. While it is simple to just launch threads and then
+C<-E<gt>join()> or C<-E<gt>detach()> them, for long-lived applications, it is
+better to maintain a pool of threads, and to reuse them for the work needed,
+using L<queues|Thread::Queue> to notify threads of pending work. The CPAN
+distribution of this module contains a simple example
+(F<examples/pool_reuse.pl>) illustrating the creation, use and monitoring of a
+pool of I<reusable> threads.
+
=item Current working directory
On all platforms except MSWin32, the setting for the current working directory
@@ -975,7 +988,7 @@ involved, you may be able to work around
version of the object (e.g., using L<Data::Dumper> or L<Storable>), and then
reconstituting it in the joining thread. If you're using Perl 5.10.0 or
later, and if the class supports L<shared objects|threads::shared/"OBJECTS">,
-you can pass them via L<shared queues| Thread::Queue>.
+you can pass them via L<shared queues|Thread::Queue>.
=item END blocks in threads
@@ -992,6 +1005,12 @@ mutexes that are needed to control funct
For this reason, the use of C<END> blocks in threads is B<strongly>
discouraged.
+=item Open directory handles
+
+Spawning threads with open directory handles (see
+L<opendir|perlfunc/"opendir DIRHANDLE,EXPR">) will crash the interpreter.
+L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>
+
=item Perl Bugs and the CPAN Version of L<threads>
Support for threads extends beyond the code in this module (i.e.,
@@ -1021,7 +1040,7 @@ L<threads> Discussion Forum on CPAN:
L<http://www.cpanforum.com/dist/threads>
Annotated POD for L<threads>:
-L<http://annocpan.org/~JDHEDDEN/threads-1.75/threads.pm>
+L<http://annocpan.org/~JDHEDDEN/threads-1.78/threads.pm>
Source repository:
L<http://code.google.com/p/threads-shared/>
--- /dev/null 2010-09-23 21:51:28.000000000 +0200
+++ dist/threads/t/kill2.t 2010-09-23 21:47:56.000000000 +0200
@@ -0,0 +1,68 @@
+use strict;
+use warnings;
+
+BEGIN {
+ require($ENV{PERL_CORE} ? '../../t/test.pl' : './t/test.pl');
+
+ use Config;
+ if (! $Config{'useithreads'}) {
+ skip_all(q/Perl not compiled with 'useithreads'/);
+ }
+}
+
+use ExtUtils::testlib;
+
+use threads;
+
+BEGIN {
+ $| = 1;
+ print("1..3\n"); ### Number of tests that will be run ###
+};
+
+fresh_perl_is(<<'EOI', 'ok', { }, 'No signal handler in thread');
+ use threads;
+ my $test = sub {
+ while(1) { sleep(1) }
+ };
+ my $thr = threads->create($test);
+ threads->yield();
+ $thr->detach();
+ eval {
+ $thr->kill('STOP');
+ };
+ print(($@ =~ /no signal handler set/) ? 'ok' : 'not ok');
+EOI
+
+fresh_perl_is(<<'EOI', 'ok', { }, 'Handler to signal mismatch');
+ use threads;
+ my $test = sub {
+ $SIG{'TERM'} = sub { threads->exit() };
+ while(1) { sleep(1) }
+ };
+ my $thr = threads->create($test);
+ threads->yield();
+ $thr->detach();
+ eval {
+ $thr->kill('STOP');
+ };
+ print(($@ =~ /no signal handler set/) ? 'ok' : 'not ok');
+EOI
+
+fresh_perl_is(<<'EOI', 'ok', { }, 'Handler and signal match');
+ use threads;
+ my $test = sub {
+ $SIG{'STOP'} = sub { threads->exit() };
+ while(1) { sleep(1) }
+ };
+ my $thr = threads->create($test);
+ threads->yield();
+ $thr->detach();
+ eval {
+ $thr->kill('STOP');
+ };
+ print((! $@) ? 'ok' : 'not ok');
+EOI
+
+exit(0);
+
+# EOF

View file

@ -1,19 +0,0 @@
$NetBSD: patch-hints_darwin.sh,v 1.1 2011/08/05 13:12:18 ryoon Exp $
Patch from http://perl5.git.perl.org/perl.git/commitdiff/60a655a1ee05c577268377c1135ffabc34dbff43
--- /usr/tmp/lang/perl5/work/perl-5.12.2/hints/darwin.sh.orig 2010-09-05 15:14:33.000000000 +0000
+++ /usr/tmp/lang/perl5/work/perl-5.12.2/hints/darwin.sh
@@ -68,8 +68,10 @@ esac
# Since we can build fat, the archname doesn't need the processor type
archname='darwin';
-# nm works.
-usenm='true';
+# nm isn't known to work after Snow Leopard and XCode 4; testing with OS X 10.5
+# and Xcode 3 shows a working nm, but pretending it doesn't work produces no
+# problems.
+usenm='false';
case "$optimize" in
'')

View file

@ -1,34 +0,0 @@
$NetBSD: patch-pp.c,v 1.1 2011/04/07 04:03:58 taca Exp $
* Fix for http://secunia.com/advisories/43921/ from perl's git repository
(539689e74a).
--- pp.c.orig 2010-09-06 23:30:32.000000000 +0000
+++ pp.c
@@ -3949,6 +3949,8 @@ PP(pp_ucfirst)
SvCUR_set(dest, need - 1);
}
}
+ if (dest != source && SvTAINTED(source))
+ SvTAINT(dest);
SvSETMAGIC(dest);
RETURN;
}
@@ -4222,6 +4224,8 @@ PP(pp_uc)
SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
}
} /* End of isn't utf8 */
+ if (dest != source && SvTAINTED(source))
+ SvTAINT(dest);
SvSETMAGIC(dest);
RETURN;
}
@@ -4433,6 +4437,8 @@ PP(pp_lc)
SvCUR_set(dest, d - (U8*)SvPVX_const(dest));
}
}
+ if (dest != source && SvTAINTED(source))
+ SvTAINT(dest);
SvSETMAGIC(dest);
RETURN;
}

View file

@ -1,10 +1,10 @@
$NetBSD: patch-ta,v 1.3 2009/12/14 06:36:57 seb Exp $
$NetBSD: patch-ta,v 1.4 2011/08/05 18:06:15 adam Exp $
On NetBSD, filesystems may be mounted with the noatime option.
--- t/io/fs.t.orig 2009-12-06 21:03:51.000000000 +0000
+++ t/io/fs.t 2009-12-06 21:04:34.000000000 +0000
@@ -281,15 +281,15 @@
@@ -275,15 +275,15 @@
is( $atime, 500000001, 'atime' );
is( $mtime, 500000000 + $delta, 'mtime' );
}

View file

@ -1,45 +0,0 @@
$NetBSD: patch-zc,v 1.5 2011/01/30 21:35:32 wiz Exp $
--- Policy_sh.SH.orig 2010-04-26 08:08:20.000000000 +0000
+++ Policy_sh.SH 2010-05-27 09:34:44.000000000 +0000
@@ -165,7 +165,7 @@
# We don't know what to do with these yet.
html1dir) dflt='' ;;
- htm31dir) dflt='' ;;
+ html3dir) dflt='' ;;
# Directories for site-specific add-on files
sitebin) dflt=$siteprefix/bin ;;
@@ -184,11 +184,11 @@
;;
sitearch) dflt="$sitelib/$archname" ;;
- siteman1) dflt="$siteprefix/man/man1" ;;
- siteman3) dflt="$siteprefix/man/man3" ;;
+ siteman1dir) dflt="$siteprefix/man/man1" ;;
+ siteman3dir) dflt="$siteprefix/man/man3" ;;
# We don't know what to do with these yet.
- sitehtml1) dflt='' ;;
- sitehtm31dir) dflt='' ;;
+ sitehtml1dir) dflt='' ;;
+ sitehtml3dir) dflt='' ;;
# Directories for vendor-supplied add-on files
# These are all usually empty.
@@ -213,11 +213,11 @@
;;
vendorarch) dflt="$vendorlib/$archname" ;;
- vendorman1) dflt="$vendorprefix/man/man1" ;;
- vendorman3) dflt="$vendorprefix/man/man3" ;;
+ vendorman1dir) dflt="$vendorprefix/man/man1" ;;
+ vendorman3dir) dflt="$vendorprefix/man/man3" ;;
# We don't know what to do with these yet.
- vendorhtml1) dflt='' ;;
- vendorhtm3) dflt='' ;;
+ vendorhtml1dir) dflt='' ;;
+ vendorhtml3dir) dflt='' ;;
esac # End of vendorprefix != ''
fi

View file

@ -1,10 +1,21 @@
$NetBSD: patch-ze,v 1.2 2011/01/30 21:35:24 wiz Exp $
$NetBSD: patch-ze,v 1.3 2011/08/05 18:06:15 adam Exp $
Fixes compilation problem on Solaris/SPARC.
--- perl.h.orig 2009-07-06 11:18:58.000000000 +0000
+++ perl.h
@@ -1435,6 +1435,10 @@ EXTERN_C char *crypt(const char *, const
@@ -1397,8 +1397,8 @@ EXTERN_C char *crypt(const char *, const
# endif
#else
# ifdef HAS_SYS_ERRLIST
- extern int sys_nerr;
- extern char *sys_errlist[];
+ extern const int sys_nerr;
+ extern const char *const sys_errlist[];
# ifndef Strerror
# define Strerror(e) \
((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
@@ -1476,6 +1476,10 @@ EXTERN_C char *crypt(const char *, const
*/
#if defined(I_SYSMODE) && !defined(PERL_MICRO)

View file

@ -1,4 +1,4 @@
# $NetBSD: version.mk,v 1.3 2005/05/27 22:15:53 jlam Exp $
# $NetBSD: version.mk,v 1.4 2011/08/05 18:06:14 adam Exp $
#
# Distill the PERL5_REQD list into a single value that is the highest
# version of Perl required.
@ -25,7 +25,7 @@ _PERL5_PKG_SATISFIES_DEP!= \
. endif
. endfor
. if !empty(_PERL5_PKG_SATISFIES_DEP:M[yY][eE][sS])
_PERL5_REQD= ${_version_}
_PERL5_REQD= ${_version_}
. endif
. endif
. endfor