Alien-Base-ModuleBuild
view release on metacpan or search on metacpan
lib/Alien/Base/ModuleBuild/FAQ.pod view on Meta::CPAN
use My::ModuleBuild;
My::ModuleBuild->new(
...
alien_provides_cflags => '-I/usr/include/foo',
alien_provides_libs => '-L/usr/lib/foo -lfoo',
...
);
Note that it is frequently sufficient to provide C<alien_provides_libs> and the appropriate C<-l> flag.
These flags will be used in the event that the system package can be found. It is a good idea to verify
that these flags do indeed work in C<alien_check_installed_version> above.
=back
For a fully implemented example, see L<Alien::Libbz2>.
=head2 How do I test my package once it is built (before it is installed)?
There are many ways to test Alien modules before (or after) they are installed, but instead
of rolling your own, consider using L<Test::Alien> which is light on dependencies and will
lib/Alien/Base/ModuleBuild/File.pm view on Meta::CPAN
if (defined $self->{sha1} || defined $self->{sha256}) {
unless (eval { require Digest::SHA }) {
warn "sha1 or sha256 sums are specified but cannot be checked since Digest::SHA is not installed";
require Alien::Base::ModuleBuild;
return undef if Alien::Base::ModuleBuild->alien_download_rule =~ /digest/;
return $filename;
}
eval { require Digest::SHA } or return $filename;
## verify that the SHA-1 and/or SHA-256 sums match if provided
if (defined $self->{sha1}) {
my $sha = Digest::SHA->new(1);
$sha->addfile($filename);
unless ($sha->hexdigest eq $self->{sha1}) {
carp "SHA-1 of downloaded $filename is ", $sha->hexdigest,
" Expected: ", $self->{sha1};
return undef;
}
}
if (defined $self->{sha256}) {
lib/Alien/Base/ModuleBuild/Repository/HTTP.pm view on Meta::CPAN
$module .= '.pm';
eval { require $module; 1 }
or croak "Could not load protocol_class '$self->{protocol_class}': $@";
my %args;
if($self->{protocol_class}->isa('HTTP::Tiny'))
{
$args{agent} = "Alien-Base-ModuleBuild/HTTP::Tiny/@{[ $Alien::Base::ModuleBuild::VERSION || 'dev' ]}";
require Alien::Base::ModuleBuild;
$args{verify_SSL} = 1 if Alien::Base::ModuleBuild->alien_download_rule =~ /encrypt/;
}
elsif($self->{protocol_class}->isa('LWP::UserAgent'))
{
$args{agent} = "Alien-Base-ModuleBuild/LWP::UserAgent/@{[ $Alien::Base::ModuleBuild::VERSION || 'dev' ]}";
# Note this is the default for recent LWP
$args{ssl_opts} = { verify_hostname => 1 } if Alien::Base::ModuleBuild->alien_download_rule =~ /encrypt/;
}
else
{
die "unsupported protocol class: @{[ $self->{protocol_class} ]}";
}
my $http = $self->{protocol_class}->new(%args);
$self->{connection} = $http;
t/alien_base_modulebuild_repository_http.t view on Meta::CPAN
T(),
);
is(
Alien::Base::ModuleBuild::Repository::HTTP->new( protocol => 'http', exact_filename => 'http://foo' )->is_secure_fetch,
F(),
);
};
subtest 'verify tls' => sub {
local $ENV{ALIEN_DOWNLOAD_RULE};
delete $ENV{ALIEN_DOWNLOAD_RULE};
subtest 'HTTP::Tiny' => sub {
my $new_args;
my $mock = mock 'HTTP::Tiny' => (
around => [
t/alien_base_modulebuild_repository_http.t view on Meta::CPAN
$ENV{ALIEN_DOWNLOAD_RULE} = 'digest_or_encrypt';
$new_args = {};
Alien::Base::ModuleBuild::Repository::HTTP->new->connection;
is(
$new_args,
hash {
field agent => match qr/Alien-Base-ModuleBuild\/HTTP::Tiny\//;
field verify_SSL => 1;
end;
},
'digest_or_encrypt',
);
};
subtest 'LWP' => sub {
skip_all 'subtest requires LWP::UserAgent' unless eval { require LWP::UserAgent; 1 };
t/alien_base_modulebuild_repository_http.t view on Meta::CPAN
$ENV{ALIEN_DOWNLOAD_RULE} = 'digest_or_encrypt';
$new_args = {};
Alien::Base::ModuleBuild::Repository::HTTP->new( protocol_class => 'LWP::UserAgent' )->connection;
is(
$new_args,
hash {
field agent => match qr/Alien-Base-ModuleBuild\/LWP::UserAgent\//;
field ssl_opts => { verify_hostname => 1 };
end;
},
'digest_or_encrypt',
);
};
};
my $index_path = path('corpus/alien_base_modulebuild_repository_http/index.html')->absolute->stringify;
( run in 0.482 second using v1.01-cache-2.11-cpan-5467b0d2c73 )