use warnings;
use Config;
BEGIN {
- unshift @INC, $^O eq 'MSWin32' ? '../ext/Cwd' : 'ext/Cwd';
+ if ($^O eq 'MSWin32') {
+ unshift @INC, ('../cpan/Cwd', '../cpan/Cwd/lib');
+ require File::Spec::Functions;
+ }
+ else {
+ unshift @INC, 'cpan/Cwd';
+ }
}
use Cwd;
# After which, all nonxs modules are in lib, which was always sufficient to
# allow miniperl to build everything else.
-my @toolchain = qw(ext/constant/lib ext/Cwd ext/Cwd/lib ext/ExtUtils-Command/lib
- ext/ExtUtils-Install/lib ext/ExtUtils-MakeMaker/lib
+my @toolchain = qw(ext/constant/lib cpan/Cwd cpan/Cwd/lib
+ ext/ExtUtils-Command/lib
+ dist/ExtUtils-Install/lib ext/ExtUtils-MakeMaker/lib
ext/ExtUtils-Manifest/lib ext/Text-ParseWords/lib
- ext/File-Path/lib ext/AutoLoader/lib);
+ cpan/File-Path/lib cpan/AutoLoader/lib);
-my @ext_dirs = qw(ext cpan);
+my @ext_dirs = qw(cpan dist ext);
+my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')';
# This script acts as a simple interface for building extensions.
if (s{^lib/auto/}{}) {
# Remove lib/auto prefix and /*.* suffix
s{/[^/]+\.[^/]+$}{};
- } elsif (s{^ext/}{}) {
+ } elsif (s{^$ext_dirs_re/}{}) {
# Remove ext/ prefix and /pm_to_blib suffix
s{/pm_to_blib$}{};
# Targets are given as files on disk, but the extension spec is still
my $makecmd = shift @pass_through; # Should be something like MAKE=make
unshift @pass_through, 'PERL_CORE=1';
-my @dirs = @{$opts{dir} || ['ext', 'cpan']};
+my @dirs = @{$opts{dir} || \@ext_dirs};
my $target = $opts{target}[0];
$target = 'all' unless defined $target;
(my $ext = getcwd()) =~ s{/}{\\}g;
FindExt::scan_ext($ext);
FindExt::set_static_extensions(split ' ', $Config{static_ext});
+ chdir $build
+ or die "Couldn't chdir to '$build': $!"; # restore our start directory
+ }
- my @ext;
- push @ext, FindExt::static_ext() if $static;
- push @ext, FindExt::dynamic_ext() if $dynamic;
- push @ext, FindExt::nonxs_ext() if $nonxs;
- push @ext, 'DynaLoader' if $dynaloader;
+ my @ext;
+ push @ext, FindExt::static_ext() if $static;
+ push @ext, FindExt::dynamic_ext() if $dynamic;
+ push @ext, FindExt::nonxs_ext() if $nonxs;
+ push @ext, 'DynaLoader' if $dynaloader;
- foreach (sort @ext) {
- if (%incl and !exists $incl{$_}) {
- #warn "Skipping extension $ext\\$_, not in inclusion list\n";
- next;
- }
- if (exists $excl{$_}) {
- warn "Skipping extension $ext\\$_, not ported to current platform";
- next;
- }
- push @extspec, $_;
- if($_ eq 'DynaLoader') {
- # No, we don't know why nmake can't work out the dependency chain
- push @{$extra_passthrough{$_}}, 'DynaLoader.c';
- } elsif(FindExt::is_static($_)) {
- push @{$extra_passthrough{$_}}, 'LINKTYPE=static';
- }
+ foreach (sort @ext) {
+ if (%incl and !exists $incl{$_}) {
+ #warn "Skipping extension $_, not in inclusion list\n";
+ next;
+ }
+ if (exists $excl{$_}) {
+ warn "Skipping extension $_, not ported to current platform";
+ next;
+ }
+ push @extspec, $_;
+ if($_ eq 'DynaLoader' and $target !~ /clean$/) {
+ # No, we don't know why nmake can't work out the dependency chain
+ push @{$extra_passthrough{$_}}, 'DynaLoader.c';
+ } elsif(FindExt::is_static($_)) {
+ push @{$extra_passthrough{$_}}, 'LINKTYPE=static';
}
- chdir $build
- or die "Couldn't chdir to '$build': $!"; # restore our start directory
}
+
chdir '..'
- or die "Couldn't chdir to build directory: $!"; # now in the Perl build directory
+ or die "Couldn't chdir to build directory: $!"; # now in the Perl build
}
elsif ($is_VMS) {
$perl = $^X;
my $mname = $spec;
$mname =~ s!/!::!g;
my $ext_pathname;
- if (-d "ext/$spec") {
+ if (-d "ext/$spec"
+ # Temporary hack to cope with smokers that are not clearing directories:
+ && $spec =~ m!/!
+ ) {
# Old style ext/Data/Dumper/
$ext_pathname = "ext/$spec";
} else {
sub build_extension {
my ($ext_dir, $perl, $mname, $pass_through) = @_;
+ unless (chdir "$ext_dir") {
+ warn "Cannot cd to $ext_dir: $!";
+ return;
+ }
+
my $up = $ext_dir;
$up =~ s![^/]+!..!g;
# $lib_dir must be last, as we're copying files into it, and in a parallel
# make there's a race condition if one process tries to open a module that
# another process has half-written.
- $ENV{PERL5LIB}
- = join $Config{path_sep}, (map {"$up/$_"} @toolchain), $lib_dir;
+ my @new_inc = ((map {"$up/$_"} @toolchain), $lib_dir);
+ if ($is_Win32) {
+ @new_inc = map {File::Spec::Functions::rel2abs($_)} @new_inc;
+ }
+ $ENV{PERL5LIB} = join $Config{path_sep}, @new_inc;
$ENV{PERL_CORE} = 1;
- unless (chdir "$ext_dir") {
- warn "Cannot cd to $ext_dir: $!";
- return;
- }
my $makefile;
if ($is_VMS) {
$makefile = 'descrip.mms';
unless ($fromname) {
die "For $mname tried @locations in in $ext_dir but can't find source";
}
+ my $pod_name;
+ ($pod_name = $fromname) =~ s/\.pm\z/.pod/;
+ $pod_name = $fromname unless -e $pod_name;
open my $fh, '>', 'Makefile.PL'
or die "Can't open Makefile.PL for writing: $!";
print $fh <<"EOM";
WriteMakefile(
NAME => '$mname',
VERSION_FROM => '$fromname',
- ABSTRACT_FROM => '$fromname',
+ ABSTRACT_FROM => '$pod_name',
realclean => {FILES => 'Makefile.PL'},
);