Alien-Build
view release on metacpan or search on metacpan
lib/Alien/Build/Util.pm view on Meta::CPAN
#
# options:
# - filter -> regex for files that should match
# - empty_directory -> if true, create all directories, including empty ones.
# - verbose -> turn on verbosity
sub _mirror
{
my($src_root, $dst_root, $opt) = @_;
($src_root, $dst_root) = map { path($_) } ($src_root, $dst_root);
$opt ||= {};
require Alien::Build;
require File::Find;
require File::Copy;
File::Find::find({
wanted => sub {
next unless -e $File::Find::name;
my $src = path($File::Find::name)->relative($src_root);
return if $opt->{filter} && "$src" !~ $opt->{filter};
return if "$src" eq '.';
my $dst = $dst_root->child("$src");
$src = $src->absolute($src_root);
if(-l "$src")
{
unless(-d $dst->parent)
{
Alien::Build->log("mkdir -p @{[ $dst->parent ]}") if $opt->{verbose};
$dst->parent->mkpath;
}
# TODO: rmtree if a directory?
if(-e "$dst")
{ unlink "$dst" }
my $target = readlink "$src";
Alien::Build->log("ln -s $target $dst") if $opt->{verbose};
symlink($target, $dst) || die "unable to symlink $target => $dst";
}
elsif(-d "$src")
{
if($opt->{empty_directory})
{
unless(-d $dst)
{
Alien::Build->log("mkdir $dst") if $opt->{verbose};
mkdir($dst) || die "unable to create directory $dst: $!";
}
}
}
elsif(-f "$src")
{
unless(-d $dst->parent)
{
Alien::Build->log("mkdir -p @{[ $dst->parent ]}") if $opt->{verbose};
$dst->parent->mkpath;
}
# TODO: rmtree if a directory?
if(-e "$dst")
{ unlink "$dst" }
Alien::Build->log("cp $src $dst") if $opt->{verbose};
File::Copy::cp("$src", "$dst") || die "copy error $src => $dst: $!";
if($] < 5.012 && -x "$src" && $^O ne 'MSWin32')
{
# apparently Perl 5.8 and 5.10 do not preserver perms
my $mode = [stat "$src"]->[2] & oct(777);
eval { chmod $mode, "$dst" };
}
}
},
no_chdir => 1,
}, "$src_root");
();
}
sub _dump
{
if(eval { require YAML })
{
return YAML::Dump(@_);
}
else
{
require Data::Dumper;
return Data::Dumper::Dumper(@_);
}
}
sub _destdir_prefix
{
my($destdir, $prefix) = @_;
$prefix =~ s{^/?([a-z]):}{$1}i if $^O eq 'MSWin32';
path($destdir)->child($prefix)->stringify;
}
sub _perl_config
{
my($key) = @_;
$Config{$key};
}
sub _ssl_reqs
{
return {
'Net::SSLeay' => '1.49',
'IO::Socket::SSL' => '1.56',
};
}
sub _has_ssl
{
my %reqs = %{ _ssl_reqs() };
eval {
require Net::SSLeay;
die "need Net::SSLeay $reqs{'Net::SSLeay'}" unless Net::SSLeay->VERSION($reqs{'Net::SSLeay'});
require IO::Socket::SSL;
die "need IO::Socket::SSL $reqs{'IO::Socket::SSL'}" unless IO::Socket::SSL->VERSION($reqs{'IO::Socket::SSL'});
};
$@ eq '';
}
( run in 1.645 second using v1.01-cache-2.11-cpan-8644d7adfcd )