r64820 - in /branches/upstream/libmath-bigint-gmp-perl/current: CHANGES GMP.xs MANIFEST META.yml SIGNATURE inc/Devel/CheckLib.pm lib/Math/BigInt/GMP.pm t/pod_cov.t t/storable.t t/threads.t typemap
gregoa at users.alioth.debian.org
gregoa at users.alioth.debian.org
Fri Nov 12 22:14:52 UTC 2010
Author: gregoa
Date: Fri Nov 12 22:14:46 2010
New Revision: 64820
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=64820
Log:
[svn-upgrade] new version libmath-bigint-gmp-perl (1.32)
Added:
branches/upstream/libmath-bigint-gmp-perl/current/t/storable.t
Modified:
branches/upstream/libmath-bigint-gmp-perl/current/CHANGES
branches/upstream/libmath-bigint-gmp-perl/current/GMP.xs
branches/upstream/libmath-bigint-gmp-perl/current/MANIFEST
branches/upstream/libmath-bigint-gmp-perl/current/META.yml
branches/upstream/libmath-bigint-gmp-perl/current/SIGNATURE
branches/upstream/libmath-bigint-gmp-perl/current/inc/Devel/CheckLib.pm
branches/upstream/libmath-bigint-gmp-perl/current/lib/Math/BigInt/GMP.pm
branches/upstream/libmath-bigint-gmp-perl/current/t/pod_cov.t
branches/upstream/libmath-bigint-gmp-perl/current/t/threads.t
branches/upstream/libmath-bigint-gmp-perl/current/typemap
Modified: branches/upstream/libmath-bigint-gmp-perl/current/CHANGES
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/CHANGES?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/CHANGES (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/CHANGES Fri Nov 12 22:14:46 2010
@@ -1,4 +1,27 @@
-2010-09-14 v1.06 rafl 5558 tests DEVELOPMENT RELEASE
+2010-09-23 v1.32 rafl 5559 tests
+ * Re-upload 1.31 as a stable release without further changes.
+
+2010-09-21 v1.31 rafl 5559 tests DEVELOPMENT RELEASE
+ * Add hooks for Storable (de-)serialisation.
+ * Avoid failure in the destructor if someone blessed nonsense into our class.
+
+2010-09-20 v1.30 rafl 5558 tests
+ * Re-upload 1.29 as a stable release without further changes.
+
+2010-09-19 v1.29 rafl 5558 tests DEVELOPMENT RELEASE
+ * Attempt to fix a bug in the bundled version Devel::CheckLib.
+ It used to ignore @Config{qw(ccflags ldflags)} and only tried to look for
+ headers and libraries with the compiler's default include- and lib-paths as
+ well as those explicitly asked for by the user.
+
+2010-09-17 v1.28 rafl 5558 tests
+ * Re-upload 1.27 without further changes as a stable release.
+
+2010-09-15 v1.27 rafl 5558 tests DEVELOPMENT RELEASE
+ * Try to support perls older than 5.8.8 again.
+ Tested with 5.8.7 and 5.6.2.
+
+2010-09-14 v1.26 rafl 5558 tests DEVELOPMENT RELEASE
* Error out early if libgmp or gmp.h are missing.
* Clone Math::BigInt::GMP instances on thread cloning.
This should make the module threadsafe.
Modified: branches/upstream/libmath-bigint-gmp-perl/current/GMP.xs
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/GMP.xs?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/GMP.xs (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/GMP.xs Fri Nov 12 22:14:46 2010
@@ -3,9 +3,35 @@
#include "XSUB.h"
#include "gmp.h"
+typedef mpz_t mpz_t_ornull;
+
/* for Perl prior to v5.7.1 */
#ifndef SvUOK
# define SvUOK(sv) SvIOK_UV(sv)
+#endif
+
+#ifndef PERL_UNUSED_ARG
+# define PERL_UNUSED_ARG(x) ((void)x)
+#endif
+
+#ifndef gv_stashpvs
+# define gv_stashpvs(name, create) gv_stashpvn(name, sizeof(name) - 1, create)
+#endif
+
+#ifndef PERL_MAGIC_ext
+# define PERL_MAGIC_ext '~'
+#endif
+
+#if defined(USE_ITHREADS) && defined(MGf_DUP)
+# define GMP_THREADSAFE 1
+#else
+# define GMP_THREADSAFE 0
+#endif
+
+#ifdef sv_magicext
+# define GMP_HAS_MAGICEXT 1
+#else
+# define GMP_HAS_MAGICEXT 0
#endif
#define NEW_GMP_MPZ_T RETVAL = malloc (sizeof(mpz_t));
@@ -14,7 +40,7 @@
#define GMP_GET_ARG_1 TEMP_1 = mpz_from_sv(y);
#define GMP_GET_ARGS_0_1 GMP_GET_ARG_0; GMP_GET_ARG_1;
-#ifdef USE_ITHREADS
+#if GMP_THREADSAFE
STATIC int
dup_gmp_mpz (pTHX_ MAGIC *mg, CLONE_PARAMS *params)
{
@@ -27,65 +53,100 @@
}
#endif
+#if GMP_HAS_MAGICEXT
STATIC MGVTBL vtbl_gmp = {
NULL, /* get */
NULL, /* set */
NULL, /* len */
NULL, /* clear */
NULL, /* free */
-#ifdef MGf_COPY
+# ifdef MGf_COPY
NULL, /* copy */
-#endif
-#ifdef MGf_DUP
-# ifdef USE_ITHREADS
+# endif
+# ifdef MGf_DUP
+# if GMP_THREADSAFE
dup_gmp_mpz,
-# else
+# else
NULL, /* dup */
+# endif
# endif
-#endif
-#ifdef MGf_LOCAL
+# ifdef MGf_LOCAL
NULL, /* local */
-#endif
+# endif
};
+#endif
+
+STATIC void
+attach_mpz_to_sv (SV *sv, mpz_t *mpz)
+{
+#if GMP_THREADSAFE
+ MAGIC *mg;
+#endif
+#if !GMP_HAS_MAGICEXT
+ SV *refaddr = sv_2mortal(newSViv(PTR2IV(mpz)));
+#endif
+
+ sv_bless(sv, gv_stashpvs("Math::BigInt::GMP", 0));
+
+#if GMP_THREADSAFE && GMP_HAS_MAGICEXT
+ mg =
+#endif
+#if GMP_HAS_MAGICEXT
+ sv_magicext(SvRV(sv), NULL, PERL_MAGIC_ext, &vtbl_gmp, (void *)mpz, 0);
+#else
+ sv_magic(SvRV(sv), NULL, PERL_MAGIC_ext, (void *)refaddr, HEf_SVKEY);
+#endif
+
+#if GMP_THREADSAFE && GMP_HAS_MAGICEXT
+ mg->mg_flags |= MGf_DUP;
+#endif
+}
STATIC SV *
sv_from_mpz (mpz_t *mpz)
{
SV *sv = newSV(0);
SV *obj = newRV_noinc(sv);
-#ifdef USE_ITHREADS
- MAGIC *mg;
-#endif
-
- sv_bless(obj, gv_stashpvs("Math::BigInt::GMP", 0));
-
-#ifdef USE_ITHREADS
- mg =
-#endif
- sv_magicext(sv, NULL, PERL_MAGIC_ext, &vtbl_gmp, (void *)mpz, 0);
-
-#ifdef USE_ITHREADS
- mg->mg_flags |= MGf_DUP;
-#endif
+
+ attach_mpz_to_sv(obj, mpz);
return obj;
}
-mpz_t *
+STATIC mpz_t *
+mpz_from_sv_nofail (SV *sv)
+{
+ MAGIC *mg;
+
+ if (!sv_derived_from(sv, "Math::BigInt::GMP"))
+ croak("not of type Math::BigInt::GMP");
+
+ for (mg = SvMAGIC(SvRV(sv)); mg; mg = mg->mg_moremagic) {
+ if (mg->mg_type == PERL_MAGIC_ext
+#if GMP_HAS_MAGICEXT
+ && mg->mg_virtual == &vtbl_gmp
+#endif
+ ) {
+#if GMP_HAS_MAGICEXT
+ return (mpz_t *)mg->mg_ptr;
+#else
+ return INT2PTR(mpz_t *, SvIV((SV *)mg->mg_ptr));
+#endif
+ }
+ }
+
+ return (mpz_t *)NULL;
+}
+
+STATIC mpz_t *
mpz_from_sv (SV *sv)
{
- MAGIC *mg;
-
- if (!sv_derived_from(sv, "Math::BigInt::GMP"))
- croak("not of type Math::BigInt::GMP");
-
- for (mg = SvMAGIC(SvRV(sv)); mg; mg = mg->mg_moremagic) {
- if (mg->mg_type == PERL_MAGIC_ext && mg->mg_virtual == &vtbl_gmp) {
- return (mpz_t *)mg->mg_ptr;
- }
- }
-
- croak("failed to fetch mpz pointer");
+ mpz_t *mpz;
+
+ if (!(mpz = mpz_from_sv_nofail(sv)))
+ croak("failed to fetch mpz pointer");
+
+ return mpz;
}
/*
@@ -97,7 +158,7 @@
PROTOTYPES: ENABLE
##############################################################################
-# _new()
+# _new()
mpz_t *
_new(Class,x)
@@ -118,6 +179,25 @@
RETVAL
##############################################################################
+# _new_attach()
+
+void
+_new_attach(Class,sv,x)
+ SV *sv
+ SV *x
+ PREINIT:
+ mpz_t *mpz;
+ CODE:
+ mpz = malloc (sizeof(mpz_t));
+ if (SvUOK(x)) {
+ mpz_init_set_si(*mpz, (UV)SvUV(x));
+ }
+ else {
+ mpz_init_set_str(*mpz, SvPV_nolen(x), 10);
+ }
+ attach_mpz_to_sv(sv, mpz);
+
+##############################################################################
# _from_bin()
mpz_t *
@@ -234,11 +314,13 @@
void
DESTROY(n)
- mpz_t* n
-
- PPCODE:
- mpz_clear(*n);
- free(n);
+ mpz_t_ornull* n
+
+ PPCODE:
+ if (n) {
+ mpz_clear(*n);
+ free(n);
+ }
##############################################################################
# _num() - numify, return string so that atof() and atoi() can use it
Modified: branches/upstream/libmath-bigint-gmp-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/MANIFEST?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/MANIFEST (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/MANIFEST Fri Nov 12 22:14:46 2010
@@ -23,6 +23,7 @@
t/bigroot.t
t/pod.t
t/pod_cov.t
+t/storable.t
t/threads.t
TODO
typemap
Modified: branches/upstream/libmath-bigint-gmp-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/META.yml?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/META.yml (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/META.yml Fri Nov 12 22:14:46 2010
@@ -1,11 +1,11 @@
---
name: Math-BigInt-GMP
author: Tels
-version: 1.26
+version: 1.32
version_from: lib/Math/BigInt/GMP.pm
license: perl
distribution_type: module
-generated_by: Math-BigInt-GMP version 1.26
+generated_by: Math-BigInt-GMP version 1.32
installdirs: site
requires:
Math::BigInt: 1.9
Modified: branches/upstream/libmath-bigint-gmp-perl/current/SIGNATURE
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/SIGNATURE?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/SIGNATURE (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/SIGNATURE Fri Nov 12 22:14:46 2010
@@ -15,22 +15,22 @@
Hash: SHA1
SHA1 70d6187d0152848c922dc4360fa6dd3a3dc35c62 BUGS
-SHA1 6fd2ead704ecb3644c53e9233b20f479623c996e CHANGES
+SHA1 46af513c8db3c36f1731948054c05bdc4f08fd07 CHANGES
SHA1 dda5ca4f413031e9efcaa1600461d5e2adaa3a40 CREDITS
-SHA1 1566e65e25fdde8f02c28bda8d04372c9fcac7a8 GMP.xs
+SHA1 080095890588199a038e4c2cd2c70df0dcdbf929 GMP.xs
SHA1 fcb1ead705a964b5555ff355534cbcf8b4c176e5 INSTALL
SHA1 d6a6c30ee6d9ba6b9afab8bbf6a25e1b23c744e0 LICENSE
-SHA1 d92d036825f848456802a2100373b7e021c1e4ed MANIFEST
+SHA1 babd5d074bee5dc8eb6463a155a7a6b5d978befb MANIFEST
SHA1 f3190cb30c8df53e0fd78658ff9a6132e031042e MANIFEST.SKIP
-SHA1 6e2929ced41261ad0ec01242f7d8deacbd921833 META.yml
+SHA1 120504c97f61f35048dedb39a5031c30727068e9 META.yml
SHA1 32b33a1c160e1efbf82b1bf8765cde8455a32550 Makefile.PL
SHA1 e9de29b6e5e9a5e446231b5b12b644f6ed2caafc README
SHA1 acf3dd42f0d8a87dd02ef9f5f74b894423ffd4d8 TODO
SHA1 fd48d0d8750eb949e485d8136b5b424fe73e9775 build/README
SHA1 7bcc4113830721ad6e37a1ea79df94a6987c836d build/leak.pl
SHA1 ac25bda8a6eb9058a9e42a8943c3e11b9fed88dc build/leaktest
-SHA1 332c820b17158bafd87fb16c7e1401b29976952d inc/Devel/CheckLib.pm
-SHA1 463062389a2990c4a3079ffdfa351220fa3ed014 lib/Math/BigInt/GMP.pm
+SHA1 f1e5cb2590288936ff4a330903fb3f7de0b83d9b inc/Devel/CheckLib.pm
+SHA1 b1a5a482626ca59e6b0954aff7b4ad47cf7d1c82 lib/Math/BigInt/GMP.pm
SHA1 b389295c7eb542fb89f55d37390a35ac582b5e6c t/bigfltpm.inc
SHA1 a6659404498c1d7b74e055769710e00bf425e355 t/bigfltpm.t
SHA1 0f8838bf47e9c21a95bc15db11f435836440525c t/bigintg.t
@@ -39,13 +39,14 @@
SHA1 b68535cf9a33efa949c80b166302a866fd13cff9 t/biglog.t
SHA1 7eda06bd6d27b4092ab7266b1659e3a6ed369b26 t/bigroot.t
SHA1 17935f6d2607dfd441f6f59d69d5aaf282a16bfc t/pod.t
-SHA1 c7406b64a2eff28ca33248f647eee3199deb10dc t/pod_cov.t
-SHA1 808b09f78be228a7d6c91a3206ca5a10ca179c23 t/threads.t
-SHA1 d6074079ab439bd3485ed2a5d784996fcd9e717d typemap
+SHA1 4ee0586efb80691e061368a7700dc081889f1f03 t/pod_cov.t
+SHA1 f1bcab94173a57861fcc40ac90eb72f64aafea7f t/storable.t
+SHA1 e489ec79ce64d0d943e291a3eaa654298e6e49ab t/threads.t
+SHA1 20cf43acc1a728d0ee8245b106937a2a97900266 typemap
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
-iEYEARECAAYFAkyPqXsACgkQdC8qQo5jWl52pACdHSTVHW9GW4gZI6IMwxbUT7Hw
-qmgAnRYTZ3a//CB+lkDxAd4MVqmDF500
-=embN
+iEYEARECAAYFAkybovMACgkQdC8qQo5jWl5Z1wCfcQvqPXUBgiRtGwauc9PuQU1I
+RW4An3ZgjhuXqAgyu7eKSjqaMl46qGTs
+=8IPP
-----END PGP SIGNATURE-----
Modified: branches/upstream/libmath-bigint-gmp-perl/current/inc/Devel/CheckLib.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/inc/Devel/CheckLib.pm?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/inc/Devel/CheckLib.pm (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/inc/Devel/CheckLib.pm Fri Nov 12 22:14:46 2010
@@ -2,10 +2,12 @@
package Devel::CheckLib;
+use 5.00405; #postfix foreach
use strict;
use vars qw($VERSION @ISA @EXPORT);
-$VERSION = '0.7';
+$VERSION = '0.8';
use Config;
+use Text::ParseWords 'quotewords';
use File::Spec;
use File::Temp;
@@ -214,13 +216,16 @@
my @cc = _findcc();
my @missing;
my @wrongresult;
+ my @use_headers;
# first figure out which headers we can't find ...
for my $header (@headers) {
+ push @use_headers, $header;
my($ch, $cfile) = File::Temp::tempfile(
'assertlibXXXXXXXX', SUFFIX => '.c'
);
- print $ch qq{#include <$header>\nint main(void) { return 0; }\n};
+ print $ch qq{#include <$_>\n} for @use_headers;
+ print $ch qq{int main(void) { return 0; }\n};
close($ch);
my $exefile = File::Temp::mktemp( 'assertlibXXXXXXXX' ) . $Config{_exe};
my @sys_cmd;
@@ -325,12 +330,14 @@
}
sub _findcc {
+ my @flags = grep { length } map { quotewords('\s+', 0, $_) }
+ @Config{qw(ccflags ldflags)};
my @paths = split(/$Config{path_sep}/, $ENV{PATH});
my @cc = split(/\s+/, $Config{cc});
- return @cc if -x $cc[0];
+ return (@cc, @flags) if -x $cc[0];
foreach my $path (@paths) {
my $compiler = File::Spec->catfile($path, $cc[0]) . $Config{_exe};
- return ($compiler, @cc[1 .. $#cc]) if -x $compiler;
+ return ($compiler, @cc[1 .. $#cc], @flags) if -x $compiler;
}
die("Couldn't find your C compiler\n");
}
Modified: branches/upstream/libmath-bigint-gmp-perl/current/lib/Math/BigInt/GMP.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/lib/Math/BigInt/GMP.pm?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/lib/Math/BigInt/GMP.pm (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/lib/Math/BigInt/GMP.pm Fri Nov 12 22:14:46 2010
@@ -9,7 +9,7 @@
use vars qw/$VERSION/;
-$VERSION = '1.26';
+$VERSION = '1.32';
use XSLoader;
XSLoader::load "Math::BigInt::GMP", $VERSION;
@@ -121,6 +121,17 @@
($x,$exact);
}
+sub STORABLE_freeze {
+ my ($self, $cloning) = @_;
+ return Math::BigInt::GMP->_num($self);
+}
+
+sub STORABLE_thaw {
+ my ($self, $cloning, $serialized) = @_;
+ Math::BigInt::GMP->_new_attach($self, $serialized);
+ return $self;
+}
+
1;
__END__
Modified: branches/upstream/libmath-bigint-gmp-perl/current/t/pod_cov.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/t/pod_cov.t?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/t/pod_cov.t (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/t/pod_cov.t Fri Nov 12 22:14:46 2010
@@ -21,8 +21,8 @@
$@ ? 0 : 1;
};
- my $trustme = {
- trustme => [ 'api_version' ],
+ my $trustme = {
+ trustme => [ 'api_version', 'STORABLE_freeze', 'STORABLE_thaw' ],
coverage_class => 'Pod::Coverage::CountParents',
};
pod_coverage_ok( 'Math::BigInt::GMP', $trustme, "All our Math::BigInt::GMP are covered" );
Added: branches/upstream/libmath-bigint-gmp-perl/current/t/storable.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/t/storable.t?rev=64820&op=file
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/t/storable.t (added)
+++ branches/upstream/libmath-bigint-gmp-perl/current/t/storable.t Fri Nov 12 22:14:46 2010
@@ -1,0 +1,14 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use Math::BigInt::GMP;
+
+use Storable qw(freeze thaw);
+
+my $num = Math::BigInt::GMP->_new(42);
+
+my $serialised = freeze $num;
+my $cloned = thaw $serialised;
+
+ok(!Math::BigInt::GMP->_acmp($cloned, $num));
Modified: branches/upstream/libmath-bigint-gmp-perl/current/t/threads.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/t/threads.t?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/t/threads.t (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/t/threads.t Fri Nov 12 22:14:46 2010
@@ -8,6 +8,8 @@
BEGIN {
plan skip_all => 'Perl compiled without ithreads'
unless $Config{useithreads};
+ plan skip_all => 'ithreads support requires perl 5.8 or newer'
+ unless $] >= 5.008000;
plan tests => 22;
}
Modified: branches/upstream/libmath-bigint-gmp-perl/current/typemap
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmath-bigint-gmp-perl/current/typemap?rev=64820&op=diff
==============================================================================
--- branches/upstream/libmath-bigint-gmp-perl/current/typemap (original)
+++ branches/upstream/libmath-bigint-gmp-perl/current/typemap Fri Nov 12 22:14:46 2010
@@ -1,8 +1,11 @@
mpz_t * MPZ
+mpz_t_ornull * MPZ_NF
INPUT
MPZ
$var = mpz_from_sv($arg);
+MPZ_NF
+ $var = mpz_from_sv_nofail($arg);
OUTPUT
MPZ
More information about the Pkg-perl-cvs-commits
mailing list