Alien-Build
view release on metacpan or search on metacpan
lib/Alien/Build.pm view on Meta::CPAN
{
$nick_name = 'extract';
my $extract = $self->install_prop->{extract};
return $extract if defined $extract && -d $extract;
}
my $tmp;
local $CWD;
my $ret;
$self->_call_hook({
before => sub {
# called build instead of extract, because this
# will be used for the build step, and technically
# extract is a substage of build anyway.
$tmp = Alien::Build::TempDir->new($self, $nick_name);
$CWD = "$tmp";
},
verify => sub {
my $path = '.';
if($self->meta_prop->{out_of_source} && $self->install_prop->{extract})
{
$path = $self->install_prop->{extract};
}
my @list = grep { $_->basename !~ /^\./ && $_->basename ne 'pax_global_header' } _path($path)->children;
my $count = scalar @list;
if($count == 0)
{
die "no files extracted";
}
elsif($count == 1 && -d $list[0])
{
$ret = $list[0]->absolute->stringify;
}
else
{
$ret = "$tmp";
}
},
after => sub {
$CWD = $self->root;
},
}, 'extract', $archive);
$self->install_prop->{extract} ||= $ret;
$ret ? $ret : ();
}
sub build
{
my($self) = @_;
# save the evironment, in case some plugins decide
# to alter it. Or us! See just a few lines below.
local %ENV = %ENV;
my $stage = _path($self->install_prop->{stage});
$stage->mkpath;
my $tmp;
if($self->install_type eq 'share')
{
foreach my $suffix ('', '_ffi')
{
local $CWD;
delete $ENV{DESTDIR} unless $self->meta_prop->{destdir};
my %env_meta = %{ $self->meta_prop ->{env} || {} };
my %env_inst = %{ $self->install_prop->{env} || {} };
if($self->meta_prop->{env_interpolate})
{
foreach my $key (keys %env_meta)
{
$env_meta{$key} = $self->meta->interpolator->interpolate($env_meta{$key}, $self);
}
}
%ENV = (%ENV, %env_meta);
%ENV = (%ENV, %env_inst);
my $destdir;
$self->_call_hook(
{
before => sub {
if($self->meta_prop->{out_of_source})
{
$self->extract;
$CWD = $tmp = Alien::Build::TempDir->new($self, 'build');
}
else
{
$CWD = $tmp = $self->extract;
}
if($self->meta_prop->{destdir})
{
$destdir = Alien::Build::TempDir->new($self, 'destdir');
$ENV{DESTDIR} = "$destdir";
}
$self->_call_hook({ all => 1 }, "patch${suffix}");
},
after => sub {
$destdir = "$destdir" if $destdir;
},
}, "build${suffix}");
$self->install_prop->{"_ab_build@{[ $suffix || '_share' ]}"} = "$CWD";
$self->_call_hook("gather@{[ $suffix || '_share' ]}");
}
}
( run in 0.817 second using v1.01-cache-2.11-cpan-d7f47b0818f )