Alien-Build

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


1.60      2019-03-01 03:16:23 -0500
  - Documentation improvemens.  (gh#50, gh#84).

1.59_01   2019-02-27 21:40:24 -0500
  - Fix test fail for download negotiation plugin introduced in 1.58_01
    which was expressed on systems without curl installed.

1.58_01   2019-02-27 12:50:20 -0500
  - Prefer Fetch::CurlCommand over Fetch::HTTPTiny for https when:
     * Net::SSLeay and IO::Socket::SSL are not installed
     * AND curl is installed
     * AND curl supports https
    This makes AB more reliable on platforms like OS X when openssl
    is broken without a third party package system like homebrew,
    and on older Perls like 5.8.x where Net::SSLeay frequently does
    not install or pass tests.
    The existing behavior of prefer Fetch::HTTPTiny when:
     * Net::SSLeay and IO::Socket::SSL are already installed
     * OR the URL is http
     * OR curl is not already installed
    is still in effect. (gh#93, gh#94)

1.57_01   2019-02-26 08:52:34 -0500
  - Test unzip command before blindly using it (tests were already
    being made for tarballs) (gh#90)

1.56_01   2019-02-24 14:09:23 -0500
  - Prefer Alien::unzip over Archive::Zip.  The latter turns out to be broken

dist.ini  view on Meta::CPAN

diag = +LWP
diag = +File::Listing
diag = +File::Listing::Ftpcopy
diag = +Alien::Base::ModuleBuild
diag = +IO::Zlib
diag = +IO::Uncompress::Bunzip2
diag = +IO::Compress::Bzip2
diag = +Alien::xz
diag = +Alien::Libbz2
diag = +Alien::gzip
diag = +IO::Socket::SSL
diag = +Net::SSLeay
diag = +LWP::Protocol::https
diag = +Alien::cmake3
diag = +Readonly
diag = +Env::ShellWords
diag = +Mojo::DOM58
diag = +Mojolicious
diag = +Archive::Zip

[GatherFile]

dist.ini  view on Meta::CPAN

remove = Plack
remove = URI::Escape

; other optional / dynamic thingies
remove = Archive::Tar
remove = Archive::Zip
remove = Alien::gmake
remove = Alien::cmake3
remove = Devel::Hide
remove = Net::SSLeay
remove = IO::Socket::SSL
remove = Env::ShellWords
remove = Readonly

[Prereqs]
Capture::Tiny       = 0.17
Path::Tiny          = 0.077
FFI::CheckLib       = 0.11
Text::ParseWords    = 3.26
ExtUtils::ParseXS   = 3.30
ExtUtils::MakeMaker = 6.64

lib/Alien/Build/Manual/FAQ.pod  view on Meta::CPAN


This is usually because your XS or Alien tries to use dynamic libraries instead of static ones.
Please consult the section about dynamic vs. static libraries in L<Alien::Build::Manual::AlienAuthor>.
The TL;DR is that L<Alien::Build::Plugin::Gather::IsolateDynamic> might help.
If you are the Alien author and the package you are alienizing doesn't have a static option you can
use L<Alien::Role::Dino>, but please note the extended set of caveats!

=head2 599 Internal Exception errors downloading packages from the internet

 Alien::Build::Plugin::Fetch::HTTPTiny> 599 Internal Exception fetching http://dist.libuv.org/dist/v1.15.0
 Alien::Build::Plugin::Fetch::HTTPTiny> exception: IO::Socket::SSL 1.42 must be installed for https support
 Alien::Build::Plugin::Fetch::HTTPTiny> exception: Net::SSLeay 1.49 must be installed for https support
 Alien::Build::Plugin::Fetch::HTTPTiny> An attempt at a SSL URL https was made, but your HTTP::Tiny does not appear to be able to use https.
 Alien::Build::Plugin::Fetch::HTTPTiny> Please see: https://metacpan.org/pod/Alien::Build::Manual::FAQ#599-Internal-Exception-errors-downloading-packages-from-the-internet
 error fetching http://dist.libuv.org/dist/v1.15.0: 599 Internal Exception at /Users/ollisg/.perlbrew/libs/perl-5.26.0@test1/lib/perl5/Alien/Build/Plugin/Fetch/HTTPTiny.pm line 68.

(Older versions of L<Alien::Build> produced a less verbose more confusing version of this diagnostic).

TL;DR, instead of this:

 share {

lib/Alien/Build/Manual/FAQ.pod  view on Meta::CPAN


 share {
   start_url => 'https://example.org/dist';
 };

If the website is going to redirect to a secure URL anyway.

The "599 Internal Exception" indicates an "internal" exception from L<HTTP::Tiny> and is not a real
HTTP status code or error.  This could mean a number of different problems, but most frequently
indicates that a SSL request was made without the required modules (L<Net::SSLeay> and
L<IO::Socket::SSL>).  Normally the L<Alien::Build::Plugin::Download::Negotiate>
and L<Alien::Build::Plugin::Fetch::HTTPTiny> will make sure that the appropriate modules are added
to your prerequisites for you if you specify a C<https> URL.  Some websites allow an initial request
from C<http> but then redirect to C<https>.  If you can it is better to specify C<https>, if you
cannot, then you can instead use the C<ssl> property on either of those two plugins.

=head2 Does not detect system package even though it is installed

This could just be because the alien requires a more recent package that what is provided by your
operating system.

lib/Alien/Build/Util.pm  view on Meta::CPAN

sub _perl_config
{
  my($key) = @_;
  $Config{$key};
}

sub _ssl_reqs
{
  return {
    'Net::SSLeay' => '1.49',
    'IO::Socket::SSL' => '1.56',
  };
}

sub _has_ssl
{
  my %reqs = %{ _ssl_reqs() };
  eval {
    require Net::SSLeay;
    die "need Net::SSLeay $reqs{'Net::SSLeay'}" unless Net::SSLeay->VERSION($reqs{'Net::SSLeay'});
    require IO::Socket::SSL;
    die "need IO::Socket::SSL $reqs{'IO::Socket::SSL'}" unless IO::Socket::SSL->VERSION($reqs{'IO::Socket::SSL'});
  };
  $@ eq '';
}

1;

__END__

=pod

t/00_diag.t  view on Meta::CPAN

  ExtUtils::ParseXS
  FFI::CheckLib
  FFI::Platypus
  File::Listing
  File::Listing::Ftpcopy
  File::Which
  File::chdir
  HTML::Parser
  HTTP::Tiny
  IO::Compress::Bzip2
  IO::Socket::SSL
  IO::Uncompress::Bunzip2
  IO::Zlib
  JSON::PP
  LWP
  LWP::Protocol::https
  List::Util
  Mojo::DOM58
  Mojolicious
  Net::FTP
  Net::SSLeay

t/alien_build_plugin_fetch_httptiny.t  view on Meta::CPAN

  my $meta = $build->meta;

  $plugin->init($meta);

  is(
    $build->requires('share'),
    hash {
      field 'HTTP::Tiny'      => '0.044';
      field 'URI'             => '0';
      field 'Net::SSLeay'     => DNE();
      field 'IO::Socket::SSL' => DNE();
      etc;
    },
  );

  note _dump($build->requires('share'));

};

subtest 'updates requires ssl' => sub {

t/alien_build_plugin_fetch_httptiny.t  view on Meta::CPAN

  my $meta = $build->meta;

  $plugin->init($meta);

  is(
    $build->requires('share'),
    hash {
      field 'HTTP::Tiny'      => '0.044';
      field 'URI'             => '0';
      field 'Net::SSLeay'     => T();
      field 'IO::Socket::SSL' => T();
      etc;
    },
  );

  note _dump($build->requires('share'));

};

subtest 'use start_url' => sub {

t/alien_build_util.t  view on Meta::CPAN

  is $@, '';

};

subtest '_ssl_reqs' => sub {

  is(
    _ssl_reqs,
    hash {
      field 'Net::SSLeay' => D();
      field 'IO::Socket::SSL' => D();
      etc;
    },
  );

  note _dump(_ssl_reqs);

};

subtest '_has_ssl' => sub {



( run in 0.370 second using v1.01-cache-2.11-cpan-fd5d4e115d8 )