X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FModule%2FInstall%2FCatalyst.pm;h=22efcdad48410838bba49aa99f7a31f8caebe2ca;hb=975ba10392f106efdb4ca8a0fbbe969234bbd518;hp=416dd37ee2c7dcccdede5a928786960e7eeaf819;hpb=a2e038a1e9cbc0f1ea32b7087e6b47efe3af082f;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Module/Install/Catalyst.pm b/lib/Module/Install/Catalyst.pm index 416dd37..22efcda 100644 --- a/lib/Module/Install/Catalyst.pm +++ b/lib/Module/Install/Catalyst.pm @@ -10,9 +10,11 @@ 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 = ''; =head1 NAME @@ -76,23 +78,89 @@ sub catalyst_ignore { =cut -sub catalyst_par { +# Workaround for a namespace conflict +sub catalyst_par { Catalyst::Module::Install::_catalyst_par(@_) } + +=head2 catalyst_par_core($core) + +=cut + +sub catalyst_par_core { + my ( $self, $core ) = @_; + $core ? ( $CORE = $core ) : $core++; +} + +=head2 catalyst_par_classes(@clases) + +=cut + +sub catalyst_par_classes { + my ( $self, @classes ) = @_; + push @CLASSES, @classes; +} + +=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 = $multiarch ) : $multiarch++; +} + +=head2 catalyst_par_script($script) + +=cut + +sub catalyst_par_script { + my ( $self, $script ) = @_; + $SCRIPT = $script; +} + +package Catalyst::Module::Install; + +use strict; +use FindBin; +use File::Copy::Recursive 'rmove'; +use File::Spec (); + +sub _catalyst_par { my ( $self, $par ) = @_; - $par ||= 'application.par'; - my $engine = $ENGINE || 'CGI'; + my $name = $self->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"; # 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( '::', $self->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'; @@ -101,22 +169,31 @@ sub catalyst_par { my $version = $Catalyst::VERSION; my $class = $self->name; - my $tmp_file = IO::File->new("> $par_pl"); + my $script_file = IO::File->new("< $script"); + my $script_content = do { local $/; <$script_file> }; + + my $classes = ''; + $classes .= " require $_;\n" for @Catalyst::Module::Install::CLASSES; + 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; +require lib; +if (\$0 !~ /par.pl\.\\w+\$/) { +$script_content +} +else { + 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; + $classes +} EOF $tmp_file->close; @@ -130,8 +207,8 @@ EOF 'o' => $par, 'a' => [ grep( !/par.pl/, glob '.' ) ], 'p' => 1, - 'B' => $CORE, - 'm' => $MULTIARCH + 'B' => $Module::Install::Catalyst::CORE, + 'm' => $Module::Install::Catalyst::MULTIARCH ); App::Packer::PAR->new( frontend => 'Module::ScanDeps', @@ -140,38 +217,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