You need to investigate the ExtUtils::FakeConfig module to fool
MakeMaker into thinking that your perl was configured with VC8 rather
than VC6 (or else just hand-edit the "ccversion" value in your
Config_heavy.pl).
 
(There can also be problems compiling modules with VC8 for use in a perl
built with VC6. You'll *probably* get away with it, but to be *sure* you
either need to use VC6 for building modules, or build perl yourself
using VC8 first, or else use MinGW with your VC6-built ActivePerl: that
works because (unlike VC8) it uses the same CRT as VC6.)

________________________________

From: Michael Slass [mailto:[EMAIL PROTECTED] 
Sent: 22 January 2008 22:28
To: makemaker@perl.org
Subject: Microsoft mt (manifest tool) in MakeMaker



Hi:

 

I am writing to you in regard to a bug/feature in MakeMaker.

 

I'm using this version of MakeMaker:

6.42_01 Revision 41145

on WinXP

as installed with ActiveState perl v 5.1.10.1002

 

I am having a problem wherein MakeMaker does not correctly recognize the
version of the Microsoft C++ compiler that I'm using.  This leads
MakeMaker not to emit the call to the Microsoft Manifest Tool, mt.exe,
which would embed the DLL manifest in the dll.

 

The problem is in MM_Win32.pm @337

      if ($Config{ivsize} == 4 && $Config{cc} eq 'cl' and
$Config{ccversion} =~ /^(\d+)/ and $1 >= 14) 

    {

        push(@m,

          q{

      mt -nologo -manifest [EMAIL PROTECTED] -outputresource:$@;2 && del
[EMAIL PROTECTED]);

      }

    }

    push @m, '

      $(CHMOD) $(PERM_RWX) $@

 

 

$Config{ccversion} is returning the version of the compiler that my
perl.exe was built with, which for this ActiveState was v12.**.  But,
I'm compiling my module with v14 (VS 2005.NET), which requires the
embedded manifest.

 

I've tried a number of things in my Makefile to get the correct compiler
version number into $Config, including:

if ($Config{ccname} eq 'cl')

{

  print STDERR "confirming CL version\n";

  foreach (qx{$Config{ccname} /? 2>&1})

  {

    if (/Microsoft \(R\) \d\d-bit C\/C\+\+ Optimizing Compiler Version
((?:\d\.){2}\d+)/)

    {

      print STDERR "match: $1\n";

      my $obj = tied %Config::Config;

      $obj->{ccversion} = $1;

      $ExtUtils::MakeMaker::Config{ccversion} = $1;

      last;

    }

  }

}

 

But to no avail.  The mt.exe statement never gets written into the
generated makefile.  Short of making myself a one-off copy of
MM_Win32.pm, do you have any suggestions?

 

Thank you.

 

Mike Slass  |  Software Developer 

F5 Networks 

  P 206.272.6338 

 F 206.272.5856

www.f5.com <http://www.f5.com>  

                
 

 

 

<<image001.gif>>

Reply via email to