a7cc19b5d09e9605cff610bc3a901588fe8461c6
[p5sagit/p5-mst-13.2.git] / win32 / buildext.pl
1 =head1 NAME
2
3 buildext.pl - build extensions
4
5 =head1 SYNOPSIS
6
7     buildext.pl make [-make_opts] dep directory [target]
8
9 E.g.
10
11     buildext.pl nmake -nologo perldll.def ..\ext
12
13     buildext.pl nmake -nologo perldll.def ..\ext clean
14
15     buildext.pl dmake perldll.def ..\ext
16
17     buildext.pl dmake perldll.def ..\ext clean
18
19 =cut
20
21 use File::Basename;
22 use Cwd;
23 use FindExt;
24 my $here = getcwd();
25 my $perl = $^X;
26 $here =~ s,/,\\,g;
27 if ($perl =~ m#^\.\.#)
28  {
29   $perl = "$here\\$perl";
30  }
31 (my $topdir = $perl) =~ s/\\[^\\]+$//;
32 $ENV{PATH} = "$topdir;$ENV{PATH}";      # so miniperl can find perlglob.exe
33 #print "PATH=$ENV{PATH}\n";
34 my $make = shift;
35 $make .= " ".shift while $ARGV[0]=~/^-/;
36 my $dep  = shift;
37 my $dmod = -M $dep;
38 my $dir  = shift;
39 chdir($dir) || die "Cannot cd to $dir\n";
40 my $targ  = shift;
41 (my $ext = getcwd()) =~ s,/,\\,g;
42 FindExt::scan_ext($ext);
43
44 my @ext = FindExt::extensions();
45
46 foreach my $dir (sort @ext)
47  {
48   if (chdir("$ext\\$dir"))
49    {
50     my $mmod = -M 'Makefile';
51     if (!(-f 'Makefile') || $mmod > $dmod)
52      {
53       print "\nRunning Makefile.PL in $dir\n";
54       my @perl = ($perl, "-I$here\\..\\lib", 'Makefile.PL',
55                   'INSTALLDIRS=perl', 'PERL_CORE=1');
56       print join(' ', @perl), "\n";
57       my $code = system(@perl);
58       warn "$code from $dir's Makefile.PL" if $code;
59       $mmod = -M 'Makefile';
60       if ($mmod > $dmod)
61        {
62         warn "Makefile $mmod > $dmod ($dep)\n";
63        }
64      }  
65     if ($targ)
66      {
67       print "Making $targ in $dir\n$make $targ\n";
68       system("$make $targ");
69      }
70     else
71      {
72       print "Making $dir\n$make\n";
73       system($make);
74      }
75     chdir($here) || die "Cannot cd to $here:$!";
76    }
77   else
78    {
79     warn "Cannot cd to $ext\\$dir:$!";
80    }
81  }
82