App-GHGen
view release on metacpan or search on metacpan
lib/App/GHGen/PerlCustomizer.pm view on Meta::CPAN
use Path::Tiny;
use Exporter 'import';
our @EXPORT_OK = qw(
detect_perl_requirements
generate_custom_perl_workflow
);
our $VERSION = '0.06';
=encoding utf-8
=head1 NAME
App::GHGen::PerlCustomizer - Customize Perl workflows based on project requirements
=head1 SYNOPSIS
use App::GHGen::PerlCustomizer qw(detect_perl_requirements);
my $requirements = detect_perl_requirements();
# Returns: { min_version => '5.036', has_cpanfile => 1, ... }
=head1 FUNCTIONS
=head2 detect_perl_requirements()
Detect Perl version requirements and dependency-file presence in the current directory.
=head3 Purpose
Inspect the current working directory for common Perl distribution files
(C<cpanfile>, C<Makefile.PL>, C<dist.ini>, C<Build.PL>) and extract the
minimum Perl version declared in any of them.
=head3 Arguments
None.
=head3 Returns
A hash reference with the following keys, all of which are always present:
{
min_version => Str | undef, # e.g. '5.036'; undef when undetected
has_cpanfile => Bool,
has_makefile_pl => Bool,
has_dist_ini => Bool,
has_build_pl => Bool,
}
=head3 Side Effects
Reads files from the current working directory.
=head3 Usage Example
use App::GHGen::PerlCustomizer qw(detect_perl_requirements);
my $reqs = detect_perl_requirements();
say $reqs->{min_version} // 'not specified';
=head3 API SPECIFICATION
=head4 Input
# No parameters.
=head4 Output
{
type => 'hashref',
keys => {
min_version => { type => 'scalar', optional => 1 },
has_cpanfile => { type => 'scalar' },
has_makefile_pl => { type => 'scalar' },
has_dist_ini => { type => 'scalar' },
has_build_pl => { type => 'scalar' },
},
}
=head3 FORMAL SPECIFICATION
detect_perl_requirements : â Requirements
Requirements â {
min_version: â¤* ⪠{ ⥠},
has_cpanfile: ð¹,
has_makefile_pl: ð¹,
has_dist_ini: ð¹,
has_build_pl: ð¹,
}
min_version â
cpanfile exists â§ version parseable from cpanfile â version
Makefile.PL exists â§ MIN_PERL_VERSION parseable â version
otherwise â â¥
=cut
sub detect_perl_requirements() {
my %reqs = (
min_version => undef,
has_cpanfile => 0,
has_makefile_pl => 0,
has_dist_ini => 0,
has_build_pl => 0,
);
# Check for dependency files
$reqs{has_cpanfile} = path('cpanfile')->exists;
$reqs{has_makefile_pl} = path('Makefile.PL')->exists;
$reqs{has_dist_ini} = path('dist.ini')->exists;
$reqs{has_build_pl} = path('Build.PL')->exists;
# Try to detect minimum Perl version
if ($reqs{has_cpanfile}) {
my $content = path('cpanfile')->slurp_utf8;
if ($content =~ /requires\s+['"]perl['"],?\s+['"]([0-9.]+)['"]/) {
$reqs{min_version} = $1;
}
( run in 1.404 second using v1.01-cache-2.11-cpan-9169edd2b0e )