Added PAR support
[catagits/Catalyst-Runtime.git] / lib / Catalyst / PAR.pm
1 package Catalyst::PAR;
2
3 use strict;
4 use base 'Class::Accessor::Fast';
5 use FindBin;
6 use IO::File;
7 use File::Spec;
8 require Catalyst;
9
10 =head1 NAME
11
12 Catalyst::PAR - Package Catalyst Applications
13
14 =head1 SYNOPSIS
15
16 See L<Catalyst>
17
18 =head1 DESCRIPTION
19
20 Package Catalyst Applications.
21
22 =head1 METHODS
23
24 =over 4
25
26 =item $self->package( $par, $engine )
27
28 =cut
29
30 sub package {
31     my ( $self, $options ) = @_;
32
33     my $par    = $options->{par}    || 'application.par';
34     my $engine = $options->{engine} || 'CGI';
35
36     # Check for PAR
37     eval "use PAR ()";
38     die "Please install PAR" if $@;
39     eval "use PAR::Packer ()";
40     die "Please install PAR::Packer" if $@;
41     eval "use App::Packer::PAR ()";
42     die "Please install App::Packer::PAR" if $@;
43     eval "use Module::ScanDeps ()";
44     die "Please install Module::ScanDeps" if $@;
45
46     my $par_test = File::Spec->catfile( $FindBin::Bin, '..', 'par_test.pl' );
47     unlink $par_test;
48
49     my $class    = $options->{class};
50     my $tmp_file = IO::File->new("> $par_test");
51     print $tmp_file <<"EOF";
52 BEGIN { \$ENV{CATALYST_ENGINE} = '$engine' };
53 use FindBin;
54 use lib 'lib';
55 use $class;
56 EOF
57     $tmp_file->close;
58
59 #    my $main = File::Spec->catfile( $FindBin::Bin, 'main.pl' );
60 #    unlink $main;
61
62 #    my $version   = $Catalyst::VERSION;
63 #    my $main_file = IO::File->new("> $main");
64 #    print $main_file <<"EOF";
65 #print "$class on Catalyst $version.\\n";
66 #EOF
67 #    $main_file->close;
68
69     chdir File::Spec->catdir( $FindBin::Bin, '..' );
70     my %opt = ( 'x' => 1, 'n' => 0, 'o' => $par, 'a' => ['.'] );
71     App::Packer::PAR->new(
72         frontend  => 'Module::ScanDeps',
73         backend   => 'PAR::Packer',
74         frontopts => \%opt,
75         backopts  => \%opt,
76         args => [ 'par_test.pl' ],
77     )->go;
78
79     unlink $par_test;
80 #    unlink $main;
81 }
82
83 =back
84
85 =head1 AUTHOR
86
87 Sebastian Riedel, C<sri@oook.de>
88
89 =head1 LICENSE
90
91 This library is free software, you can redistribute it and/or modify it under
92 the same terms as Perl itself.
93
94 =cut
95
96 1;