Koha/C4/Installer/PerlModules.pm
Jonathan Druart 7d8b96803f
Bug 24545: Fix license statements
Bug 9978 should have fixed them all, but some were missing.
We want all the license statements part of Koha to be identical, and
using the GPLv3 statement.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
2020-02-24 13:31:26 +00:00

206 lines
6 KiB
Perl

package C4::Installer::PerlModules;
use warnings;
use strict;
use File::Spec;
use File::Basename;
use Module::CPANfile;
sub new {
my $invocant = shift;
my $self = {
missing_pm => [],
upgrade_pm => [],
current_pm => [],
};
my $type = ref($invocant) || $invocant;
bless ($self, $type);
return $self;
}
sub prereqs {
my $self = shift;
unless (defined $self->{prereqs}) {
my $filename = $INC{'C4/Installer/PerlModules.pm'};
my $path = dirname(dirname(dirname($filename)));
$self->{prereqs} = Module::CPANfile->load("$path/cpanfile")->prereqs;
}
return $self->{prereqs};
}
sub prereq_pm {
my $self = shift;
my $prereq_pm = {};
my $reqs = $self->prereqs->merged_requirements;
foreach my $module ($reqs->required_modules) {
$prereq_pm->{$module} = $reqs->requirements_for_module($module);
}
return $prereq_pm;
}
sub versions_info {
my $self = shift;
# Reset these arrayref each pass through to ensure current information
$self->{'missing_pm'} = [];
$self->{'upgrade_pm'} = [];
$self->{'current_pm'} = [];
foreach my $phase ($self->prereqs->phases) {
foreach my $type ($self->prereqs->types_in($phase)) {
my $reqs = $self->prereqs->requirements_for($phase, $type);
foreach my $module ($reqs->required_modules) {
no warnings; # perl throws warns for invalid $VERSION numbers which some modules use
my $module_infos = {
cur_ver => 0,
required => $type eq 'requires',
};
my $vers = $reqs->structured_requirements_for_module($module);
for my $req (@$vers) {
if ( $req->[0] eq '>=' || $req->[0] eq '>' ) {
$module_infos->{min_ver} = $req->[1];
} elsif ( $req->[0] eq '<=' || $req->[0] eq '<' ) {
$module_infos->{max_ver} = $req->[1];
} else {
push @{$module_infos->{exc_ver}}, $req->[1];
}
}
my $attr;
$Readonly::XS::MAGIC_COOKIE="Do NOT use or require Readonly::XS unless you're me.";
eval "require $module";
if ($@) {
$attr = 'missing_pm';
} else {
my $pkg_version = $module->can("VERSION") ? $module->VERSION : 0;
$module_infos->{cur_ver} = $pkg_version;
if ($reqs->accepts_module($module => $pkg_version)) {
$attr = 'current_pm';
} else {
$attr = 'upgrade_pm';
}
}
push @{ $self->{$attr} }, { $module => $module_infos };
}
}
}
}
sub get_attr {
return $_[0]->{$_[1]};
}
1;
__END__
=head1 NAME
C4::Installer::PerlModules
=head1 ABSTRACT
A module for manipulating Koha Perl dependency list objects.
=head1 METHODS
=head2 new()
Creates a new PerlModules object
example:
C<my $perl_modules = C4::Installer::PerlModules->new;>
=head2 prereq_pm()
Returns a hashref of a hash of module information suitable for use in Makefile.PL
example:
C<my $perl_modules = C4::Installer::PerlModules->new;
...
PREREQ_PM => $perl_modules->prereq_pm,>
=head2 versions_info
C<$perl_modules->versions_info;>
This loads info of required modules into three accessors: missing_pm,
upgrade_pm, and current_pm. Each of these may be accessed by using the
C<get_attr> method. Each accessor returns an anonymous array who's
elements are anonymous hashes. They follow this format (NOTE: Upgrade
status is indicated by the accessor name.):
[
{
'Text::CSV::Encoded' => {
'required' => 1,
'cur_ver' => 0.09,
'min_ver' => '0.09'
}
},
{
'Biblio::EndnoteStyle' => {
'required' => 1,
'cur_ver' => 0,
'min_ver' => '0.05'
}
},
}
=head2 get_attr(attr_name)
Returns an anonymous array containing the contents of the passed in accessor. Valid accessors are:
missing_pm - Perl modules used by Koha but not currently installed.
upgrade_pm - Perl modules currently installed but below the minimum version required by Koha.
current_pm - Perl modules currently installed and up to date as required by Koha.
example:
C<my $missing_pm = $perl_modules->get_attr('missing_pm');>
=head1 AUTHOR
Chris Nighswonger <cnighswonger AT foundations DOT edu>
=head1 COPYRIGHT
Copyright 2010 Foundations Bible College.
=head1 LICENSE
This file is part of Koha.
Koha is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
Koha is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Koha; if not, see <http://www.gnu.org/licenses>.
=head1 DISCLAIMER OF WARRANTY
Koha is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
=cut