Commit | Line | Data |
17af6fb0 |
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 "\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 | |
48 | sub 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 | } |