Rafael Garcia-Suarez wrote:
> Thanks, patches applied as change #29509 and #29510.
> 
> Note that this also impacts those dual-lived modules:
> 
> * PathTools (BTW, any new maintainer yet?)
> * ExtUtils::MM
> 
> (Further patch in this thread applied as change #29511 -- impacts
> Storable.)

So that I understand what's going on here... the Win32:: functions have been 
removed from miniperl so determining the Windows version in miniperl has become 
more complex.  Ok, but I cringe a bit at the indirect way the new checks are 
written.  "If some DynaLoader function exists, then we can use a  Win32 
function.  Else, check some obscure environment variable to determine if its 
Win95 or Win32."

How about something more direct...

$IsWin95 = defined &Win32::IsWin95 ? Win32::IsWin95() : !defined 
$ENV{SYSTEMROOT};

The outwardly unrelated DynaLoader is completely removed from the equation, 
this better future proofs uses of Win32::, and the purpose of using SYSTEMROOT 
as a fallback is made plain.

This is what I'm patching into MakeMaker.

--- lib/ExtUtils/MM.pm  (revision 26404)
+++ lib/ExtUtils/MM.pm  (local)
@@ -43,12 +43,19 @@
     sub DESTROY {}
 }
 
+sub _is_win95 {
+    # miniperl might not have the Win32 functions available and we need
+    # to run in miniperl.
+    return defined &Win32::IsWin95 ? Win32::IsWin95() 
+                                   : ! defined $ENV{SYSTEMROOT}; 
+}
+
 my %Is = ();
 $Is{VMS}    = $^O eq 'VMS';
 $Is{OS2}    = $^O eq 'os2';
 $Is{MacOS}  = $^O eq 'MacOS';
 if( $^O eq 'MSWin32' ) {
-    Win32::IsWin95() ? $Is{Win95} = 1 : $Is{Win32} = 1;
+    _is_win95 ? $Is{Win95} = 1 : $Is{Win32} = 1;
 }
 $Is{UWIN}   = $^O =~ /^uwin(-nt)?$/;
 $Is{Cygwin} = $^O eq 'cygwin';


Also, is it necessary to say "use Win32" now?

Reply via email to