diff options
Diffstat (limited to 'win32/FindExt.pm')
-rw-r--r-- | win32/FindExt.pm | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/win32/FindExt.pm b/win32/FindExt.pm new file mode 100644 index 0000000000..ea5165f1c4 --- /dev/null +++ b/win32/FindExt.pm @@ -0,0 +1,62 @@ +package FindExt; +use strict; +use File::Find; +use File::Basename; +use Cwd; + +my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File Syslog Sysv)); +$no = qr/^(?:$no)$/i; + +my %ext; +my $ext; +sub scan_ext +{ + my $here = getcwd(); + my $dir = shift; + chdir($dir) || die "Cannot cd to $dir\n"; + ($ext = getcwd()) =~ s,/,\\,g; + find(\&find_ext,'.'); + chdir($here) || die "Cannot cd to $here\n"; + my @ext = extensions(); +} + +sub dynamic_extensions +{ + return grep $ext{$_} eq 'dynamic',keys %ext; +} + +sub noxs_extensions +{ + return grep $ext{$_} eq 'noxs',keys %ext; +} + +sub extensions +{ + return keys %ext; +} + +sub find_ext +{ + if (/^(.*)\.pm$/i || /^(.*)_pm.PL$/i) + { + my $name = $1; + return if $name =~ $no; + my $dir = $File::Find::dir; + $dir =~ s,./,,; + return if exists $ext{$dir}; + return unless -f "$ext/$dir/Makefile.PL"; + if ($dir =~ /$name$/i) + { + if (-f "$ext/$dir/$name.xs") + { + $ext{$dir} = 'dynamic'; + } + else + { + $ext{$dir} = 'nonxs'; + } + } + } +} + +1; |