windowsperlperl-moduledist-zilla

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?


Solution

  • 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.