Alien-Build
view release on metacpan or search on metacpan
lib/alienfile.pm view on Meta::CPAN
package alienfile;
use strict;
use warnings;
use 5.008004;
use Alien::Build;
use Exporter ();
use Path::Tiny ();
use Carp ();
sub _path { Path::Tiny::path(@_) }
# ABSTRACT: Specification for defining an external dependency for CPAN
our $VERSION = '2.84'; # VERSION
our @EXPORT = qw( requires on plugin probe configure share sys download fetch decode prefer extract patch patch_ffi build build_ffi gather gather_ffi meta_prop ffi log test start_url before after digest );
sub requires
{
my($module, $version) = @_;
$version ||= 0;
my $caller = caller;
my $meta = $caller->meta;
$meta->add_requires($meta->{phase}, $module, $version);
();
}
sub plugin
{
my($name, @args) = @_;
my $caller = caller;
$caller->meta->apply_plugin($name, @args);
return;
}
sub probe
{
my($instr) = @_;
my $caller = caller;
if(my $phase = $caller->meta->{phase})
{
Carp::croak "probe must not be in a $phase block" if $phase ne 'any';
}
$caller->meta->register_hook(probe => $instr);
return;
}
sub _phase
{
my($code, $phase) = @_;
my $caller = caller(1);
my $meta = $caller->meta;
local $meta->{phase} = $phase;
$code->();
return;
}
sub configure (&)
{
_phase($_[0], 'configure');
}
sub sys (&)
{
_phase($_[0], 'system');
}
sub share (&)
{
_phase($_[0], 'share');
}
sub _in_phase
{
my($phase) = @_;
my $caller = caller(1);
my(undef, undef, undef, $sub) = caller(1);
my $meta = $caller->meta;
$sub =~ s/^.*:://;
Carp::croak "$sub must be in a $phase block"
unless $meta->{phase} eq $phase;
}
sub start_url
{
my($url) = @_;
_in_phase 'share';
my $caller = caller;
my $meta = $caller->meta;
$meta->prop->{start_url} = $url;
$meta->add_requires('configure' => 'Alien::Build' => '1.19');
return;
}
sub digest
{
my($algo, $digest) = @_;
my $caller = caller;
$caller->meta->apply_plugin('Digest', [$algo, $digest]);
return;
}
sub download
{
my($instr) = @_;
_in_phase 'share';
my $caller = caller;
$caller->meta->register_hook(download => $instr);
return;
}
sub fetch
{
my($instr) = @_;
_in_phase 'share';
my $caller = caller;
$caller->meta->register_hook(fetch => $instr);
return;
}
sub decode
{
my($instr) = @_;
_in_phase 'share';
my $caller = caller;
$caller->meta->register_hook(decode => $instr);
return;
}
sub prefer
{
( run in 0.607 second using v1.01-cache-2.11-cpan-817d5f8af8b )