056361982ec8890a0bd63aa57582ce120152cf70
[p5sagit/p5-mst-13.2.git] / win32 / buildext.pl
1 use File::Find;
2 use File::Basename;
3 use Cwd;
4 my $here = getcwd();
5 my $perl = $^X;
6 $here =~ s,/,\\,g;
7 if ($perl =~ m#^\.\.#)
8  {
9   $perl = "$here\\$perl";
10  }
11 my $make = shift;
12 my $dep  = shift;
13 my $dmod = -M $dep;
14 my $dir  = shift;
15 chdir($dir) || die "Cannot cd to $dir\n";
16 (my $ext = getcwd()) =~ s,/,\\,g;
17 my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File Syslog Sysv));
18 $no = qr/^(?:$no)$/i;
19 my %ext;
20 find(\&find_xs,'.');
21
22 foreach my $dir (sort keys %ext)
23  {
24   if (chdir("$ext\\$dir"))
25    {
26     my $mmod = -M 'Makefile';
27     if (!(-f 'Makefile') || $mmod > $dmod)
28      {
29       print "\nRunning Makefile.PL in $dir\n";
30       my $code = system($perl,"-I$here\\..\lib",'Makefile.PL','INSTALLDIRS=perl');
31       warn "$code from $dir's Makefile.PL" if $code;
32       $mmod = -M 'Makefile';
33       if ($mmod > $dmod)
34        {
35         warn "Makefile $mmod > $dmod ($dep)\n";
36        }
37      }  
38     print "\nMaking $dir\n";
39     system($make);
40     chdir($here) || die "Cannot cd to $here:$!";
41    }
42   else
43    {
44     warn "Cannot cd to $ext\\$dir:$!";
45    }
46  }
47
48 sub find_xs
49 {
50  if (/^(.*)\.pm$/i || /^(.*)_pm.PL$/i)
51   {
52    my $name = $1;
53    return if $name =~ $no; 
54    my $dir = $File::Find::dir; 
55    $dir =~ s,./,,;
56    return if exists $ext{$dir};
57    return unless -f "$ext/$dir/Makefile.PL";
58    if ($dir =~ /$name$/i)
59     {
60      $ext{$dir} = $name; 
61     }
62   }
63 }