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 )