Alien-Build
view release on metacpan or search on metacpan
lib/Test/Alien.pm view on Meta::CPAN
$message ||= 'ffi';
my $ok = 1;
my $skip;
my $ffi;
my @diag;
{
my $min = '0.12'; # the first CPAN release
$min = '0.15' if $opt->{ignore_not_found};
$min = '0.18' if $opt->{lang};
$min = '0.99' if defined $opt->{api} && $opt->{api} > 0;
unless(eval { require FFI::Platypus; FFI::Platypus->VERSION($min) })
{
$ok = 0;
$skip = "Test requires FFI::Platypus $min";
}
}
if($ok && $opt->{lang})
lib/Test/Alien.pm view on Meta::CPAN
{
push @diag, 'ffi_ok called without any aliens, you may want to call alien_ok';
}
if($ok)
{
$ffi = FFI::Platypus->new(
do {
my @args = (
lib => [map { $_->dynamic_libs } @aliens],
ignore_not_found => $opt->{ignore_not_found},
lang => $opt->{lang},
);
push @args, api => $opt->{api} if defined $opt->{api};
@args;
}
);
foreach my $symbol (@{ $opt->{symbols} || [] })
{
unless($ffi->find_symbol($symbol))
{
lib/Test/Alien.pm view on Meta::CPAN
Test that L<FFI::Platypus> works.
C<\%opt> is a hash reference with these keys (all optional):
=over 4
=item symbols
List references of symbols that must be found for the test to succeed.
=item ignore_not_found
Ignores symbols that aren't found. This affects functions accessed via
L<FFI::Platypus#attach> and L<FFI::Platypus#function> methods, and does
not influence the C<symbols> key above.
=item lang
Set the language. Used primarily for language specific native types.
=item api
t/test_alien.t view on Meta::CPAN
'empty ffi'
);
ffi_ok {}, 'min version test', with_subtest {
my($ffi) = @_;
my $version = $ffi->VERSION;
$version =~ s/_.*$//;
cmp_ok $version, '>=', 0.12;
};
ffi_ok { ignore_not_found => 1 }, 'ignore not found', with_subtest {
my($ffi) = @_;
my $version = $ffi->VERSION;
$version =~ s/_.*$//;
cmp_ok $version, '>=', 0.15;
eval { $ffi->attach( foo => [] => 'void') };
is $@, '';
is __PACKAGE__->can('foo'), F();
};
ffi_ok { lang => 'Fortran' }, 'lang', with_subtest {
( run in 0.914 second using v1.01-cache-2.11-cpan-cc502c75498 )