develooper Front page | perl.perl5.porters | Postings from September 2010

[perl #78066] The commit e55c0a82 for #59650 (File::Copy & objects) fails on cygwin

From:
Father Chrysostomos
Date:
September 26, 2010 13:37
Subject:
[perl #78066] The commit e55c0a82 for #59650 (File::Copy & objects) fails on cygwin
Message ID:
rt-3.6.HEAD-5116-1285533457-928.78066-75-0@perl.org
# New Ticket Created by  Father Chrysostomos 
# Please include the string:  [perl #78066]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=78066 >


I found this message inside [perl #59650]. It is a separate issue, so it gets its own ticket.

On Sun Jan 17 06:14:35 2010, rurban wrote:
> The commit e55c0a82 for 
> [perl #59650] File::Copy does not handle file objects sanely
> Suggested change modified to cope with the hoop-jumping needed to keep
> File::Copy working whilst bootstrapping the core build.
> 
> which added the lines:
> 
> # During perl build, we need File::Copy but Scalar::Util might not be
> built yet
> # And then we need these games to avoid loading overload, as that will
> # confuse miniperl during the bootstrap of perl.
> my $Scalar_Util_loaded = eval q{ require Scalar::Util; require overload;
> 1 };
> 
> fails on cygwin since about 5.11.3 with
> 
> ../../miniperl Makefile.PL INSTALLDIRS=perl INSTALLMAN1DIR=none
> INSTALLMAN3DIR=none PERL_CORE=1 LIBPERL_A=cygperl5_11_3d@b595cd4b.dll
> Importing PAUSE public key into your GnuPG keychain... done!
> (You may wish to trust it locally with 'gpg --lsign-key 450F89EC')
> Attempt to reload Scalar/Util.pm aborted.
> Compilation failed in require at ../../lib/overload.pm line 96.
> 65280 from cpan/CPAN's Makefile.PL at make_ext.pl line 390.
> 
> Scalar::Util is required by CPAN even if it cannot be loaded at
> bootstrap. 
> 
> I've instrumented the pp_require stores into %INC.
> 
> Scalar/Utils.pm is dynamically eval-loaded by:
> 
> ../../lib/File/Copy.pm:18
> ../../lib/IO/Compress/Base/Common.pm:8
> ../../lib/File/Find.pm:1345
> Makefile.PL:118 (as interesting_module)
> ../../lib/overload.pm:96
> 
> but I dont see where it is stored into %INC to avoid the recursion failure.
> 
> (492:../../lib/File/Copy.pm:18)	const(PV(" require Scalar::Util; require
> overload; 1 "\0))
> (492:../../lib/File/Copy.pm:18)	entereval
> (492:(eval 18):0)	nextstate
> (492:(eval 18):1)	const(PV("Scalar/Util.pm"\0))
> (492:(eval 18):1)	require
> (492:(eval 18):1)	pp_require "Scalar/Util.pm"
> (492:(eval 18):1)	pp_require store in INC "Scalar/Util.pm" (!hook_sv)
> ..
> (492:../../lib/overload.pm:96)	require
> (492:../../lib/overload.pm:96)	pp_require "Scalar/Util.pm"
> SV = NULL(0x0) at 0x26e8840
>   REFCNT = 2147479514
>   FLAGS = (READONLY)
> Attempt to reload Scalar/Util.pm aborted.
> Compilation failed in require at ../../lib/overload.pm line 96.
> 
> Scalar::Util loads Scalar::Util::PP if the XS is not loaded.
> But Scalar::Util::PP requires B::svref_2object, which is not available
> at miniperl bootstrap. So loading Scalar::Util will always fail on
> miniperl. We should get rid of B::svref_2object in PP to be able to
> bootstrap miniperl sanely
> 
> This is the fix:
> 
> diff --git a/make_ext.pl b/make_ext.pl
> index de26d84..d31692a 100644
> --- a/make_ext.pl
> +++ b/make_ext.pl
> @@ -34,6 +34,7 @@ my @toolchain = qw(cpan/AutoLoader/lib
>  		   cpan/ExtUtils-MakeMaker/lib
>  		   cpan/ExtUtils-Manifest/lib
>  		   cpan/File-Path/lib
> +		   cpan/List-Util/lib
>  		   );
>  
>  # Used only in ExtUtils::Liblist::Kid::_win32_ext()





nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About