X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FModule%2FInstall%2FCatalyst.pm;h=70c03c8d849307e347882a9616cd079434caa35f;hp=416dd37ee2c7dcccdede5a928786960e7eeaf819;hb=20682ed82be3b342c7a64bdbbb4e2752be3d688c;hpb=a2e038a1e9cbc0f1ea32b7087e6b47efe3af082f diff --git a/lib/Module/Install/Catalyst.pm b/lib/Module/Install/Catalyst.pm index 416dd37..70c03c8 100644 --- a/lib/Module/Install/Catalyst.pm +++ b/lib/Module/Install/Catalyst.pm @@ -1,7 +1,11 @@ package Module::Install::Catalyst; use strict; -use base 'Module::Install::Base'; + +our @ISA; +require Module::Install::Base; +@ISA = qw/Module::Install::Base/; + use File::Find; use FindBin; use File::Copy::Recursive 'rcopy'; @@ -10,9 +14,12 @@ use File::Spec (); our @IGNORE = qw/Build Build.PL Changes MANIFEST META.yml Makefile.PL Makefile README _build blib lib script t inc/; +our @CLASSES = (); our $ENGINE = 'CGI'; our $CORE = 0; our $MULTIARCH = 0; +our $SCRIPT; +our $USAGE; =head1 NAME @@ -47,7 +54,7 @@ sub catalyst_files { push @files, $name; } closedir CATDIR; - my @path = split '::', $self->name; + my @path = split '-', $self->name; for my $orig (@files) { my $path = File::Spec->catdir( 'blib', 'lib', @path, $orig ); rcopy( $orig, $path ); @@ -76,47 +83,193 @@ sub catalyst_ignore { =cut +# Workaround for a namespace conflict sub catalyst_par { my ( $self, $par ) = @_; + print <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" if $@; + die "Please install PAR\n" if $@; eval "use PAR::Packer ()"; - die "Please install PAR::Packer" if $@; + die "Please install PAR::Packer\n" if $@; eval "use App::Packer::PAR ()"; - die "Please install App::Packer::PAR" if $@; + die "Please install App::Packer::PAR\n" if $@; eval "use Module::ScanDeps ()"; - die "Please install Module::ScanDeps" if $@; + die "Please install Module::ScanDeps\n" if $@; my $root = $FindBin::Bin; + 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 = $self->name; + my $class = $class_name; + + my $classes = ''; + $classes .= " require $_;\n" for @$CLASSES; + + unlink $par_pl; - my $tmp_file = IO::File->new("> $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"; -die "$class on Catalyst $version\n" if \$0 !~ /par.pl\.\\w+\$/; -BEGIN { \$ENV{CATALYST_ENGINE} = '$engine' }; -use lib 'lib'; -require $class; -import $class; -require Catalyst::Helper; -require Catalyst::PAR; -require Catalyst::Build; -require Catalyst::Test; -require Catalyst::Engine::HTTP; -require Catalyst::Engine::CGI; -require Catalyst::Controller; -require Catalyst::Model; -require Catalyst::View; +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; @@ -140,38 +293,13 @@ EOF backopts => \%opt, args => ['par.pl'], )->go; + open STDERR, '>&', $olderr; unlink $par_pl; chdir $root; - rmove File::Spec->catfile( 'blib', $par ), $par; -} - -=head2 catalyst_par_core($core) - -=cut - -sub catalyst_par_core { - my ( $self, $core ) = @_; - $CORE = $core; -} - -=head2 catalyst_par_engine($engine) - -=cut - -sub catalyst_par_engine { - my ( $self, $engine ) = @_; - $ENGINE = $engine; -} - -=head2 catalyst_par_multiarch($multiarch) - -=cut - -sub catalyst_par_multiarch { - my ( $self, $multiarch ) = @_; - $MULTIARCH = $multiarch; + rmove( File::Spec->catfile( 'blib', $par ), $par ); + return 1; } =head1 AUTHOR