Module-Starter-Smart
view release on metacpan or search on metacpan
lib/Module/Starter/Smart.pm view on Meta::CPAN
00.load.t perlcritic.t pod-coverage.t pod.t
Troop.pm has been added to Goof-Ball/lib/Goof.
=cut
use parent qw(Module::Starter::Simple);
use ExtUtils::Command qw/mkpath/;
use File::Spec;
# Module implementation here
use subs qw/_unique_sort _pull_modules _list_modules _pull_t _list_t/;
=head1 INTERFACE
No public methods. The module works by subclassing Module::Starter::Simple and
rewiring its internal behaviors.
=cut
sub create_distro {
my $class = shift;
my $self = ref $class? $class: $class->new(@_);
my $basedir =
$self->{dir} ||
$self->{distro} ||
do {
(my $first = $self->{modules}[0]) =~ s/::/-/g;
$first;
};
$self->{modules} = [ _unique_sort _pull_modules($basedir), @{$self->{modules}} ];
$self->SUPER::create_distro;
}
sub create_basedir {
my $self = shift;
return $self->SUPER::create_basedir(@_) unless -e $self->{basedir} && !$self->{force};
$self->progress( "Found $self->{basedir}. Use --force if you want to stomp on it." );
}
sub create_modules {
my $self = shift;
$self->SUPER::create_modules(@_);
}
sub _create_module {
my $self = shift;
my $module = shift;
my $rtname = shift;
my @parts = split( /::/, $module );
my $filepart = (pop @parts) . ".pm";
my @dirparts = ( $self->{basedir}, 'lib', @parts );
my $manifest_file = join( "/", "lib", @parts, $filepart );
if ( @dirparts ) {
my $dir = File::Spec->catdir( @dirparts );
if ( not -d $dir ) {
local @ARGV = $dir;
mkpath @ARGV;
$self->progress( "Created $dir" );
}
}
my $module_file = File::Spec->catfile( @dirparts, $filepart );
$self->{module_file}{$module} =
File::Spec->catfile('lib', @parts, $filepart);
if (-e $module_file) {
$self->progress( "Skipped $module_file" );
} else {
open( my $fh, ">", $module_file ) or die "Can't create $module_file: $!\n";
print $fh $self->module_guts( $module, $rtname );
close $fh;
$self->progress( "Created $module_file" );
}
return $manifest_file;
}
sub create_t {
my $self = shift;
_unique_sort $self->SUPER::create_t(@_), _pull_t $self->{basedir};
}
sub _create_t {
my $self = shift;
my $testdir = @_ == 2 ? 't' : shift;
my $filename = shift;
my $content = shift;
my @dirparts = ( $self->{basedir}, $testdir );
my $tdir = File::Spec->catdir( @dirparts );
if ( not -d $tdir ) {
local @ARGV = $tdir;
mkpath();
$self->progress( "Created $tdir" );
}
my $fname = File::Spec->catfile( @dirparts, $filename );
if (-e $fname) {
$self->progress( "Skipped $fname" );
} else {
open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
print $fh $content;
close $fh;
$self->progress( "Created $fname" );
}
return File::Spec->catfile( $testdir, $filename );
}
sub create_Makefile_PL {
my $self = shift;
my $main_module = shift;
my @parts = split( /::/, $main_module );
my $pm = pop @parts;
my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
$main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash
my $fname = File::Spec->catfile( $self->{basedir}, "Makefile.PL" );
if (-e $fname) {
$self->progress( "Skipped $fname" );
} else {
open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
print $fh $self->Makefile_PL_guts($main_module, $main_pm_file);
close $fh;
$self->progress( "Created $fname" );
}
return "Makefile.PL";
}
sub create_Build_PL {
my $self = shift;
my $main_module = shift;
my @parts = split( /::/, $main_module );
my $pm = pop @parts;
my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
$main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash
my $fname = File::Spec->catfile( $self->{basedir}, "Build.PL" );
if (-e $fname) {
$self->progress( "Skipped $fname" );
} else {
open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
print $fh $self->Build_PL_guts($main_module, $main_pm_file);
close $fh;
$self->progress( "Created $fname" );
}
( run in 1.214 second using v1.01-cache-2.11-cpan-39bf76dae61 )