1require 5.003000;
2
3use strict;
4use ExtUtils::MakeMaker;
5use Getopt::Std;
6use Config qw(%Config);
7
8use vars qw($opt_w);
9
10my $PM = 'lib/Digest/SHA3.pm';
11my $SHA3SUM = 'sha3sum';
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, $SHA3SUM);
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('w');
50
51my @extra = ();
52
53	# Workaround for DEC compiler bug, adapted from Digest::MD5
54
55if ($^O eq 'VMS') {
56	if (defined($Config{ccname})) {
57		if (grep(/VMS_VAX/, @INC) && ($Config{ccname} eq 'DEC')) {
58			# VAX optimizer, even up to v6.4, gets stuck
59			push(@extra, OPTIMIZE => "/Optimize=(NODISJOINT)");
60		}
61	}
62}
63
64	# Enhance performance on Intel when using gcc
65
66if ($Config{archname} =~ /^i[3456]86/ && $Config{ccname} eq 'gcc') {
67	push(@extra, OPTIMIZE => '-O1 -fomit-frame-pointer');
68}
69
70my $fussy = '-Wall -Wextra -Wconversion -Wcast-align -Wpointer-arith ';
71push(@extra, CCFLAGS => $fussy . $Config{ccflags}) if $opt_w;
72
73my %attr = (
74	'NAME'		=> 'Digest::SHA3',
75	'VERSION_FROM'	=> $PM,
76	'LIBS'		=> [''],
77	'INC'		=> '-I.',
78	'EXE_FILES'	=> [ $SHA3SUM ],
79	@extra,
80);
81
82my $MMversion = $ExtUtils::MakeMaker::VERSION || '0.00_00';
83$attr{NO_META} = 1 if $MMversion ge '6.10_03';
84
85WriteMakefile(%attr);
86