Workaround for VAX compiler optimizer bug in Digest::SHA.
authorCraig A. Berry <craigberry@mac.com>
Sat, 27 Oct 2012 18:23:46 +0000 (13:23 -0500)
committerCraig A. Berry <craigberry@mac.com>
Sat, 27 Oct 2012 18:23:46 +0000 (13:23 -0500)
This was [perl #85932] and has been forwarded upstream as
[rt.cpan.org #80157].  The code is a near-verbatim copy of how
the same problem has been solved in Digest::MD5 since 2001.

After this change, the core build is now working again (slowly!)
on OpenVMS VAX.

cpan/Digest-SHA/Makefile.PL
cpan/Digest-SHA/lib/Digest/SHA.pm

index 2d2ecd5..e9f4986 100644 (file)
@@ -3,7 +3,7 @@ require 5.003000;
 use strict;
 use ExtUtils::MakeMaker;
 use Getopt::Std;
-use Config;
+use Config qw(%Config);
 
 my $PM = 'lib/Digest/SHA.pm';
 
@@ -23,9 +23,20 @@ push(@defines, '-DNO_SHA_384_512')  if $opts{'x'};
 if ($Config{archname} =~ /^i[3456]86/) {
        push(@defines, '-DSHA_STO_CLASS=static') unless $opts{'t'};
 }
-
 my $define = join(' ', @defines);
 
+       # Workaround for DEC compiler bug, adopted from Digest::MD5
+
+my @extra = ();
+if ($^O eq 'VMS') {
+       if (defined($Config{ccname})) {
+               if (grep(/VMS_VAX/, @INC) && ($Config{ccname} eq 'DEC')) {
+                       # VAX compiler optimizer even up to v6.4 gets stuck
+                       push(@extra, OPTIMIZE => "/Optimize=(NODISJOINT)");
+               }
+       }
+}
+
 my %att = (
        'NAME'          => 'Digest::SHA',
        'VERSION_FROM'  => $PM,
@@ -34,6 +45,7 @@ my %att = (
        'INC'           => '-I.',
        'EXE_FILES'     => [ 'shasum' ],
        'INSTALLDIRS'   => ($] >= 5.010 and $] < 5.011) ? 'perl' : 'site',
+       @extra,
 );
 
 my $MMversion = $ExtUtils::MakeMaker::VERSION || 0;
index cf1cb66..4b36aca 100644 (file)
@@ -7,7 +7,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 use Fcntl;
 use integer;
 
-$VERSION = '5.72';
+$VERSION = '5.72_01';
 
 require Exporter;
 require DynaLoader;