RE: Borland C++ for Win32 fixes; perl@9359 (also perl@9424)
[p5sagit/p5-mst-13.2.git] / win32 / buildext.pl
CommitLineData
17af6fb0 1use File::Find;
2use File::Basename;
3use Cwd;
4my $here = getcwd();
5my $perl = $^X;
6$here =~ s,/,\\,g;
7if ($perl =~ m#^\.\.#)
8 {
9 $perl = "$here\\$perl";
10 }
11my $make = shift;
12my $dep = shift;
13my $dmod = -M $dep;
14my $dir = shift;
15chdir($dir) || die "Cannot cd to $dir\n";
16(my $ext = getcwd()) =~ s,/,\\,g;
17my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File Syslog Sysv));
18$no = qr/^(?:$no)$/i;
19my %ext;
20find(\&find_xs,'.');
21
22foreach 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 "\nMakefile.PL in $dir ($mmod > $dmod)\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
48sub find_xs
49{
50 if (/^(.*)\.pm$/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}