The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use ExtUtils::MakeMaker;
use lib 'inc'; # load our bundled version of Devel::CheckLib
use Devel::CheckLib;

my %bigint_preq;

if ( check_lib(lib => 'gmp', header => 'gmp.h') ) {
  # GMP found.  Life is *good*.
  %bigint_preq = (
                      'Math::BigInt::GMP'      => 0,
                      'Math::Prime::Util::GMP' => 0,
                 );
} elsif ( check_lib(lib => 'pari', header => 'pari/pari.h') ) {
  # Pari found.  Slower than GMP in this application, but still adequate.
  %bigint_preq = (
                      'Math::BigInt::Pari'     => 0,
                 );
} else {
  # Yech, no big int libraries found.
  print <<EO_BIGINT;
 

 **********************************************************
 *
 * Building without GMP or Pari support.
 *
 * Operations will be very slow.
 *
 * Strongly consider installing GMP and Math::BigInt::GMP.
 *
 **********************************************************
EO_BIGINT
}

WriteMakefile1(
    NAME         => 'Alt::Crypt::RSA::BigInt',
    ABSTRACT     => 'RSA public-key cryptosystem, using Math::BigInt',
    VERSION_FROM => 'lib/Alt/Crypt/RSA/BigInt.pm',
    LICENSE      => 'perl',
    AUTHOR       => 'Dana A Jacobsen <dana@acm.org>',

    BUILD_REQUIRES=>{
                      'Test::More'       => '0.45',
                      'Benchmark'        => 0,
                      'MIME::Base64'     => 0,
                    },
    PREREQ_PM    => {
                      'Math::BigInt'           => '1.78', # try => backend
                      'Math::Prime::Util'      => '0.64', # built in csprng
                      'Carp'                   => 0,
                      'Exporter'               => 0,
                      'Crypt::CBC'             => '2.17',
                      'Crypt::Blowfish'        => 0,
                      'Data::Dumper'           => 0,
                      'Tie::EncryptedHash'     => 0,
                      'Convert::ASCII::Armour' => 0,
                      'Sort::Versions'         => 0,
                      'Digest::SHA'            => 0,
                      'Digest::MD5'            => 0,
                      'Digest::MD2'            => 0,
                      'Class::Loader'          => 0,
                      'Data::Buffer'           => 0,
                      %bigint_preq,
                    },

    # This should be worked on.  For now, no 5.6.x.
    MIN_PERL_VERSION => 5.008,
    META_MERGE   => {
                      'meta-spec'  => { version => '2' },
                      dynamic_config => 1,  # Check for GMP on install
                      no_index   => { directory => [qw(lib/Crypt)] },
                      resources  => {
                         homepage   => 'https://github.com/danaj/Alt-Crypt-RSA-BigInt',
                         repository => 'git://github.com/danaj/Alt-Crypt-RSA-BigInt.git',
                       },
                      recommends => {
                        'Crypt::RIPEMD160' => 0.05,
                      },
                    },
);

sub WriteMakefile1 {   # Cribbed from eumm-upgrade by Alexandr Ciornii
  my %params = @_;
  my $eumm_version = $ExtUtils::MakeMaker::VERSION;
  $eumm_version = eval $eumm_version;

  if ($params{TEST_REQUIRES} and $eumm_version < 6.6303) {
      $params{BUILD_REQUIRES}={ %{$params{BUILD_REQUIRES} || {}} , %{$params{TEST_REQUIRES}} };
      delete $params{TEST_REQUIRES};
  }
  if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {
      #EUMM 6.5502 has problems with BUILD_REQUIRES
      $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };
      delete $params{BUILD_REQUIRES};
  }
  delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
  delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;
  delete $params{META_MERGE} if $eumm_version < 6.46;
  delete $params{META_ADD} if $eumm_version < 6.46;
  delete $params{LICENSE} if $eumm_version < 6.31;
  delete $params{AUTHOR} if $] < 5.005;
  delete $params{ABSTRACT_FROM} if $] < 5.005;
  delete $params{BINARY_LOCATION} if $] < 5.005;

  WriteMakefile(%params);
}