Dist-Zilla-MintingProfile-AlienBuild
view release on metacpan or search on metacpan
lib/Alien/Build/Wizard/Detect.pm view on Meta::CPAN
use strict;
use warnings;
use 5.022;
package Alien::Build::Wizard::Detect 0.07 {
use Moose;
use Moose::Util::TypeConstraints;
use MooseX::StrictConstructor;
use Path::Tiny ();
use experimental qw( signatures postderef );
use namespace::autoclean;
use constant myURI => "@{[ __PACKAGE__ ]}::URI";
# ABSTRACT: Tarball detection class
subtype myURI, as 'URI';
coerce myURI, from 'Str', via {
require URI;
state $base ||= do {
require URI::file;
my $base = URI->new(URI::file->cwd);
$base->host("localhost");
$base;
};
URI->new_abs($_, $base);
};
has uri => (
is => 'ro',
isa => myURI,
required => 1,
coerce => 1,
);
has ua => (
is => 'ro',
isa => 'LWP::UserAgent',
lazy => 1,
default => sub {
require LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->env_proxy;
$ua;
},
);
has tarball => (
is => 'ro',
lazy => 1,
isa => 'ScalarRef[Str]',
init_arg => undef,
default => sub ($self) {
my $ua = $self->ua;
my $res = $ua->get($self->uri);
die $res->status_line
unless $res->is_success;
defined $res->decoded_content
? \$res->decoded_content
: \$res->content;
},
);
has file_list => (
is => 'ro',
isa => 'ArrayRef[Path::Tiny]',
lazy => 1,
init_arg => undef,
default => sub ($self) {
require Archive::Libarchive::Peek;
[map { Path::Tiny->new($_) } Archive::Libarchive::Peek->new( memory => $self->tarball )->files];
}
);
has build_type => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
init_arg => undef,
default => sub ($self) {
my %types;
foreach my $file ($self->file_list->@*)
{
$types{autoconf} = 1 if $file->basename eq 'configure';
$types{cmake} = 1 if $file->basename eq 'CMakeLists.txt';
$types{make} = 1 if $file->basename eq 'Makefile';
}
[sort keys %types];
},
);
has name => (
is => 'ro',
isa => 'Str',
lazy => 1,
init_arg => undef,
default => sub ($self) {
Path::Tiny->new($self->uri->path)->basename =~ s/[-\.].*$//r;
},
);
has pkg_config => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
init_arg => undef,
default => sub ($self) {
my %pc;
foreach my $file ($self->file_list->@*)
{
$pc{$1} = 1 if $file->basename =~ /^(.*)\.pc(\.in)?$/;
}
[sort keys %pc];
( run in 1.244 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )