use strict;
use warnings;
-require 5.008001;
+require 5.006;
use ExtUtils::MakeMaker;
BEGIN { if ( $^O eq 'cygwin' ) {
my %META_BITS = (
);
my %RUN_DEPS = (
- 'Sub::Exporter::Progressive' => 0.001002,
+ 'Sub::Exporter::Progressive' => '0.001002',
( (defined ${^GLOBAL_PHASE} or !can_xs() )
? ()
: ('Devel::GlobalDestruction::XS' => 0)
LICENSE => 'perl',
INSTALLDIRS => 'site',
PL_FILES => { },
- MIN_PERL_VERSION => '5.008001',
+ MIN_PERL_VERSION => '5.006',
PREREQ_PM => \%RUN_DEPS,
CONFIGURE_REQUIRES => { 'ExtUtils::CBuilder' => 0.27 },
META_ADD => {
#
elsif (eval {
require Devel::GlobalDestruction::XS;
+ no warnings 'once';
*in_global_destruction = \&Devel::GlobalDestruction::XS::in_global_destruction;
1;
}) {
require B;
my $started = !B::main_start()->isa(q[B::NULL]);
unless ($started) {
- eval 'CHECK { $started = 1 }; 1'
+ # work around 5.6 eval bug
+ eval '0 && $started; CHECK { $started = 1 }; 1'
or die $@;
}
- eval 'sub in_global_destruction () { $started && B::main_start()->isa(q[B::NULL]) }; 1'
+ eval '0 && $started; sub in_global_destruction () { $started && B::main_start()->isa(q[B::NULL]) }; 1'
or die $@;
}
# try to ensure this is the last-most END so we capture future tests
# running in other ENDs
-require B;
-my $reinject_retries = my $max_retry = 5;
-my $end_worker;
-$end_worker = sub {
- my $tail = (B::end_av()->ARRAY)[-1];
- if (!defined $tail or $tail == $end_worker) {
- $? = $had_error || 0;
- $reinject_retries = 0;
- }
- elsif ($reinject_retries--) {
- push @{B::end_av()->object_2svref}, $end_worker;
- }
- else {
- print STDERR "\n\nSomething is racing with @{[__FILE__]} for final END block definition - can't win after $max_retry iterations :(\n\n";
- require POSIX;
- POSIX::_exit( 255 );
- }
-};
-END { push @{B::end_av()->object_2svref}, $end_worker }
+if ($[ >= 5.008) {
+ require B;
+ my $reinject_retries = my $max_retry = 5;
+ my $end_worker;
+ $end_worker = sub {
+ my $tail = (B::end_av()->ARRAY)[-1];
+ if (!defined $tail or $tail == $end_worker) {
+ $? = $had_error || 0;
+ $reinject_retries = 0;
+ }
+ elsif ($reinject_retries--) {
+ push @{B::end_av()->object_2svref}, $end_worker;
+ }
+ else {
+ print STDERR "\n\nSomething is racing with @{[__FILE__]} for final END block definition - can't win after $max_retry iterations :(\n\n";
+ require POSIX;
+ POSIX::_exit( 255 );
+ }
+ };
+ eval 'END { push @{B::end_av()->object_2svref}, $end_worker }';
+}
+# B::end_av isn't available on 5.6, so just use a basic end block
+else {
+ eval 'END { $? = $had_error || 0 }';
+}
sub ok ($$) {
$had_error++, print "not " if !$_[0];
ok( ! in_global_destruction(), "Runtime is not GD" );
-our $sg1 = Test::Scope::Guard->new(sub { ok( in_global_destruction(), "Final cleanup object destruction properly in GD" ) });
+our $sg1;
+$sg1 = Test::Scope::Guard->new(sub { ok( in_global_destruction(), "Final cleanup object destruction properly in GD" ) });
END {
ok( ! in_global_destruction(), 'Not yet in GD while in END block 1' )
use FindBin qw($Bin);
use Config;
use IPC::Open2;
-use File::Glob 'bsd_glob'; # support spaces in names unlike glob()
# rerun the tests under the assumption of pure-perl
my $this_file = quotemeta(__FILE__);
-my @tests = grep { $_ !~ /${this_file}$/ } bsd_glob("$Bin/*.t");
+opendir(my $dh, $Bin);
+my @tests = grep { $_ !~ /${this_file}$/ } map { "$Bin/$_" } grep { /\.t$/ } readdir $dh;
print "1..@{[ scalar @tests ]}\n";
my $had_error = 0;