# 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()