Alien-MSYS
view release on metacpan or search on metacpan
if($^O eq 'MSWin32')
{
my $ver;
my $err;
{
local $@;
$err = $@ || 'Error' unless eval {
require Win32;
$ver = (Win32::GetOSVersion())[1];
};
}
if($err || $ver < 6)
{
print "Please upgrade to Windows 7 or better (ideally Windows 10).\n";
print "The native crypto libraries on Windows XP, used by mingw-gwt\n";
print "no longer work with sourceforge.\n";
exit;
}
else
{
log "Windows major version $ver ok.\n";
}
}
configure {
requires 'Alien::Build' => '0.99';
requires 'Path::Tiny' => 0;
requires 'File::Glob' => 0;
};
my @exes_to_check = qw( sh.exe perl.exe m4.exe mktemp.exe readlink.exe );
sub msys_is_okay
{
my($dir) = @_;
-d path($dir)
&& (
all { -x path($dir)->child($_ ) } @exes_to_check
)
}
probe sub {
my($build) = @_;
if($^O eq 'MSWin32' || $ENV{PERL_ALIEN_MSYS_FAUX})
{
return 'share'
if defined $ENV{ALIEN_MSYS_INSTALL_TYPE} && $ENV{ALIEN_MSYS_INSTALL_TYPE} eq 'share';
if(defined $ENV{PERL_ALIEN_MSYS_BIN})
{
if(msys_is_okay($ENV{PERL_ALIEN_MSYS_BIN}))
{
$build->runtime_prop->{my_type} = 'PERL_ALIEN_MSYS_BIN';
$build->runtime_prop->{my_bin} = path($ENV{PERL_ALIEN_MSYS_BIN})->stringify;
return 'system';
}
}
if(my $uname_exe = which('uname'))
{
my $bin_dir = path($uname_exe)->parent->stringify;
my $uname = `$uname_exe`;
if($uname =~ /^(MSYS|MINGW(32|64))_NT/ && msys_is_okay($bin_dir)) {
$build->runtime_prop->{my_type} = 'found uname in PATH';
$build->runtime_prop->{my_bin} = $bin_dir;
return 'system';
}
}
if(my $mingw_get = which('mingw-get.exe'))
{
my $bin_dir = path($mingw_get)->parent->parent->child('msys/1.0/bin')->stringify;
if(msys_is_okay($bin_dir))
{
$build->runtime_prop->{my_type} = 'relative to mingw-get.exe';
$build->runtime_prop->{my_bin} = $bin_dir;
return 'system';
}
}
foreach my $maybe (qw( C:\MinGW\msys\1.0\bin ))
{
my $bin_dir = path($maybe)->stringify;
if(msys_is_okay($bin_dir))
{
$build->runtime_prop->{my_type} = 'default install location';
$build->runtime_prop->{my_bin} = $bin_dir;
return 'system';
}
}
my $path = eval {
require Win32;
require Win32::Shortcut;
my $lnk_name = path(Win32::GetFolderPath(Win32::CSIDL_DESKTOP(), 1))->child('MinGW Installer.lnk')->canonpath;
die "No MinGW Installer.lnk" unless -r $lnk_name;
my $lnk = Win32::Shortcut->new;
$lnk->Load($lnk_name);
my $mingw_get = path($lnk->{Path});
my $bin_dir = path($mingw_get)->parent->child('msys/1.0/bin');
if(msys_is_okay($bin_dir))
{
$build->runtime_prop->{my_type} = 'MinGW Installer shortcut';
$build->runtime_prop->{my_bin} = $bin_dir;
return 'system';
}
};
return 'share';
}
else
{
return 'system';
}
};
share {
meta->prop->{start_url} = 'https://sourceforge.net/projects/mingw/files/Installer/mingw-get/';
plugin 'Download';
plugin 'Decode::Mojo';
plugin 'Decode::SourceForge';
plugin 'Extract' => 'zip';
download sub {
my($build) = @_;
$build->log("GET @{[ meta->prop->{start_url} ]}");
my $mingw_get_index_url = do {
my $ret = $build->decode($build->fetch);
my($first) = grep { $_->{filename} =~ /mingw-get-.*?-([0-9]{8})-([0-9]+)/ } @{ $ret->{list} };
die 'unable to find the correct directory for mingw-get' unless $first;
$first->{url};
};
$build->log("GET $mingw_get_index_url");
my $mingw_get_url = do {
my $ret = $build->decode($build->fetch($mingw_get_index_url));
my($first) = grep { $_->{filename} =~ /mingw-get-.*?-bin.zip/ } @{ $ret->{list} };
$first->{url};
};
$build->log("GET $mingw_get_url");
{
my $ret = $build->fetch($mingw_get_url);
if(defined $ret->{content})
{
path($ret->{filename})->spew_raw($ret->{content});
}
elsif(defined $ret->{path})
{
my $from = path($ret->{path});
my $to = $ret->{filename};
if($ret->{tmp})
{
( run in 0.465 second using v1.01-cache-2.11-cpan-385001e3568 )