1 package Module::Install::Catalyst;
4 use base 'Module::Install::Base';
7 use File::Copy::Recursive 'rcopy';
11 qw/Build Build.PL Changes MANIFEST META.yml Makefile.PL Makefile README
12 _build blib lib script t inc/;
20 Module::Install::Catalyst - Module::Install extension for Catalyst
28 L<Module::Install> extension for Catalyst.
43 CATFILES: for my $name ( readdir CATDIR ) {
44 for my $ignore (@IGNORE) {
45 next CATFILES if $name =~ /^$ignore$/;
46 next CATFILES if $name !~ /\w/;
51 my @path = split '::', $self->name;
52 for my $orig (@files) {
53 my $path = File::Spec->catdir( 'blib', 'lib', @path, $orig );
54 rcopy( $orig, $path );
58 =head2 catalyst_ignore_all(\@ignore)
62 sub catalyst_ignore_all {
63 my ( $self, $ignore ) = @_;
67 =head2 catalyst_ignore(\@ignore)
72 my ( $self, @ignore ) = @_;
73 push @IGNORE, @ignore;
76 =head2 catalyst_par($name)
80 # Workaround for a namespace conflict
81 sub catalyst_par { Catalyst::Module::Install::_catalyst_par(@_) }
83 =head2 catalyst_par_core($core)
87 sub catalyst_par_core {
88 my ( $self, $core ) = @_;
92 =head2 catalyst_par_classes(@clases)
96 sub catalyst_par_classes {
97 my ( $self, @classes ) = @_;
98 push @CLASSES, @classes;
101 =head2 catalyst_par_engine($engine)
105 sub catalyst_par_engine {
106 my ( $self, $engine ) = @_;
110 =head2 catalyst_par_multiarch($multiarch)
114 sub catalyst_par_multiarch {
115 my ( $self, $multiarch ) = @_;
116 $MULTIARCH = $multiarch;
119 package Catalyst::Module::Install;
123 use File::Copy::Recursive 'rmove';
127 my ( $self, $par ) = @_;
129 my $name = $self->name;
132 $par ||= "$name.par";
133 my $engine = $Module::Install::Catalyst::ENGINE || 'CGI';
137 die "Please install PAR" if $@;
138 eval "use PAR::Packer ()";
139 die "Please install PAR::Packer" if $@;
140 eval "use App::Packer::PAR ()";
141 die "Please install App::Packer::PAR" if $@;
142 eval "use Module::ScanDeps ()";
143 die "Please install Module::ScanDeps" if $@;
145 my $root = $FindBin::Bin;
146 my $path = File::Spec->catfile( 'blib', 'lib', split( '::', $self->name ) );
148 unless ( -f $path ) {
149 print qq/Not writing PAR, "$path" doesn't exist\n/;
152 print qq/Writing PAR "$par"\n/;
153 chdir File::Spec->catdir( $root, 'blib' );
155 my $par_pl = 'par.pl';
158 my $version = $Catalyst::VERSION;
159 my $class = $self->name;
162 $classes .= "require $_;\n" for @Catalyst::Module::Install::CLASSES;
163 my $tmp_file = IO::File->new(" > $par_pl ");
164 print $tmp_file <<"EOF";
165 die "$class on Catalyst $version\n" if \$0 !~ /par.pl\.\\w+\$/;
166 BEGIN { \$ENV{CATALYST_ENGINE} = '$engine' };
170 require Catalyst::Helper;
171 require Catalyst::Test;
172 require Catalyst::Engine::HTTP;
173 require Catalyst::Engine::CGI;
174 require Catalyst::Controller;
175 require Catalyst::Model;
176 require Catalyst::View;
182 local $SIG{__WARN__} = sub { };
183 open my $olderr, '>&STDERR';
184 open STDERR, '>', File::Spec->devnull;
189 'a' => [ grep( !/par.pl/, glob '.' ) ],
191 'B' => $Module::Install::Catalyst::CORE,
192 'm' => $Module::Install::Catalyst::MULTIARCH
194 App::Packer::PAR->new(
195 frontend => 'Module::ScanDeps',
196 backend => 'PAR::Packer',
202 open STDERR, '>&', $olderr;
206 rmove( File::Spec->catfile( 'blib', $par ), $par );
212 Sebastian Riedel, C<sri@oook.de>
216 This library is free software, you can redistribute it and/or modify it under
217 the same terms as Perl itself.