1require 5.003000; 2 3use strict; 4use ExtUtils::MakeMaker; 5use Getopt::Std; 6use Config qw(%Config); 7 8use vars qw($opt_t $opt_w $opt_x); 9 10my $PM = 'lib/Digest/SHA.pm'; 11my $SHASUM = 'shasum'; 12 13 # 'use warnings' if possible, but stay portable 14 15my($use_warnings, @EDITs); 16my $warn_1 = 'BEGIN { $^W = 1 }'; 17my $warn_0 = 'BEGIN { $^W = 0 }'; 18{ 19 eval "require warnings; import warnings"; 20 $use_warnings = $@ ? 0 : 1; 21 22 local(@ARGV) = ($PM, $SHASUM); 23 while (<>) { 24 if ( 25 (!$use_warnings && /^(use|no) warnings\b/) || 26 ( $use_warnings && /^\Q$warn_1\E # use warnings\b/) || 27 ( $use_warnings && /^\Q$warn_0\E # no warnings\b/)) { 28 push @EDITs, $ARGV; 29 close ARGV; 30 } 31 } 32} 33 34if (@EDITs) { 35 local($^I, @ARGV) = ('', @EDITs); 36 while (<>) { 37 if ($use_warnings) { 38 s/^\Q$warn_1\E # (.*)$/$1/; 39 s/^\Q$warn_0\E # (.*)$/$1/; 40 } 41 else { 42 s/^(use warnings\b.*)$/$warn_1 # $1/; 43 s/^(no warnings\b.*)$/$warn_0 # $1/; 44 } 45 print; 46 } 47} 48 49getopts('twx'); # -t is no longer used, but allow it anyway 50 51my @defines; 52push(@defines, '-DNO_SHA_384_512') if $opt_x; 53my $define = join(' ', @defines); 54 55 # Workaround for DEC compiler bug, adapted from Digest::MD5 56 57my @extra = (); 58if ($^O eq 'VMS') { 59 if (defined($Config{ccname})) { 60 if (grep(/VMS_VAX/, @INC) && ($Config{ccname} eq 'DEC')) { 61 # VAX optimizer, even up to v6.4, gets stuck 62 push(@extra, OPTIMIZE => "/Optimize=(NODISJOINT)"); 63 } 64 } 65} 66 67 # Enhance performance on Intel when using gcc 68 69if ($Config{archname} =~ /^i[3456]86/ && $Config{ccname} eq 'gcc') { 70 push(@extra, OPTIMIZE => '-O1 -fomit-frame-pointer'); 71} 72 73my $fussy = '-Wall -Wextra -Wconversion -Wcast-align -Wpointer-arith '; 74push(@extra, CCFLAGS => $fussy . $Config{ccflags}) if $opt_w; 75 76my %attr = ( 77 'NAME' => 'Digest::SHA', 78 'VERSION_FROM' => $PM, 79 'LIBS' => [''], 80 'DEFINE' => $define, 81 'INC' => '-I.', 82 'EXE_FILES' => [ $SHASUM ], 83 'INSTALLDIRS' => ($] >= 5.010 and $] < 5.011) ? 'perl' : 'site', 84 @extra, 85); 86 87my $MMversion = $ExtUtils::MakeMaker::VERSION || '0.00_00'; 88$attr{NO_META} = 1 if $MMversion ge '6.10_03'; 89 90WriteMakefile(%attr); 91