1package MakeMaker::Test::NoXS; 2 3# Disable all XS loading. 4 5use strict; 6use warnings; 7use Carp; 8 9require DynaLoader; 10require XSLoader; 11 12# Things like Cwd key on this to decide if they're running miniperl 13delete $DynaLoader::{boot_DynaLoader}; 14 15if ($^O eq 'MSWin32') { 16 # Load Win32. Then clear the stash of all other entries but GetCwd and SetChildShowWindow 17 # SetChildShowWindow and GetCwd are provided by perl core in modern perls, so we 18 # can use them in miniperl. on older perls, we can load them from Win32 so the 19 # test can proceed as normal. 20 21 require Win32; 22 23 foreach my $slot (keys %Win32::) { 24 next if $slot eq 'GetCwd'; 25 next if $slot eq 'SetChildShowWindow'; 26 delete $Win32::{$slot}; 27 } 28} 29 30# This isn't 100%. Things like Win32.pm will crap out rather than 31# just not load. See ExtUtils::MM->_is_win95 for an example 32no warnings 'redefine'; 33*DynaLoader::bootstrap = sub { confess "Tried to load XS for @_"; }; 34*XSLoader::load = sub { confess "Tried to load XS for @_"; }; 35 361; 37