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	'INSTALLDIRS'	=> ($] >= 5.010 and $] < 5.011) ? 'perl' : 'site',
83	@extra,
84);
85
86my $MMversion = $ExtUtils::MakeMaker::VERSION || '0.00_00';
87$attr{NO_META} = 1 if $MMversion ge '6.10_03';
88
89WriteMakefile(%attr);
90