X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Message-ID: <6910a60807100116g628cf204yeb1c43cbece6802a@mail.gmail.com> Date: Thu, 10 Jul 2008 10:16:18 +0200 From: "Reini Urban" To: cygwin AT cygwin DOT com Subject: perl-5.10.0-4 -> perl-5.10.0-5 site_perl update needed Cc: P5P MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Google-Sender-Auth: c3642a42ad25782e X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com 2008/7/9 Reini Urban: > 2008/7/9 Reini Urban: >> 2008/7/8 Reini Urban: >>> 2008/7/8 Gary R. Van Sickle: >>>> Hi Reini, >>>> >>>> It looks like something changed between perl 5.10.0-4 and -5 which breaks >>>> the DateTime module from CPAN (version 0.4302, latest). The attached Simple >>>> Test Case(tm) results in only the following errors: >>>> >>>> Use of uninitialized value $id in pattern match (m//) at >>>> /usr/lib/perl5/site_perl/5.10/DateTime/Locale.pm line 65. >>> >>> Bad side-effect with a third party module in site_perl. >>> Strange that I didn't see this in my tests, because I tested over >>> thousand CPAN modules with this release. >>> Oh, I see, I reported that it failed on June 5. >>> >>> $ cpan DateTime >>> requires DateTime::Locale >>> >>> DateTime::Locale cannot be installed because of this error, >>> but since you upgraded perl we have to fix DateTime::Locale now. >>> >>> Oops. This seems to affect more modules. >>> Params::Validate with type => SCALAR seems to be broken. >>> http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Params%3A%3AValidate >>> >>> I have to go now, but will provide a patch soon. >>> As workaround I would disable the validation in DateTime::Locale::_register >>> but this also doesn't work as expected. >>> >>> if (! defined $p{id} or !$id) { >>> # cygperl5 error in Params::Validate? >>> #warn "Broken Params::Validate. Given ".join(",",@_); >>> $p{id} = $_[0]; >>> $p{en_language} = $_[1]; >>> my @keys = qw(en_script en_territory en_variant native_language >>> native_script native_territory native_variant class replace); >>> for my $i (2 .. @_) { >>> $p{$keys[$i]} = $_[$i]; >>> } >>> } >> >> Update on this issue: >> As you can see, there's only one machine with this error, which is my laptop. >> http://cpantesters.perl.org/show/DateTime-Locale.html#DateTime-Locale-0.4001 >> My normal devel machine passed the DateTime::Locale test, which is weird. >> I also pass the Params::Validate test on my laptop, which is weirder, >> because this fails for DateTime::Locale on my laptop. >> >> Anyway, until I find out the differences between my laptop and my >> devel machine, >> the short summary: >> >> Params::Validate fails in an BEGIN block, in a type => SCALAR check only on >> certain machines with 5.10.0 patch 34065 on Cygwin. (Tested only >> release and patch 34065). >> Reproducible with DateTime::Locale. >> Within the debugger everything works ok. (Probably because of the BEGIN block) >> The other DateTime::Locale reports show no clue. >> There's a Darwin report on the same patchlevel which passed. >> >> Within DateTime-Locale-0.4001 after make >> even perl -Mblib -cw t/01basic.t fails with the same errors. >> >> Moving the register call from BEGIN to INIT also does not help. > > The adhoc workaround for perl-5.10.0-5 is to move away the Validate XS module: > > mv /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Params/Validate/Validate.dll \ > /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Params/Validate/_Validate.dll > > Now it works, because Params::Validate has a slower pure-perl fallback. I've analyzed the symbols in the dll's and found the explanation and solution for this update problems. p5p and module authors need not to be concerned. It's a simple cygwin perl update problem. In short: All old perl-5.10.0-4 generated binary site_perl modules need to be recompiled with perl-5.10.0-5. They are not ABI cross-compatible with the new vendor and archlib modules. Explanation: perl-5.10.0-5 is based on patchlevel 34065, perl-5.10.0-4 was based on plain 5.10.0 with a lot of patches. perl-5.10.0-5 adds a new utf8 handling of strings via a new newSVpvn_flags function sv.h: #define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) perl-5.10.0-4 does not contain newSVpvn_utf8 nor newSVpvn_flags. So any new XS module using strings may not call an old perl-5.10.0-4 dll, which does not contain the _utf8 and _flags functions. Solution: # delete all old site packages with dll's and reinstall them for pack in $(find /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto \ -name .packlist \! -newer /bin/perl.exe); do grep .dll $pack && rm -f $(cat $pack) done | \ perl -MCPAN -ne' s|/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/(.+?)/\w+\.dll$|$1|; s|/|::|g; push @p, $_; END {install(@p) }' should recompile them all. -- Reini Urban http://phpwiki.org/ http://murbreak.at/ -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/