summaryrefslogtreecommitdiffstats
path: root/lib/Lintian/Data.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Lintian/Data.pm')
-rw-r--r--lib/Lintian/Data.pm354
1 files changed, 354 insertions, 0 deletions
diff --git a/lib/Lintian/Data.pm b/lib/Lintian/Data.pm
new file mode 100644
index 0000000..6a0b227
--- /dev/null
+++ b/lib/Lintian/Data.pm
@@ -0,0 +1,354 @@
+# Copyright (C) 2011 Niels Thykier <niels@thykier.net>
+# Copyright (C) 2018 Chris Lamb <lamby@debian.org>
+# Copyright (C) 2021 Felix Lechner
+# Copyright (C) 2022 Axel Beckert
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program. If not, you can find it on the World Wide
+# Web at https://www.gnu.org/copyleft/gpl.html, or write to the Free
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+package Lintian::Data;
+
+use v5.20;
+use warnings;
+use utf8;
+
+use Carp qw(croak);
+use Unicode::UTF8 qw(encode_utf8);
+
+use Lintian::Data::Architectures;
+use Lintian::Data::Archive::AutoRejection;
+use Lintian::Data::Archive::Sections;
+use Lintian::Data::Buildflags::Hardening;
+use Lintian::Data::Debhelper::Addons;
+use Lintian::Data::Debhelper::Commands;
+use Lintian::Data::Debhelper::Levels;
+use Lintian::Data::Fonts;
+use Lintian::Data::InitD::VirtualFacilities;
+use Lintian::Data::Policy::Releases;
+use Lintian::Data::Provides::MailTransportAgent;
+use Lintian::Data::Stylesheet;
+use Lintian::Data::Traditional;
+
+use Moo;
+use namespace::clean;
+
+with 'Lintian::Data::Authorities';
+
+=head1 NAME
+
+Lintian::Data - Data parser for Lintian
+
+=head1 SYNOPSIS
+
+ my $profile = Lintian::Data->new (vendor => 'debian');
+
+=head1 DESCRIPTION
+
+Lintian::Data handles finding, parsing and implementation of Lintian Data
+
+=head1 INSTANCE METHODS
+
+=over 4
+
+=item vendor
+
+=item data_paths
+
+=item data_cache
+
+=cut
+
+has vendor => (is => 'rw');
+
+has data_paths => (
+ is => 'rw',
+ coerce => sub { my ($arrayref) = @_; return ($arrayref // []); },
+ default => sub { [] }
+);
+
+has data_cache => (
+ is => 'rw',
+ coerce => sub { my ($hashref) = @_; return ($hashref // {}); },
+ default => sub { {} }
+);
+
+=item load
+
+=cut
+
+sub load {
+ my ($self, $location, $separator) = @_;
+
+ croak encode_utf8('no data type specified')
+ unless $location;
+
+ unless (exists $self->data_cache->{$location}) {
+
+ my $cache = Lintian::Data::Traditional->new;
+ $cache->location($location);
+ $cache->separator($separator);
+
+ $cache->load($self->data_paths, $self->vendor);
+
+ $self->data_cache->{$location} = $cache;
+ }
+
+ return $self->data_cache->{$location};
+}
+
+=item all_sources
+
+=cut
+
+sub all_sources {
+ my ($self) = @_;
+
+ my @sources = (
+ $self->architectures,$self->auto_rejection,
+ $self->debhelper_addons,$self->debhelper_commands,
+ $self->debhelper_levels,$self->fonts,
+ $self->hardening_buildflags,$self->mail_transport_agents,
+ $self->policy_releases,$self->sections,
+ #$self->style_sheet,
+ $self->virtual_initd_facilities
+ );
+
+ return @sources;
+}
+
+=item architectures
+
+=cut
+
+has architectures => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $architectures = Lintian::Data::Architectures->new;
+ $architectures->load($self->data_paths, $self->vendor);
+
+ return $architectures;
+ }
+);
+
+=item auto_rejection
+
+=cut
+
+has auto_rejection => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $auto_rejection = Lintian::Data::Archive::AutoRejection->new;
+ $auto_rejection->load($self->data_paths, $self->vendor);
+
+ return $auto_rejection;
+ }
+);
+
+=item debhelper_addons
+
+=cut
+
+has debhelper_addons => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $addons = Lintian::Data::Debhelper::Addons->new;
+ $addons->load($self->data_paths, $self->vendor);
+
+ return $addons;
+ }
+);
+
+=item debhelper_commands
+
+=cut
+
+has debhelper_commands => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $commands = Lintian::Data::Debhelper::Commands->new;
+ $commands->load($self->data_paths, $self->vendor);
+
+ return $commands;
+ }
+);
+
+=item debhelper_levels
+
+=cut
+
+has debhelper_levels => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $levels = Lintian::Data::Debhelper::Levels->new;
+ $levels->load($self->data_paths, $self->vendor);
+
+ return $levels;
+ }
+);
+
+=item fonts
+
+=cut
+
+has fonts => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $fonts = Lintian::Data::Fonts->new;
+ $fonts->load($self->data_paths, $self->vendor);
+
+ return $fonts;
+ }
+);
+
+=item hardening_buildflags
+
+=cut
+
+has hardening_buildflags => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $buildflags = Lintian::Data::Buildflags::Hardening->new;
+ $buildflags->load($self->data_paths, $self->vendor);
+
+ return $buildflags;
+ }
+);
+
+=item mail_transport_agents
+
+=cut
+
+has mail_transport_agents => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $manual = Lintian::Data::Provides::MailTransportAgent->new;
+ $manual->load($self->data_paths, $self->vendor);
+
+ return $manual;
+ }
+);
+
+=item policy_releases
+
+=cut
+
+has policy_releases => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $releases = Lintian::Data::Policy::Releases->new;
+ $releases->load($self->data_paths, $self->vendor);
+
+ return $releases;
+ }
+);
+
+=item sections
+
+=cut
+
+has sections => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $sections = Lintian::Data::Archive::Sections->new;
+ $sections->load($self->data_paths, $self->vendor);
+
+ return $sections;
+ }
+);
+
+=item style_sheet
+
+=cut
+
+has style_sheet => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $stylesheets = Lintian::Data::Stylesheet->new;
+ $stylesheets->load($self->data_paths, $self->vendor);
+
+ return $stylesheets;
+ }
+);
+
+=item virtual_initd_facilities
+
+=cut
+
+has virtual_initd_facilities => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+
+ my $facilities = Lintian::Data::InitD::VirtualFacilities->new;
+ $facilities->load($self->data_paths, $self->vendor);
+
+ return $facilities;
+ }
+);
+
+=back
+
+=head1 AUTHOR
+
+Originally written by Niels Thykier <niels@thykier.net> for Lintian.
+
+=head1 SEE ALSO
+
+lintian(1)
+
+=cut
+
+1;
+
+# Local Variables:
+# indent-tabs-mode: nil
+# cperl-indent-level: 4
+# End:
+# vim: syntax=perl sw=4 sts=4 sr et