NAME
Module::Build::Compat - Compatibility with ExtUtils::MakeMaker
SYNOPSIS
Here's a Makefile.PL that passes all functionality through to Module::Build
:
Module::Build::Compat->run_build_pl(
args
=> \
@ARGV
);
Module::Build::Compat->write_makefile();
Or, here's one that's more careful about sensing whether Module::Build
is already installed, and will offer to install it if it's missing:
unless
(
eval
"use Module::Build::Compat 0.02; 1"
) {
"This module requires Module::Build to install itself.\n"
;
my
$yn
= ExtUtils::MakeMaker::prompt
(
' Install Module::Build from CPAN?'
,
'y'
);
if
(
$yn
=~ /^y/i) {
# Save this 'cause CPAN will chdir all over the place.
my
$cwd
= Cwd::cwd();
my
$makefile
= File::Spec->rel2abs($0);
CPAN::Shell->install(
'Module::Build::Compat'
);
chdir
$cwd
or
die
"Cannot chdir() back to $cwd: $!"
;
exec
$^X,
$makefile
,
@ARGV
;
# Redo now that we have Module::Build
}
else
{
warn
" *** Cannot install without Module::Build. Exiting ...\n"
;
exit
1;
}
}
Module::Build::Compat->run_build_pl(
args
=> \
@ARGV
);
Module::Build::Compat->write_makefile();
DESCRIPTION
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.
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.
A typical Makefile.PL is shown above in SYNOPSIS.
So, some common scenarios are:
- 1. Just include a Build.PL script (without a Makefile.PL script), and give installation directions in a README or INSTALL document explaining how to install the module. In particular, explain that the user must install Module::Build before installing your module. I prefer this method, mainly because I believe that the woes and hardships of doing this are far less significant than most people would have you believe. It's also the simplest method, which is nice.
- 2. Include a Build.PL script and a "regular" Makefile.PL. This may make things easiest for your users, but hardest for you, as you try to maintain two separate installation scripts.
- 3. Include a Build.PL script and a "pass-through" Makefile.PL built using Module::Build::Compat. This will mean that people can continue to use the "old" installation commands, and they may never notice that it's actually doing something else behind the scenes.
METHODS
- run_build_pl()
-
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.run_build_pl()
accepts the following named parameters: - write_makefile()
-
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:
AUTHOR
Ken Williams, ken@mathforum.org
SEE ALSO
Module::Build(3), ExtUtils::MakeMaker(3)