develooper Front page | perl.perl5.porters | Postings from March 2018

[perl #132935] [PATCH] ExtUtils::ParseXS: use literals for VERSIONin 'use Module VERSION'

Thread Previous | Thread Next
From:
Shoichi Kaji via RT
Date:
March 5, 2018 14:55
Subject:
[perl #132935] [PATCH] ExtUtils::ParseXS: use literals for VERSIONin 'use Module VERSION'
Message ID:
rt-4.0.24-6276-1520261724-1157.132935-15-0@perl.org
Typo:

(False) I think I understand ExtUtils::ParseXS explicitly require current version of submodules.
(True) I think I understand why ExtUtils::ParseXS explicitly require current version of submodules.

On Mon, 05 Mar 2018 06:50:06 -0800, skaji@cpan.org wrote:
> Hi James,
> 
> Thanks for your reply.
> I think I understand ExtUtils::ParseXS explicitly require current
> version of submodules. The point here is that the version check does
> not work.
> 
> Hi Father,
> 
> Tanks for your comment.
> 
> > I don’t like the patch, because of the maintenance burden it creates
> > (multiple numbers to update).  I wouldn’t mind a patch that calls
> > ->VERSION($VERSION) explicitly in a BEGIN block.
> 
> I understand. I added another patch which call require() and
> ->VERSION() in BEGIN block.
> 
> On Sun, 04 Mar 2018 18:56:17 -0800, sprout wrote:
> > On Sun, 04 Mar 2018 18:24:12 -0800, jkeenan wrote:
> > > On Sun, 04 Mar 2018 07:10:18 GMT, skaji@outlook.com wrote:
> > > > This is a bug report for perl from skaji@outlook.com,
> > > > generated with the help of perlbug 1.40 running under perl
> > > > 5.26.1.
> > > >
> > > >
> > > > -----------------------------------------------------------------
> > > > [Please describe your issue here]
> > > >
> > > > Currently in ExtUtils::ParseXS, the version check does not work
> > > > because we use variables for VERSION:
> > > >
> > > > ```
> > > > our $VERSION;
> > > > BEGIN {
> > > >   $VERSION = '3.38';
> > > > }
> > > > use ExtUtils::ParseXS::Constants $VERSION;
> > > > ```
> > > >
> > > > We must use literals for VERSION.
> > > > A patch for this is attached to this e-mail.
> > > >
> > >
> > > Please see the explanation provided by Steffen Mueller in commit
> > > 71a65ad3b4b0678fcf5bd6ac3b7ad394accc8079 back in 2011:
> > >
> > > #####
> > > ExtUtils::ParseXS: Explicitly require current version of submodules
> > >
> > > Since there have been certain problems with parts of
> > > ExtUtils::ParseXS
> > > being shadowed by older installations of the module, this commit
> > > adds
> > > an explicit $VERSION to all submodules and requires them to have
> > > the
> > > same version as the main module. This doesn't actually fix any
> > > problem, but makes them more apparent as early as possible instead
> > > of
> > > failing with obscure compile errors when bad C is generated from
> > > the
> > > original XS.
> > > #####
> >
> > That explains why version checks are a good idea.  It does not
> > justify
> > the fact that that commit failed to add any version checks.
> >
> > This:
> >
> > use ExtUtils::ParseXS::Constants $VERSION;
> >
> > is equivalent to:
> >
> > BEGIN {
> >     require ExtUtils::ParseXS::Constants;
> >     'ExtUtils::ParseXS::Constants'->import;
> > }
> >
> > And a call to a nonexistent import method is silently ignored.
> >
> > I don’t like the patch, because of the maintenance burden it creates
> > (multiple numbers to update).  I wouldn’t mind a patch that calls
> > ->VERSION($VERSION) explicitly in a BEGIN block.




---
via perlbug:  queue: perl5 status: open
https://rt.perl.org/Ticket/Display.html?id=132935

Thread Previous | Thread Next


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