# $Id: Makefile.PL,v 1.25 2003/12/14 05:39:29 autarch Exp $ use ExtUtils::MakeMaker qw( prompt WriteMakefile ); use strict; use 5.0006; my $is_sdk = 0; for my $arg (@ARGV) { $is_sdk = 1, last if $arg eq '--sdk'; } my %BASE_PREREQS = ( 1 => { 'String::CRC32' => '1.2', 'Math::GMP' => '1.04', 'Digest::MD5' => 0, 'IO::Socket' => 0, 'Scalar::Util' => 0, }, 2 => { 'Digest::MD5' => 0, 'Digest::SHA1' => 0, 'Digest::HMAC_MD5' => 0, 'Digest::HMAC_SHA1' => 0, 'Crypt::DSA' => '0.11', 'Crypt::DH' => '0.01', 'Math::Pari' => '2.001804', 'MIME::Base64' => 0, 'Convert::PEM' => '0.05', 'IO::Socket' => 0, }, ); for my $i (1..2) { for my $mod (keys %{ $BASE_PREREQS{$i} }) { $BASE_PREREQS{3}{$mod} = $BASE_PREREQS{$i}{$mod}; } } my %prereq; my @cryptmod = ( [ 'IDEA', 'Crypt::IDEA' ], [ 'DES', 'Crypt::DES' ], [ 'DES3', 'Crypt::DES' ], [ 'Blowfish', 'Crypt::Blowfish' ], [ 'RC4', '' ], ); if ($is_sdk) { for my $mod (keys %{ $BASE_PREREQS{sdk} }) { $prereq{$mod} = $BASE_PREREQS{sdk}{$mod}; } for my $list (\@cryptmod) { for my $ref (@$list) { if ($ref->[1]) { $prereq{$ref->[1]} = $ref->[2] ? $ref->[2] : 0; } } } } else { print<[0] <=> $b->[0] } @cryptmod) { printf " [%d] %s\n", $i++, $ciph->[0]; } my $c = prompt("\nEnter your choices, separated by spaces:", 1); print "\n"; for my $id (split /\s+/, $c) { next unless $cryptmod[$id-1]->[1]; $prereq{ $cryptmod[$id-1]->[1] } = '0'; } print "\nChecking for required modules\n\n"; my(%todo, $missing); while (my($k, $v) = each %prereq) { unless (check_module($k, $v, \$missing)) { $todo{$k} = $v; } } use Cwd; my $cwd = cwd(); if (%todo) { print <install($k); delete $prereq{$k}; chdir $cwd or die "Can't chdir back to $cwd: $!"; } } } print "\nChecking for optional modules\n\n"; unless (check_module('Digest::BubbleBabble', 0.01, \$missing)) { print<install('Digest::BubbleBabble'); chdir $cwd or die "Can't chdir back to $cwd: $!"; } print "\n"; } unless (check_module('Crypt::RSA', 1.37, \$missing)) { print<install('Crypt::RSA'); chdir $cwd or die "Can't chdir back to $cwd: $!"; } print "\n"; } print "\n"; } WriteMakefile( NAME => 'Net::SSH::Perl', DISTNAME => 'Net-SSH-Perl', VERSION_FROM => 'lib/Net/SSH/Perl.pm', PREREQ_PM => \%prereq, AUTHOR => 'Dave Rolsky ', ABSTRACT => 'Perl client Interface to SSH', ); sub read_yes_or_no { my($prompt, $def) = @_; my $ans = prompt($prompt, $def); $ans =~ /^y/i; } sub check_module { my($name, $ver, $missing) = @_; print substr("$name ............................", 0, 30); my $ok = have_mod($name, $ver); $$missing++ unless $ok; print $ok ? "ok\n" : "** FAILED **\n"; $ok; } sub have_mod { my($name, $ver) = @_; eval("use $name" . ($ver ? " $ver;" : ";")); !$@; }