use 5.008008; # NOT 5.8.8 - needed by CPAN testers
use Module::Build;
my $builder = Module::Build
->new( module_name => 'Exception::Lite'
, license => 'perl'
, requires => { perl => '>= 5.8.8' }
, dist_version => '0.099_001'
, create_makefile_pl => 'traditional'
);
$builder->create_build_script; #generate Build
####
use 5.008008; # NOT 5.8.8
my $sClass = Module::Build->subclass(code => <<'EOF');
my $MODULE_BASE = 'Exception/Lite';
my @LIB_SOURCES = ('.pm', '.pod', '.t');
sub ACTION_makeproject {
my $oBuilder = Module::Build->current();
my $sProjectRoot=$oBuilder->args('srctree');
if (!defined($sProjectRoot)) {
warn "No source tree root defined\n";
return;
}
$sProjectRoot .= '/' unless ($sProjectRoot =~ m{/$});
my $sModuleSrc = $sProjectRoot . $MODULE_BASE;
require File::Copy;
if (! -d 'lib') { mkdir 'lib' or die $!; }
if (! -d 'lib/Exception') { mkdir 'lib/Exception' or die $! }
my $sModuleLib = 'lib/' . $MODULE_BASE;
print STDERR
"Making a project <$MODULE_BASE> from <$sProjectRoot>\n"
. "Copying files to lib ... ";
foreach my $sSrc (@LIB_SOURCES) {
File::Copy::copy($sModuleSrc.$sSrc, $sModuleLib.$sSrc);
}
print STDERR "lib/ is built\n";
}
EOF
my $builder = $sClass
->new( # command line options to hard-code data needed by
# makeproject action defined above
get_options => {srctree => { type => '=s' }}
, module_name => $MODULE_NAME
, license => 'perl'
, requires => { perl => '>= 5.8.8' }
, test_files => [ $MODULE_ROOT.'.t']
, dist_version => '0.099_001'
, create_makefile_pl => 'traditional'
);
# called on command line like this
# perl Build.PL --srctree='/X/Y/Z/';
# makeproject command run like this
# ./Build makeproject
##
##
{
package MyBuilder;
our @ISA=qw(Module::Build);
... my code here ...
}
my $builder = MyBuilder->new(...various arguments...);
##
##
./Build manifest
./Build disttest
./Build dist
##
##
./Build test
./Build fakeinstall
-or-
perl Build.PL --destdir /tmp/foo/
./Build test
./Build install
##
##
./Build clean