App-cpan2arch
view release on metacpan or search on metacpan
lib/App/cpan2arch.pm view on Meta::CPAN
use v5.42.0;
use strict;
use warnings;
no source::encoding; # Avoid dying on v5.42.0 (non-ASCII char in POD).
use Object::Pad 0.825;
package App::cpan2arch; # For toolchain compatibility.
class App::cpan2arch
:does(App::cpan2arch::GetMetadata)
:does(App::cpan2arch::MergePrereqs)
:does(App::cpan2arch::CheckPackages)
:does(App::cpan2arch::WritePkgbuild);
use File::Basename qw< basename >;
use version;
our $VERSION = 'v1.1.2';
field %_env :reader :writer = (
user_agent => "App::cpan2arch/$VERSION",
cache_mcpan_path => '/tmp/mcpan_cache',
cache_arch_path => '/tmp/arch_cache',
cache_expiration => '1d',
);
field $_prog :reader = basename($0);
field %_opts :reader;
field %_args :reader;
method init (@argv)
{
_exit( $self->_process_env->_process_opts( \@argv ) );
return $self;
}
method run ()
{
$self->_psub;
# Non-interactive TTY must not display this.
print STDERR "Generating PKGBUILD...\n" if -t STDOUT;
_exit( $self->get_metadata );
_exit( $self->merge_prereqs );
_exit( $self->check_packages );
_exit( $self->generate_pkgbuild->write_pkgbuild );
return 0;
}
# Process environment variables.
method _process_env ()
{
$_env{packager} = $ENV{PACKAGER} // 'Your Name <email@domain.tld>';
$_env{user_agent} = $ENV{C2A_USER_AGENT} if defined $ENV{C2A_USER_AGENT};
$_env{cache_mcpan_path} = $ENV{C2A_CACHE_MCPAN_PATH} if defined $ENV{C2A_CACHE_MCPAN_PATH};
$_env{cache_arch_path} = $ENV{C2A_CACHE_ARCH_PATH} if defined $ENV{C2A_CACHE_ARCH_PATH};
$_env{cache_expiration} = $ENV{C2A_CACHE_EXPIRATION} if defined $ENV{C2A_CACHE_EXPIRATION};
$_env{cache_ignore} = $ENV{C2A_CACHE_IGNORE} ? true : false;
$_env{debug} = $ENV{C2A_DEBUG} ? true : false;
try {
if ( $_env{debug} ) {
require Data::Printer;
Data::Printer->VERSION('1.002001');
}
}
catch ($e) {
warn $e;
warn "$_prog: Data::Printer is required to display debug information\n";
exit 1;
}
$self->_psub;
$self->_pdump( '%_env', \%_env, "\n" );
return $self;
}
# Process options and its arguments.
method _process_opts ( $argv = undef )
{
$self->_psub;
return 0 unless defined $argv;
# Transform Getopt::Long error warns.
local $SIG{__WARN__} = sub {
chomp( my $msg = shift );
$msg =~ tr{"}{'};
$msg = lcfirst $msg;
warn "$_prog: $msg\n";
};
# Bash completion
try {
require Getopt::Long::More;
Getopt::Long::More->VERSION('0.007');
Getopt::Long::More->import( qw< GetOptionsFromArray > );
Getopt::Long::More::Configure(
qw<
default
gnu_getopt
no_ignore_case
>
);
}
catch ($e) {
# Use Getopt::Long as fallback.
require Getopt::Long;
( run in 2.194 seconds using v1.01-cache-2.11-cpan-7fcb06a456a )