Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl: Makefile.PL, File::ShareDir::Install, chicken and eggs

Tags:

perl

packaging

The File::ShareDir::Install module represents a practical way of carrying around auxiliary files with a Perl distribution/module. I feel however a bit puzzled on how to include it in the dependencies of my project.

I tried to install my package on a fresh machine (actually a docker container with base OS + Perl + CPAN) and I got the error:

Can't locate File/ShareDir/Install.pm in @INC ... at Makefile.PL line 7.

According to the documentation (perldoc File::ShareDir::Install), the pattern should be, in my Makefile.PL:

use ExtUtils::MakeMaker;
use File::ShareDir::Install;

install_share 'share';
install_share dist => 'dist-share';
install_share module => 'My::Module' => 'other-share';

WriteMakefile( ... );       # As you normaly would

package MY;
use File::ShareDir::Install qw(postamble);

However, by doing so I need File::ShareDir::Install to be pre-installed on my system as requirement to run the Makefile.PL script. Declaring it as dependency will not work, for obvious reasons!

Should I instruct my users to explicitly instasll File::ShareDir::Install before my module? Would it be possible to install it programmatically, within Makefile.PL, by directly calling the CPAN module?

like image 968
Dacav Avatar asked Oct 26 '25 21:10

Dacav


1 Answers

This is what CONFIGURE_REQUIRES is for:

Available in version 6.52 and above.

A hash of modules that are required to run Makefile.PL itself, but not to run your distribution.

This will go into the configure_requires field of your META.yml and the configure of the prereqs field of your META.json.

Defaults to { "ExtUtils::MakeMaker" => 0 } if this attribute is not specified.

The format is the same as PREREQ_PM.

So you would add to your WriteMakefile parameters:

CONFIGURE_REQUIRES => {
  "ExtUtils::MakeMaker" => '6.52',
  "File::ShareDir::Install" => 0,
},

Then people using cpan or cpanm to install modules will get File::ShareDir::Install installed automatically.

like image 144
cjm Avatar answered Oct 29 '25 13:10

cjm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!