X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FModule%2FInstall%2FCatalyst.pm;h=9589f9a3a113f96e5535960232ed5188d4e9ad7d;hb=6c165c4b5034500b2d0519fcaa3f12d88dcaecaa;hp=5274c26f9efc3761663ef7e4066c1c45f8539fce;hpb=724c0767a815fc2fb2168dc9005f3bef10247384;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Module/Install/Catalyst.pm b/lib/Module/Install/Catalyst.pm index 5274c26..9589f9a 100644 --- a/lib/Module/Install/Catalyst.pm +++ b/lib/Module/Install/Catalyst.pm @@ -14,7 +14,8 @@ our @CLASSES = (); our $ENGINE = 'CGI'; our $CORE = 0; our $MULTIARCH = 0; -our $SCRIPT = ''; +our $SCRIPT; +our $USAGE; =head1 NAME @@ -87,7 +88,7 @@ sub catalyst_par { Catalyst::Module::Install::_catalyst_par(@_) } sub catalyst_par_core { my ( $self, $core ) = @_; - $core ? ( $CORE = $core ) : $core++; + $core ? ( $CORE = $core ) : $CORE++; } =head2 catalyst_par_classes(@clases) @@ -114,7 +115,7 @@ sub catalyst_par_engine { sub catalyst_par_multiarch { my ( $self, $multiarch ) = @_; - $multiarch ? ( $MULTIARCH = $multiarch ) : $multiarch++; + $multiarch ? ( $MULTIARCH = $multiarch ) : $MULTIARCH++; } =head2 catalyst_par_script($script) @@ -126,6 +127,15 @@ sub catalyst_par_script { $SCRIPT = $script; } +=head2 catalyst_par_usage($usage) + +=cut + +sub catalyst_par_usage { + my ( $self, $usage ) = @_; + $USAGE = $usage; +} + package Catalyst::Module::Install; use strict; @@ -141,7 +151,6 @@ sub _catalyst_par { $name = lc $name; $par ||= "$name.par"; my $engine = $Module::Install::Catalyst::ENGINE || 'CGI'; - my $script = $Module::Install::Catalyst::SCRIPT || "$name\_cgi.pl"; # Check for PAR eval "use PAR ()"; @@ -169,18 +178,53 @@ sub _catalyst_par { my $version = $Catalyst::VERSION; my $class = $self->name; - my $script_file = IO::File->new("< $script"); - my $script_content = do { local $/; <$script_file> }; - my $classes = ''; $classes .= " require $_;\n" for @Catalyst::Module::Install::CLASSES; + + unlink $par_pl; + + my $usage = $Module::Install::Catalyst::USAGE || <<"EOF"; +Usage: + [parl] $name\[.par] [script] [arguments] + + Examples: + parl $name.par $name\_server.pl -r + myapp $name\_cgi.pl +EOF + + my $script = $Module::Install::Catalyst::SCRIPT; my $tmp_file = IO::File->new("> $par_pl "); print $tmp_file <<"EOF"; -require lib; -if (\$0 !~ /par.pl\.\\w+\$/) { -$script_content +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;