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=f814b7986972634756ece10e965f58ab933508c0;hb=20682ed82be3b342c7a64bdbbb4e2752be3d688c;hpb=839ff59e541072d9d9b3bedf7b9320eccf7168b5 diff --git a/lib/Module/Install/Catalyst.pm b/lib/Module/Install/Catalyst.pm index f814b79..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'; @@ -14,7 +18,8 @@ our @CLASSES = (); our $ENGINE = 'CGI'; our $CORE = 0; our $MULTIARCH = 0; -our $SCRIPT = ''; +our $SCRIPT; +our $USAGE; =head1 NAME @@ -49,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 ); @@ -79,7 +84,25 @@ sub catalyst_ignore { =cut # Workaround for a namespace conflict -sub catalyst_par { Catalyst::Module::Install::_catalyst_par(@_) } +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 = $self->name; + my $name = $class_name; $name =~ s/::/_/g; $name = lc $name; $par ||= "$name.par"; - my $engine = $Module::Install::Catalyst::ENGINE || 'CGI'; - my $script = $Module::Install::Catalyst::SCRIPT || "$name\_cgi.pl"; + my $engine = $ENGINE || 'CGI'; # Check for PAR eval "use PAR ()"; @@ -154,7 +192,7 @@ sub _catalyst_par { die "Please install Module::ScanDeps\n" if $@; my $root = $FindBin::Bin; - my $path = File::Spec->catfile( 'blib', 'lib', split( '::', $self->name ) ); + 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/; @@ -167,19 +205,55 @@ sub _catalyst_par { unlink $par_pl; my $version = $Catalyst::VERSION; - my $class = $self->name; + my $class = $class_name; my $classes = ''; - $classes .= " require $_;\n" for @Catalyst::Module::Install::CLASSES; - my $tmp_file = IO::File->new(" > $par_pl "); + $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"; -require lib; -if (\$0 !~ /par.pl\.\\w+\$/) { - import lib '../lib'; - require FindBin; - require "\$FindBin::Bin/script/$script"; +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; @@ -191,6 +265,9 @@ else { require Catalyst::Controller; require Catalyst::Model; require Catalyst::View; + require Getopt::Long; + require Pod::Usage; + require Pod::Text; $classes } EOF @@ -206,8 +283,8 @@ EOF 'o' => $par, 'a' => [ grep( !/par.pl/, glob '.' ) ], 'p' => 1, - 'B' => $Module::Install::Catalyst::CORE, - 'm' => $Module::Install::Catalyst::MULTIARCH + 'B' => $CORE, + 'm' => $MULTIARCH ); App::Packer::PAR->new( frontend => 'Module::ScanDeps',