X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FModule%2FInstall%2FCatalyst.pm;h=9c35cbdf087979bf5c9315441309495fe5c3e4cd;hb=0fb9f980b8790912b05232bb66c74f7fe9f85055;hp=e63fddd7ba0e1562f7885c3f9c808b71fba36600;hpb=7cd3b67e35f1fb2a99f232f6e89b3258c025cc02;p=catagits%2FCatalyst-Devel.git diff --git a/lib/Module/Install/Catalyst.pm b/lib/Module/Install/Catalyst.pm index e63fddd..9c35cbd 100644 --- a/lib/Module/Install/Catalyst.pm +++ b/lib/Module/Install/Catalyst.pm @@ -2,34 +2,41 @@ package Module::Install::Catalyst; use strict; +use base qw/ Module::Install::Base /; our @ISA; require Module::Install::Base; -@ISA = qw/Module::Install::Base/; use File::Find; use FindBin; -use File::Copy::Recursive 'rcopy'; +use File::Copy::Recursive; use File::Spec (); +use Getopt::Long (); +use Data::Dumper; my $SAFETY = 0; our @IGNORE = qw/Build Build.PL Changes MANIFEST META.yml Makefile.PL Makefile README - _build blib lib script t inc \.svn \.git _darcs \.bzr \.hg/; -our @CLASSES = (); -our $ENGINE = 'CGI'; -our $CORE = 0; -our $MULTIARCH = 0; -our $SCRIPT; -our $USAGE; + _build blib lib script t inc .*\.svn \.git _darcs \.bzr \.hg + debian build-stamp install-stamp configure-stamp/; =head1 NAME -Module::Install::Catalyst - Module::Install extension for Catalyst + Module::Install::Catalyst - Module::Install extension for Catalyst =head1 SYNOPSIS -See L + use inc::Module::Install; + + name 'MyApp'; + all_from 'lib/MyApp.pm'; + + requires 'Catalyst::Runtime' => '5.7014'; + + catalyst_ignore('.*temp'); + catalyst_ignore('.*tmp'); + catalyst; + WriteAll; =head1 DESCRIPTION @@ -39,15 +46,22 @@ L extension for Catalyst. =head2 catalyst +Calls L. Should be the last catalyst* +command called in C. + =cut sub catalyst { my $self = shift; + + if($Module::Install::AUTHOR) { + $self->include("File::Copy::Recursive"); + } + print <catalyst_files; - $self->catalyst_par; print < and L). + =cut sub catalyst_files { @@ -75,12 +93,14 @@ sub catalyst_files { my @path = split '-', $self->name; for my $orig (@files) { my $path = File::Spec->catdir( 'blib', 'lib', @path, $orig ); - rcopy( $orig, $path ); + File::Copy::Recursive::rcopy( $orig, $path ); } } =head2 catalyst_ignore_all(\@ignore) +This function replaces the built-in default ignore list with the given list. + =cut sub catalyst_ignore_all { @@ -88,7 +108,9 @@ sub catalyst_ignore_all { @IGNORE = @$ignore; } -=head2 catalyst_ignore(\@ignore) +=head2 catalyst_ignore(@ignore) + +Add a regexp to the list of ignored patterns. Can be called multiple times. =cut @@ -97,228 +119,6 @@ sub catalyst_ignore { push @IGNORE, @ignore; } -=head2 catalyst_par($name) - -=cut - -# Workaround for a namespace conflict -sub catalyst_par { - my ( $self, $par ) = @_; - return if $SAFETY; - $SAFETY++; - my $name = $self->name; - my $usage = $USAGE; - $usage =~ s/"/\\"/g; - my $class_string = join "', '", @CLASSES; - $class_string = "'$class_string'" if $class_string; - $self->postamble(< [$class_string], CORE => $CORE, ENGINE => '$ENGINE', MULTIARCH => $MULTIARCH, SCRIPT => '$SCRIPT', USAGE => q#$usage# } )" -EOF - print <{ENGINE}; - my $CLASSES = $opts->{CLASSES} || []; - my $USAGE = $opts->{USAGE}; - my $SCRIPT = $opts->{SCRIPT}; - my $MULTIARCH = $opts->{MULTIARCH}; - my $CORE = $opts->{CORE}; - - my $name = $class_name; - $name =~ s/::/_/g; - $name = lc $name; - $par ||= "$name.par"; - my $engine = $ENGINE || 'CGI'; - - # Check for PAR - eval "use PAR ()"; - die "Please install PAR\n" if $@; - eval "use PAR::Packer ()"; - die "Please install PAR::Packer\n" if $@; - eval "use App::Packer::PAR ()"; - die "Please install App::Packer::PAR\n" if $@; - eval "use Module::ScanDeps ()"; - die "Please install Module::ScanDeps\n" if $@; - - my $root = $FindBin::Bin; - $class_name =~ s/-/::/g; - my $path = File::Spec->catfile( 'blib', 'lib', split( '::', $class_name ) ); - $path .= '.pm'; - unless ( -f $path ) { - print qq/Not writing PAR, "$path" doesn't exist\n/; - return 0; - } - print qq/Writing PAR "$par"\n/; - chdir File::Spec->catdir( $root, 'blib' ); - - my $par_pl = 'par.pl'; - unlink $par_pl; - - my $version = $Catalyst::VERSION; - my $class = $class_name; - - my $classes = ''; - $classes .= " require $_;\n" for @$CLASSES; - - unlink $par_pl; - - my $usage = $USAGE || <<"EOF"; -Usage: - [parl] $name\[.par] [script] [arguments] - - Examples: - parl $name.par $name\_server.pl -r - myapp $name\_cgi.pl -EOF - - my $script = $SCRIPT; - my $tmp_file = IO::File->new("> $par_pl "); - print $tmp_file <<"EOF"; -if ( \$ENV{PAR_PROGNAME} ) { - my \$zip = \$PAR::LibCache{\$ENV{PAR_PROGNAME}} - || Archive::Zip->new(__FILE__); - my \$script = '$script'; - \$ARGV[0] ||= \$script if \$script; - if ( ( \@ARGV == 0 ) || ( \$ARGV[0] eq '-h' ) || ( \$ARGV[0] eq '-help' )) { - my \@members = \$zip->membersMatching('.*script/.*\.pl'); - my \$list = " Available scripts:\\n"; - for my \$member ( \@members ) { - my \$name = \$member->fileName; - \$name =~ /(\\w+\\.pl)\$/; - \$name = \$1; - next if \$name =~ /^main\.pl\$/; - next if \$name =~ /^par\.pl\$/; - \$list .= " \$name\\n"; - } - die <<"END"; -$usage -\$list -END - } - my \$file = shift \@ARGV; - \$file =~ s/^.*[\\/\\\\]//; - \$file =~ s/\\.[^.]*\$//i; - my \$member = eval { \$zip->memberNamed("./script/\$file.pl") }; - die qq/Can't open perl script "\$file"\n/ unless \$member; - PAR::_run_member( \$member, 1 ); -} -else { - require lib; - import lib 'lib'; - \$ENV{CATALYST_ENGINE} = '$engine'; - require $class; - import $class; - require Catalyst::Helper; - require Catalyst::Test; - require Catalyst::Engine::HTTP; - require Catalyst::Engine::CGI; - require Catalyst::Controller; - require Catalyst::Model; - require Catalyst::View; - require Getopt::Long; - require Pod::Usage; - require Pod::Text; - $classes -} -EOF - $tmp_file->close; - - # Create package - local $SIG{__WARN__} = sub { }; - open my $olderr, '>&STDERR'; - open STDERR, '>', File::Spec->devnull; - my %opt = ( - 'x' => 1, - 'n' => 0, - 'o' => $par, - 'a' => [ grep( !/par.pl/, glob '.' ) ], - 'p' => 1, - 'B' => $CORE, - 'm' => $MULTIARCH - ); - App::Packer::PAR->new( - frontend => 'Module::ScanDeps', - backend => 'PAR::Packer', - frontopts => \%opt, - backopts => \%opt, - args => ['par.pl'], - )->go; - - open STDERR, '>&', $olderr; - - unlink $par_pl; - chdir $root; - rmove( File::Spec->catfile( 'blib', $par ), $par ); - return 1; -} - =head1 AUTHORS Catalyst Contributors, see Catalyst.pm