Dr.Avalanche Dr.Avalanche - 1 year ago 115
Perl Question

Perl module - dist.ini and platform specific prereqs

How can I add conditional prereqs to

dist.ini
for each platform (Windows/Non windows) I want the module to support?

For example in perl code I could do:

if ( $^0 eq 'MSWin32' ){
require Win32::Foo;
}else{
require Bar::Baz;
}


How do I cater to each system/platform like this in
dist.ini
so that the proper prereqs are installed via cpan/cpanm?

Answer Source

You can't do it in dist.ini, since an ini file doesn't really have any way to do conditional logic. But one way might be to write your own Dist::Zilla plugin, something like this:

package Dist::Zilla::Plugin::MyPrereqs;    # pick a better name

use Moose;
with 'Dist::Zilla::Role::PrereqSource';

sub register_prereqs { 
    my $self = shift;

    my %prereqs;
    if ( $^0 eq 'MSWin32' ) { 
        $prereqs{'Win32::Foo'} = '0.12';     # min. version
    } else { 
        $prereqs{'Bar::Baz'} = '1.43';
    }

    $self->zilla->register_prereqs( %prereqs );
}

If you generalize this to take some platform-dependent lists of prereqs within dist.ini, it would make a good CPAN release.