Dist::Zilla::Plugin::XSVersion - a thing
# dist.ini [XSVersion] # MyModule.pm package MyModule; require XSLoader; XSLoader::load('MyModule');
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);
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.
Jeff Ober <email@example.com>
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.