From: Steve Peters Date: Sat, 14 Oct 2006 23:00:35 +0000 (+0000) Subject: Upgrade to XSLoader-0.07. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=150e77ce34d3aa0165d475fba43d6f619fb12856;p=p5sagit%2Fp5-mst-13.2.git Upgrade to XSLoader-0.07. p4raw-id: //depot/perl@29017 --- diff --git a/ext/DynaLoader/XSLoader_pm.PL b/ext/DynaLoader/XSLoader_pm.PL index 59ffbc6..d95cdb0 100644 --- a/ext/DynaLoader/XSLoader_pm.PL +++ b/ext/DynaLoader/XSLoader_pm.PL @@ -15,7 +15,7 @@ print OUT <<'EOT'; package XSLoader; -$VERSION = "0.06"; +$VERSION = "0.07"; #use strict; @@ -150,7 +150,7 @@ XSLoader - Dynamically load C libraries into Perl code =head1 VERSION -Version 0.06 +Version 0.07 =head1 SYNOPSIS @@ -318,24 +318,24 @@ this: =head1 DIAGNOSTICS -=over 4 +=over -=item Can't find '%s' symbol in %s +=item C B<(F)> The bootstrap symbol could not be found in the extension module. -=item Can't load '%s' for module %s: %s +=item C B<(F)> The loading or initialisation of the extension module failed. The detailed error follows. -=item Undefined symbols present after loading %s: %s +=item C B<(W)> As the message says, some symbols stay undefined although the extension module was correctly loaded and initialised. The list of undefined symbols follows. -=item XSLoader::load('Your::Module', $Your::Module::VERSION) +=item C B<(F)> You tried to invoke C without any argument. You must supply a module name, and optionally its version. @@ -371,9 +371,9 @@ L Ilya Zakharevich originally extracted C from C. CPAN version is currently maintained by SEbastien Aperghis-Tramoni -Esebastien@aperghis.netE +Esebastien@aperghis.netE. -Previous maintainer was Michael G Schwern +Previous maintainer was Michael G Schwern . =head1 COPYRIGHT diff --git a/ext/DynaLoader/t/XSLoader.t b/ext/DynaLoader/t/XSLoader.t index 4af9a34..82dca56 100644 --- a/ext/DynaLoader/t/XSLoader.t +++ b/ext/DynaLoader/t/XSLoader.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl -wT +#!/usr/bin/perl -T BEGIN { if( $ENV{PERL_CORE} ) { @@ -9,43 +9,59 @@ BEGIN { use strict; use Config; -use Test::More; -my %modules; + BEGIN { - %modules = ( - # ModuleName => q|code to check that it was loaded|, - 'Cwd' => q| ::is( ref Cwd->can('fastcwd'),'CODE' ) |, # 5.7 ? - 'File::Glob' => q| ::is( ref File::Glob->can('doglob'),'CODE' ) |, # 5.6 - 'SDBM_File' => q| ::is( ref SDBM_File->can('TIEHASH'), 'CODE' ) |, # 5.0 - 'Socket' => q| ::is( ref Socket->can('inet_aton'),'CODE' ) |, # 5.0 - 'Time::HiRes'=> q| ::is( ref Time::HiRes->can('usleep'),'CODE' ) |, # 5.7.3 - ); - plan tests => keys(%modules) * 2 + 3 + eval "use Test::More"; + if ($@) { + print "1..0 # Skip: Test::More not available\n"; + die "Test::More not available\n"; + } } -BEGIN { - use_ok( 'XSLoader' ); -} +my %modules = ( + # ModuleName => q|code to check that it was loaded|, + 'Cwd' => q| ::can_ok( 'Cwd' => 'fastcwd' ) |, # 5.7 ? + 'File::Glob' => q| ::can_ok( 'File::Glob' => 'doglob' ) |, # 5.6 + 'SDBM_File' => q| ::can_ok( 'SDBM_File' => 'TIEHASH' ) |, # 5.0 + 'Socket' => q| ::can_ok( 'Socket' => 'inet_aton' ) |, # 5.0 + 'Time::HiRes'=> q| ::can_ok( 'Time::HiRes' => 'usleep' ) |, # 5.7.3 +); + +plan tests => keys(%modules) * 3 + 5; + +# Try to load the module +use_ok( 'XSLoader' ); # Check functions can_ok( 'XSLoader' => 'load' ); -#can_ok( 'XSLoader' => 'bootstrap_inherit' ); # doesn't work +can_ok( 'XSLoader' => 'bootstrap_inherit' ); # Check error messages eval { XSLoader::load() }; like( $@, '/^XSLoader::load\(\'Your::Module\', \$Your::Module::VERSION\)/', "calling XSLoader::load() with no argument" ); +eval q{ package Thwack; XSLoader::load('Thwack'); }; +like( $@, q{/^Can't locate loadable object for module Thwack in @INC/}, + "calling XSLoader::load() under a package with no XS part" ); + # Now try to load well known XS modules my $extensions = $Config{'extensions'}; $extensions =~ s|/|::|g; for my $module (sort keys %modules) { SKIP: { - skip "$module not available", 2 if $extensions !~ /\b$module\b/; - eval qq| package $module; XSLoader::load('$module'); | . $modules{$module}; + skip "$module not available", 3 if $extensions !~ /\b$module\b/; + + eval qq{ package $module; XSLoader::load('$module', "qunckkk"); }; + like( $@, "/^$module object version \\S+ does not match bootstrap parameter (?:qunckkk|0\\.000)/", + "calling XSLoader::load() with a XS module and an incorrect version" ); + + eval qq{ package $module; XSLoader::load('$module'); }; is( $@, '', "XSLoader::load($module)"); + + eval qq{ package $module; $modules{$module}; }; } }