Module::Build::Compat - Compatibility with ExtUtils::MakeMaker
Here's a Makefile.PL that passes all functionality through to Module::Build use Module::Build::Compat; Module::Build::Compat->run_build_pl(args => \@ARGV); Module::Build::Compat->write_makefile();
This module helps you build a Makefile.PL that passes all functionality through to Module::Build.
There are (at least) two good ways to distribute a module that can be installed using either perl Build.PL; Build; ... or perl Makefile.PL; make; .... For each way, you include both a Makefile.PL and a Build.PL script with your distribution. The difference is in whether the Makefile.PL is a pass-through to Module::Build actions, or a normal ExtUtils::MakeMaker-using script. If it's the latter, you don't need this module - but you'll have to maintain both the Build.PL and Makefile.PL scripts, and things like the prerequisite lists and any other customization duplicated in the scripts will probably become a pain in the ass.
perl Build.PL; Build; ...
perl Makefile.PL; make; ...
For this reason, you might require that the user have Module::Build installed, and then the make commands just pass through to the corresponding Module::Build actions. That's what this module lets you do.
make
A typical Makefile.PL is shown above in SYNOPSIS. See also FALLBACK for some code that can help if the user doesn't have Module::Build installed yet.
So, some common scenarios are:
This method runs the Build.PL script, passing it any arguments the user may have supplied to the perl Makefile.PL command. Because ExtUtils::MakeMaker and Module::Build accept different arguments, this method also performs some translation between the two.
perl Makefile.PL
run_build_pl() accepts the following named parameters:
run_build_pl()
args
The args parameter specifies the parameters that would usually appear on the command line of the perl Makefile.PL command - typically you'll just pass a reference to @ARGV.
@ARGV
script
This is the filename of the script to run - it defaults to Build.PL.
Build.PL
This method writes a 'dummy' Makefile that will pass all commands through to the corresponding Module::Build actions.
write_makefile() accepts the following named parameters:
write_makefile()
makefile
The name of the file to write - defaults to the string Makefile.
Makefile
You may be wondering what happens when the user doesn't already have Module::Build installed - in this case, the installation process is going to fail until they install it. Fortunately, if the user is using CPAN.pm, we can exploit its prerequisite mechanism in order to get Module::Build installed. Amazingly, CPAN.pm actually reads the PREREQ_PM information from a comment in the generated Makefile. Therefore, the following Makefile.PL may be useful (make certain you preserve tabs!):
------------------------------------------------------------- unless ( eval {require Module::Build::Compat} ) { # The user doesn't have Module::Build installed. Put it as a # prereq in the Makefile, so that CPAN.pm will install it. open MAKE, ">Makefile" or die "Cannot write Makefile: $!"; print MAKE <<EOF; # PREREQ_PM => { Module::Build=>q[0.05] } all : .DEFAULT .DEFAULT : \@echo " This module requires Module::Build to test and install." \@echo " Please install Module::Build first, then re-run 'perl Makefile.PL'." EOF close MAKE; exit 0; } # The user *does* have Module::Build installed. Run Build.PL and make a pass-through Makefile. Module::Build::Compat->run_build_pl(args => \@ARGV); Module::Build::Compat->write_makefile; -------------------------------------------------------------
Ken Williams, ken@mathforum.org
Module::Build(3), ExtUtils::MakeMaker(3)
To install Module::Build, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Module::Build
CPAN shell
perl -MCPAN -e shell install Module::Build
For more information on module installation, please visit the detailed CPAN module installation guide.