App-BundleDeps
view release on metacpan or search on metacpan
lib/App/BundleDeps.pm view on Meta::CPAN
package App::BundleDeps;
use strict;
use warnings;
use local::lib ();
use Cwd ();
use ExtUtils::MakeMaker;
use File::Spec;
our $VERSION = '0.00006';
sub new {
my ($class, @args) = @_;
return bless {
extlib => File::Spec->catdir(File::Spec->curdir, 'extlib'),
notest => 1,
@args
}, $class;
}
# XXX - accessors inlined for minimal setup
sub extlib {
my $self = shift;
$self->{extlib} = shift if @_;
return $self->{extlib};
}
sub notest {
my $self = shift;
$self->{notest} = shift if @_;
return $self->{notest};
}
sub deps {
my $self = shift;
$self->{deps} = shift if @_;
return $self->{deps};
}
# given a META.yml file (if no arguments, looks for a META.yml in the current
# directory), does the proper dep bundling
sub bundle_from_meta {
my ($self, $file) = @_;
$file ||= 'META.yml';
require YAML;
require YAML::Dumper; # yeah, really, wtf
my $meta = eval {
YAML::LoadFile($file)
};
if (! $meta || $@) {
$@ ||= 'Unknown reason';
die "Failed to load file $file: $@."
}
my $requires = $meta->{requires} || {};
my $build_requires = $meta->{build_requires} || {};
my %deps = (%{ $requires }, %{ $build_requires });
$self->setup_deps(keys %deps);
$self->bundle();
}
sub bundle_modules {
my($self, @modules) = @_;
$self->setup_deps(@modules);
$self->bundle();
}
sub setup_deps {
my ($self, @deps) = @_;
@deps = grep { $_ ne 'perl' } sort @deps;
$self->deps(\@deps);
}
sub bundle {
my $self = shift;
$self->bundle_deps();
}
sub bundle_deps {
my $self = shift;
$ENV{PERL5LIB} = ''; # detach existent local::lib
local::lib->setup_local_lib_for( Cwd::abs_path( $self->extlib ) );
# wtf: ExtUtils::MakeMaker shipped with Leopard is old
if ($ExtUtils::MakeMaker::VERSION < 6.31) {
$ENV{PERL_MM_OPT} =~ s/INSTALL_BASE=(.*)/$& INSTALLBASE=$1/;
}
# no man pages TODO: do the same with Module::Build
$ENV{PERL_MM_OPT} .= " INSTALLMAN1DIR=none INSTALLMAN3DIR=none";
$ENV{PERL_MM_USE_DEFAULT} = 1;
# Remove /opt from PATH: end users won't have ports
$ENV{PATH} = join ":", grep !/^\/opt/, split /:/, $ENV{PATH};
( run in 2.212 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )