Alien-Base-ModuleBuild
view release on metacpan or search on metacpan
lib/Alien/Base/ModuleBuild.pm view on Meta::CPAN
# refresh the packlist
$self->alien_refresh_packlist( $self->alien_library_destination );
}
}
#######################
# Pre-build Methods #
#######################
sub alien_check_installed_version {
my $self = shift;
my $command = $self->alien_version_check;
my %result = $self->do_system($command, {verbose => 0});
my $version = ($result{success} && $result{stdout}) || 0;
return $version;
}
sub alien_create_repositories {
my $self = shift;
## get repository specs
my $repo_default = $self->alien_repository_default;
my $repo_specs = $self->alien_repository;
# upconvert to arrayref if a single hashref is passed
if (ref $repo_specs eq 'HASH') {
$repo_specs = [ $repo_specs ];
}
my $module_env_part = uc $self->module_name;
$module_env_part =~ s/^ALIEN:://;
$module_env_part =~ s/::/_/g;
my $env_prefix = 'ALIEN_'.$module_env_part.'_REPO_';
# Catch e.g. 'ALIEN_MYMODULE_REPO_HTTP_HOST' variables to override repo config
my @env_overrides =
grep { index($_, $env_prefix) == 0 }
keys %ENV;
unless(@$repo_specs)
{
print STDERR "If you are the author of this Alien dist, you need to provide at least\n";
print STDERR "one repository in your Build.PL. See:\n";
print STDERR "https://metacpan.org/pod/Alien::Base::ModuleBuild::API#alien_repository\n";
croak "No repositories specified.";
}
my @repos;
foreach my $repo ( @$repo_specs ) {
#merge defaults into spec
foreach my $key ( keys %$repo_default ) {
next if defined $repo->{$key};
$repo->{$key} = $repo_default->{$key};
}
$repo->{platform} = 'src' unless defined $repo->{platform};
foreach my $var (@env_overrides) {
my $var_tail = lc substr($var, length($env_prefix));
my ($var_protocol, $var_key) = split /_/, $var_tail, 2;
if ($repo->{protocol} eq $var_protocol) {
$repo->{$var_key} = $ENV{$var};
}
}
push @repos, $self->alien_repository_class($repo->{protocol} || 'default')->new( $repo );
}
# check validation, including c compiler for src type
@repos =
grep { $self->alien_validate_repo($_) }
@repos;
unless (@repos) {
croak "No valid repositories available";
}
return @repos;
}
sub alien_validate_repo {
my $self = shift;
my ($repo) = @_;
my $platform = $repo->{platform};
# return true if platform is undefined
return 1 unless defined $platform;
# if $valid is src, check for c compiler
if ($platform eq 'src') {
return !$repo->{c_compiler_required} || $self->have_c_compiler;
}
# $valid is a string (OS) to match against
return $self->os_type eq $platform;
}
sub alien_library_destination {
my $self = shift;
# send the library into the blib if running under the blib scheme
my $lib_dir =
$self->notes('alien_blib_scheme') || $self->alien_stage_install
? File::Spec->catdir( $self->base_dir, $self->blib, 'lib' )
: $self->install_destination($self->alien_arch ? 'arch' : 'lib');
my $dist_name = $self->dist_name;
my $dest = _catdir( $lib_dir, qw/auto share dist/, $dist_name );
return $dest;
}
# CPAN testers often run tests without installing modules, but rather add
# blib dirs to @INC, this is a problem, so here we try to deal with it
sub alien_detect_blib_scheme {
my $self = shift;
return 0 if $self->alien_stage_install;
( run in 2.044 seconds using v1.01-cache-2.11-cpan-98e64b0badf )