Alien-xmake
view release on metacpan or search on metacpan
builder/xmake.pm view on Meta::CPAN
open my $fh, '<', $file or die;
local $/ = undef;
my $cont = <$fh>;
close $fh;
return $cont;
}
# Module::Build subclass
sub ACTION_xmake_install {
my ($s) = @_;
#~ ddx $s->config_data;
return 1 if $s->config_data('xmake_install');
#
my $os = $s->os_type; # based on Perl::OSType
if ( !defined $os ) {
$s->log_warn(
q[Whoa. Perl has no idea what this OS is so... let's try installing with a shell script and hope for the best!]
);
exit 1;
}
elsif ( $os eq 'Windows' ) {
$s->config_data( xmake_type => 'share' );
my $installer = $s->download( $installer_exe, 'xmake_installer.exe' );
my $dest = File::Spec->rel2abs(
File::Spec->catdir( $s->base_dir, @{ $s->share_dir->{dist} } ) );
$s->log_info(qq[Running installer [$installer]...\n]);
$s->do_system( $installer, '/NOADMIN', '/S', '/D=' . $dest );
$s->log_info(qq[Installed to $dest\n]);
push @PATH, $dest;
my $xmake = $s->locate_xmake();
$s->config_data( xmake_type => 'share' );
$s->gather_info($xmake);
$s->config_data( xmake_install => $dest );
# D:\a\_temp\1aa1c77c-ff7b-41bc-8899-98e4cd421618.exe /NOADMIN /S /D=C:\Users\RUNNER~1\AppData\Local\Temp\xmake-15e5f277191e8a088998d0f797dd1f44b5491e17
#~ $s->warn_info('Windows is on the todo list');
#~ exit 1;
}
else {
unshift @PATH, 'share/bin';
my $xmake = $s->locate_xmake();
if ($xmake) {
$s->config_data( xmake_type => 'system' );
}
else {
$s->build_from_source();
$xmake = $s->locate_xmake();
#
$s->config_data( xmake_type => 'share' );
}
$s->config_data( xmake_install => $xmake );
$s->gather_info($xmake);
return File::Spec->rel2abs($xmake);
}
}
sub ACTION_code {
my ($s) = @_;
$s->depends_on('xmake_install');
$s->SUPER::ACTION_code;
}
sub sudo { # `id -u`;
CORE::state $sudo;
return $sudo if defined $sudo;
$sudo = 'sudo' if !system 'sudo', '--version';
$sudo //= '';
return $sudo;
}
sub package_installer {
CORE::state $pkg;
return $pkg if defined $pkg;
my %options = (
apt => 'apt --version', # debian, etc.
yum => 'apt --version',
zypper => 'zypper --version',
pacman => 'pacman -V', # arch, etc.
emerge => 'emerge -V', # Gentoo
pkg_termux => 'pkg list-installed', # termux (Android)
pkg_bsd => 'pkg help', # freebsd
nixos => 'nix-env --version',
apk => 'apk --version',
xbps => 'xbps-install --version',
scoop => 'scoop --version', # Windows
winget => 'winget --version', # Windows
brew => 'brew --version', # MacOS
dnf => 'dnf --help', # Fedora, RHEL, OpenSUSE, CentOS
);
warn 'Looking for package manager...';
no warnings 'exec';
for my $plat ( keys %options ) {
if ( system( $options{$plat} ) == 0 ) {
$pkg = $plat;
return $pkg;
}
}
}
sub build_from_source {
my $s = shift;
# get make
my $make;
{
for (qw[make gmake]) {
if ( `$_ --version` =~ /GNU Make/ ) {
$make = $_;
last;
}
}
$make // warn 'Please install gmake';
}
my $compiler;
{
my ( $fh, $filename ) = tempfile();
syswrite $fh, "#include <stdio.h>\nint main(){return 0;}";
for (qw[gcc cc clang]) {
if ( !system $_, qw'-x c', $filename,
qw'-o /dev/null -I/usr/include -I/usr/local/include' ) {
( run in 0.765 second using v1.01-cache-2.11-cpan-39bf76dae61 )