The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Dist::Zilla::Plugin::XSVersion - a thing

VERSION

version 0.01

SYNOPSIS

  # dist.ini
  [XSVersion]

  # MyModule.pm
  package MyModule;

  require XSLoader;
  XSLoader::load('MyModule');

DESCRIPTION

A hackey, quick plugin to implement the commonly used $XS_VERSION pattern required in order to support XS-loading of trial releases. This is not possible using Dist::Zilla::Plugin::PkgVersion, which will generate something like:

  $MyModule::VERSION = '0.123_1'; # first line for CPAN indexer
  $MyModule::VERSION = '0.1231';  # next line for internal versioning

Without an explicit second argument, "load" in XSLoader will attempt to load the compiled module using a VERSIONCHECK against the value of $MyModule::VERSION, which no longer matches 0.123_1 after being overwritten.

  $MyModule::VERSION = '0.123_1'; # first line for CPAN indexer
  $MyModule::VERSION = '0.1231';  # next line for internal versioning
  XSLoader::load('MyModule');     # gets the wrong $VERSION

This plugin rewrites the code above to something like:

  $MyModule::XS_VERSION = $MyModule::VERSION = '0.123_1';
  $MyModule::VERSION = '0.1231';
  XSLoader::load('MyModule', $MyModule::XS_VERSION);

CAVEATS

I have no patience for PPI, so instead I fudged it with a couple of quick regexes. So long as you are using PkgVersion to add $VERSION and do not do anything fancy on your XSLoader::load line (such as load the result of evaluating an expression), everything should work. If not... well, patches welcome.

AUTHOR

Jeff Ober <sysread@fastmail.fm>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Jeff Ober.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.