File Coverage

blib/lib/ExtUtils/InstallPAR.pm
Criterion Covered Total %
statement 13 37 35.1
branch 0 8 0.0
condition 0 2 0.0
subroutine 5 6 83.3
pod 1 1 100.0
total 19 54 35.1


line stmt bran cond sub pod time code
1             package ExtUtils::InstallPAR;
2 1     1   734 use strict;
  1         2  
  1         40  
3 1     1   6 use vars qw/$VERSION @ISA @EXPORT_OK %EXPORT_TAGS/;
  1         2  
  1         88  
4             BEGIN {
5 1     1   26 $VERSION = '0.03';
6             }
7              
8 1     1   5 use Config;
  1         2  
  1         43  
9 1     1   5 use Carp qw/croak/;
  1         2  
  1         617  
10             require PAR::Dist;
11             require Config;
12             require File::Spec;
13             require Exporter;
14             @ISA = qw(Exporter);
15             %EXPORT_TAGS = ('all' => [qw(install)]);
16             @EXPORT_OK = @{$EXPORT_TAGS{all}};
17              
18             =head1 NAME
19              
20             ExtUtils::InstallPAR - Install .par's into any installed perl
21              
22             =head1 SYNOPSIS
23              
24             use ExtUtils::InstallPAR;
25            
26             # Install into the currently running perl:
27             ExtUtils::InstallPAR::install(
28             par => './Foo-Bar-0.01-MSWin32-multi-thread-5.10.0.par',
29             );
30            
31             # Install into a different perl on the system,
32             # this requires the ExtUtils::Infer module.
33             ExtUtils::InstallPAR::install(
34             par => './Foo-Bar-0.01-MSWin32-multi-thread-5.10.0.par',
35             perl => '/path/to/perl.exe',
36             );
37            
38             # If LWP::Simple is available, it works with URLs, too:
39             ExtUtils::InstallPAR::install(
40             par => 'http://foo.com/Foo-Bar-0.01-MSWin32-multi-thread-5.10.0.par',
41             );
42              
43             =head1 DESCRIPTION
44              
45             This module installs PAR distributions (i.e. C<.par> files) into
46             any perl installation on the system. The L module can
47             install into the currently running perl by default and provides
48             the necessary parameters to override any installation directories.
49             Figuring out how to use those overrides in order to install into
50             an arbitrary perl installation on the system may be beyond most users,
51             however. Hence this convenience wrapper using L
52             to automatically determine the typical I installation paths
53             of any perl interpreter than can be executed by the current user.
54              
55             =head1 FUNCTIONS
56              
57             =head2 install
58              
59             Install a PAR archive into any perl on the system. Takes named parameters:
60              
61             C '/path/to/foo.par'> or C 'http://URL/to/foo.par'>
62             specifies the path to the .par file to install or an URL to fetch it from
63             (of LWP::Simple is available). This parameter is mandatory.
64              
65             The C '/path/to/perl'> parameter can be used to specify
66             the perl interpreter to install into. If you omit this option or set
67             it to C, the currently running perl will be used as target.
68             If you want to install into different perls, you will need to
69             install the C module.
70              
71             C $value> can be used to set the verbosity of the
72             installation process. Defaults to C<1>.
73              
74             =cut
75              
76             sub install {
77 0 0   0 1   shift if $_[0] =~ __PACKAGE__;
78 0           my %args = @_;
79              
80 0           my $par = $args{par};
81 0           my $perl = $args{perl};
82 0   0       my $verbosity = $args{verbosity} || 0;
83 0 0         if (not defined $par) {
84 0           croak(__PACKAGE__."::install requires a 'par' parameter");
85             }
86              
87 0           my $name = $par;
88 0           $name =~ s/^\w+:\/\///;
89 0           my @name_elems = PAR::Dist::parse_dist_name($name);
90 0 0         if (2 <= grep {defined} @name_elems) {
  0            
91 0           $name = join('-', @name_elems);
92             }
93             else {
94 0           (undef, undef, my $file) = File::Spec->splitpath($name);
95 0           $name = $file;
96 0           $name =~ s/\.par$//i;
97             }
98              
99 0           my $config;
100 0 0         if (defined $perl) {
101 0           require ExtUtils::InferConfig;
102 0           my $eic = ExtUtils::InferConfig->new(
103             perl => $perl,
104             );
105              
106 0           $config = $eic->get_config();
107             }
108             else {
109 0           $config = \%Config::Config;
110             }
111              
112 0           my $par_target = {
113             inst_lib => $config->{installsitelib},
114             inst_archlib => $config->{installsitearch},
115             inst_bin => $config->{installbin},
116             inst_script => $config->{installscript},
117             inst_man1dir => $config->{installman1dir},
118             inst_man3dir => $config->{installman3dir},
119             packlist_write => $config->{sitearchexp} . "/auto/$name/.packlist",
120             packlist_read => $config->{sitearchexp} . "/auto/$name/.packlist",
121             };
122              
123            
124 0           return PAR::Dist::install_par(
125             name => $name,
126             dist => $par,
127             %$par_target,
128             auto_inst_lib_conversion => 1,
129             );
130             }
131              
132             1;
133             __END__