X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org From: "Jan Dubois" To: "'Reini Urban'" , Cc: "'P5P'" References: <6910a60807100116g628cf204yeb1c43cbece6802a AT mail DOT gmail DOT com> In-Reply-To: <6910a60807100116g628cf204yeb1c43cbece6802a@mail.gmail.com> Subject: RE: perl-5.10.0-4 -> perl-5.10.0-5 site_perl update needed Date: Thu, 10 Jul 2008 18:39:59 -0700 Message-ID: <02b501c8e2f7$07fdc450$17f94cf0$@com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Content-Language: en-ca 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 On Thu, 10 Jul 2008, Reini Urban wrote: > 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. This should not be true: if the modules were compiled with 5.10.0-4, then they should work with 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. So how do you end up with a site_perl compiled against 5.10.0-5, but running with 5.10.0-4? You installed the new site_perl into an older Perl installation? > 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. But that would compile them with 5.10.0-4 again, right. Wouldn't it be better to replace your 5.10.0-4 dll with the 5.10.0-5 dll? I guess I'm confused about how you ended up in this situation in the first place. Cheers, -Jan -- 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/