On Mon, 6 Oct 2003, Steve Hay wrote:Ah, right. That makes sense, because the Perl in C:\perl5 does not have LFS while the one in C:\perl does.
Hi,
During the course of testing mp1.29-rc1 I ran into a strange problem, probably Windows-specific, which I've seen before but never got to the bottom of.
I have Apache 1.3.28 installed in C:\apache and Perl 5.8.1 in C:\perl5. The latter has all the paths in it's Config.pm pointing to C:\perl5 subdirs, and I have C:\perl5\bin on the PATH (and no other Perl directories on the PATH).
I then extract the mp1 source archive into C:\Temp and run:
perl Makefile.PL APACHE_SRC=C:/apache EAPI nmake nmake test
Normally this works fine, but occasionally I get errors from "nmake". Under mp1.28 I sometimes get this at the start of the "msdev" command run by "nmake":
Compiling...
Apache.c
Apache.xs(1966) : error C2115: '=' : incompatible types
[...]
Error executing cl.exe.
mod_perl.so - 1 error(s), 1 warning(s)
NMAKE : fatal error U1077: 'msdev' : return code '0x1'
Hi Steve, This error is from an incompatibility with LARGEFILES support - on about line 1966 of Apache.xs, there's a statcache = r->finfo which is trying to relate two different things with LARGEFILES support on Win32. This is fixed in the cvs.
And it being fixed in cvs (and therefore in 1.29-rc1) explains the different behaviour below.
I think I've cracked it myself looking at those two files.
while under mp1.29-rc1 I got this at the end of the "msdev" command:
Linking... Creating library Release/mod_perl.lib and object Release/mod_perl.exp perl_util.obj : error LNK2001: unresolved external symbol _Perl_croak_nocontext [...] Release/mod_perl.so : fatal error LNK1120: 42 unresolved externals Error executing link.exe. mod_perl.so - 180 error(s), 1 warning(s) NMAKE : fatal error U1077: 'msdev' : return code '0xb4'
I've finally tracked down what triggers this behaviour (it's the same trigger in each case), but I can't explain why. If I have another Perl build installed in C:\perl then I get the above errors; if I haven't then I don't!
I suspect that problem is also related to the fact that the other Perl build that I sometimes have in C:\perl is a threaded Perl (a la ActivePerl) whereas the one in C:\perl5 is non-threaded, hence the error regarding "Perl_croak_nocontext" when the wrong Perl setup gets picked up. (Basically, I prefer the non-threaded Perl for my production work with mp1, but I also have a threaded Perl kicking around for mp2 testing.)
Presumably something from the C:\perl installation is being used (in preference to the C:\perl5 installation that should be being used) if it is present. Why does this happen? All I have to do is move C:\perl out of the way (say, to C:\perl.mp2) and it all works fine again.
Also, why is there a difference between 1.28 and 1.29-rc1 in the way in which it breaks? Is that related to this change in the ChangeLog?:
For Win32, keep drive letters in mod_perl.dsp to fix bug, reported by DH <[EMAIL PROTECTED]>, when compiling mod_perl in cases where Apache and Perl are on different drives [Randy Kobes].
It's not an urgent problem for me since I have a workaround, but mp's
build process really shouldn't be picking up the "wrong" Perl. All the
other CPAN modules I'm using (150+ !) build fine with the other Perl
sitting in C:\perl, so why shouldn't mod_perl?
It's something that should be fixed ... It sounds like there's something askew in src\modules\win32\mod_perl.dsp; could you send me (privately) this file, and also src\modules\win32\mod_perl.dsp.orig? Thanks.
The original .dsp file has two lines like this:
ADD CPP ... /I "\Perl\lib\CORE" ...
which get fixed up by Makefile.PL to this:
ADD CPP ... /I "\Perl\lib\CORE" /I "C:\apache\include" /I "C:\apache\include/../os/win32" /I "C:\perl5\lib\CORE" ...
Looks like that include path in the original ADD CPP lines should have been *changed* to "C:\perl5\lib\CORE", or at least have the correct path put *before* it -- it's no good having "\Perl\lib\CORE" and then "C:\perl5\lib\CORE" ;-)
The attached patch to Makefile.PL (against 1.29-rc1) fixes those lines up as this:
ADD CPP ... /I "C:\apache\include" /I "C:\apache\include/../os/win32" /I "C:\perl5\lib\CORE" ...
and I can now build mp1.29-rc1 with or without the extra C:\perl in place.
- Steve
--- Makefile.PL.orig 2003-10-03 20:18:22.000000000 +0100
+++ Makefile.PL 2003-10-08 09:06:29.229298300 +0100
@@ -2229,7 +2229,7 @@
}
elsif (/ADD CPP/) {
my $apache_inc = win32_fix_path_dsp($win32_path{APACHE_INC});
- s!(/D "WIN32")!/I "$apache_inc" /I "$apache_inc/../os/win32" /I "$perl_inc"
$1!;
+ s!/I "\\Perl\\lib\\CORE"!/I "$apache_inc" /I "$apache_inc/../os/win32" /I
"$perl_inc"!;
s!(/D "WIN32")!$1 /D "EAPI" ! if $win32_args{EAPI};
print NEWDSP $_;
}--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
