Skip Menu |
 

This queue is for tickets about the Google-Ads-AdWords-Client CPAN distribution.

Report information
The Basics
Id: 118631
Status: new
Priority: 0/
Queue: Google-Ads-AdWords-Client

People
Owner: Nobody in particular
Requestors: KENTNL [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Dynamic Version assignment in modules is unreliable for static analysis

https://metacpan.org/source/SUNDQUIST/Google-Ads-AdWords-Client-4.11.0/lib/Google/Ads/AdWords/Deserializer.pm#L26

This line of code can't work for static analysis, as there will be no Google::Ads::AdWords::Constants in @INC

Worse, if there *is* a Google::Ads::AdWords::Constants in @INC, it will return *its* version, which may be *different* from the version under static analysis.

Its generally recommended to just hard-code these versions everywhere and then have a tool that synchronizes them as your release process.

However, presently, pointing Toolchain code (Module::Metadata) at your code simple does this:

 

Error evaling version line ' my $dummy = q#  Hide from _packages_inside()
    #; package Module::Metadata::_version::p3;
    use version;
    sub {
      local $VERSION;
      use Google::Ads::AdWords::Constants; our $VERSION = ${Google::Ads::AdWords::Constants::VERSION};;
      return $VERSION if defined $VERSION;
      return $Module::Metadata::_version::p3::VERSION;
    };
  ' in /usr/lib64/perl5/vendor_perl/5.24.1/Google/Ads/AdWords/Deserializer.pm: Can't locate Google/Ads/AdWords/Constants.pm in @INC (you may need to install the Google::Ads::AdWords::Constants module) (@INC contains: /home/kent/perl5/perlbrew/perls/5.25.6-nossp-sdbm-nopmc/lib/site_perl/5.25.6/x86_64-linux /home/kent/perl5/perlbrew/perls/5.25.6-nossp-sdbm-nopmc/lib/site_perl/5.25.6 /home/kent/perl5/perlbrew/perls/5.25.6-nossp-sdbm-nopmc/lib/5.25.6/x86_64-linux /home/kent/perl5/perlbrew/perls/5.25.6-nossp-sdbm-nopmc/lib/5.25.6 .) at (eval 7) line 6, <$handle> line 26.
BEGIN failed--compilation aborted at (eval 7) line 6, <$handle> line 26.

Given this is how Module::Build populates the "provides" record: https://metacpan.org/source/SUNDQUIST/Google-Ads-AdWords-Client-4.11.0/META.json

I'm kinda surprised you haven't already hit problems here with this approach.

If anything, I think you got lucky that this code is here that will help you in the "developer of the dist" scenario : https://metacpan.org/source/ETHER/Module-Metadata-1.000033/lib/Module/Metadata.pm#L698-703

But that is unlikely to work for anyone else.

 



This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.