App-MechaCPAN
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/MechaCPAN.pm view on Meta::CPAN
if $local_perl eq $this_perl;
my $real0 = rel_start_to_abs $0;
if ( !-e -r $real0 )
{
logmsg "Could not find '$0', not in '$starting_cwd' nor pwd '$cwd'";
info "Could not find '$0' in order to restart script";
return;
}
if (
$loaded_at_compile # IF we were loaded during compile-time
&& -e -x $local_perl # AND the local perl is there
&& -e -f -r $real0 # AND we are a readable file
&& !$^P # AND we're not debugging
)
{
# ReExecute using the local perl
my @inc_add;
my @paths = qw/
sitearchexp sitelibexp
vendorarchexp vendorlibexp
archlibexp privlibexp
otherlibdirsexp
/;
my %site_inc = map { $_ => 1 } @Config{@paths}, '.';
foreach my $lib ( split ':', $ENV{PERL5LIB} )
{
$site_inc{$lib} = 1;
$site_inc{"$lib/$Config{archname}"} = 1;
}
# If we are not a self-contained script, we should call self_install to
# make sure we are installed, by hook or by crook
if ( $INC{&_inc_pkg} =~ m/MechaCPAN[.]pm/ )
{
self_install($real0);
}
foreach my $lib (@INC)
{
push( @inc_add, $lib )
unless exists $site_inc{$lib};
}
# Make sure anything from PERL5LIB and local::lib are removed since it's
# most likely the wrong version as well.
@inc_add = grep { $_ !~ m/^$ENV{PERL_LOCAL_LIB_ROOT}/xms } @inc_add;
undef @ENV{qw/PERL_LOCAL_LIB_ROOT PERL5LIB/};
# If we've running, inform the new us that they are a restarted process
local $ENV{$restarted_key} = 1
if ${^GLOBAL_PHASE} eq 'RUN';
# Cleanup any files opened already. They arn't useful after we exec
File::Temp::cleanup();
info "Restarting to local perl\n";
info( join( " ", $local_perl, map( {"-I$_"} @inc_add ), $real0, @ARGV ) );
exec( $local_perl, map( {"-I$_"} @inc_add ), $real0, @ARGV );
}
}
1;
__END__
=encoding utf-8
=head1 NAME
App::MechaCPAN - Mechanize the installation of CPAN things.
=head1 SYNOPSIS
# Install 5.24 into local/perl/
user@host:~$ mechacpan perl 5.24
# Install Catalyst into local/
user@host:~$ mechacpan install Catalyst
# Install everything from the cpanfile into local/
# If cpanfile.snapshot exists, it will be consulted first
user@host:~$ mechacpan install
# Install perl and everything from the cpanfile into local/
# If cpanfile.snapshot exists, it will be consulted exclusivly
user@host:~$ mechacpan deploy
user@host:~$ zhuli do the thing
=head1 DESCRIPTION
App::MechaCPAN Mechanizes the installation of perl and CPAN modules.
It is designed to be small and focuses more on installing things in a self-contained manner. That means that everything is installed into a C<local/> directory.
MechaCPAN was created because installation of a self-contained deployment required at least 4 tools:
=over
=item plenv/Perl-Build or perlbrew to manage perl installations
=item cpanm to install packages
=item local::lib to use locally installed modules
=item carton to manage and deploy exact package versions
=back
In development these tools are invaluable, but when deploying a package, installing at least 4 packages from github, CPAN and the web just for a small portion of each tool is more than needed. App::MechaCPAN aims to be a single tool that can be used ...
App::MechaCPAN focuses on the aspects of these tools needed for deploying packages to a system. For instance, it will read and use carton's C<cpanfile.snapshot> files, but cannot create them. To create C<cpanfile.snapshot> files, you must use carton.
=head2 Should I use App::MechaCPAN instead of <tool>
Probably not, no. It can be used in place of some tools, but its focus is not on the features a developer needs. If your needs are very simple and you don't need many options, you might be able to get away with only using C<App::MechaCPAN>. However b...
=head1 USING FOR DEPLOYMENTS
=head2 COMMANDS
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.490 second using v1.00-cache-2.02-grep-82fe00e-cpan-d29e8ade9f55 )