/usr/share/lintian/checks/infofiles is in lintian 2.5.6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # infofiles -- lintian check script -*- perl -*-
# Copyright (C) 1998 Christian Schwarz
# Copyright (C) 2001 Josip Rodin
#
# 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 http://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::infofiles;
use strict;
use warnings;
use Lintian::Tags qw(tag);
use Util;
use File::Basename qw(fileparse);
sub run {
my $pkg = shift;
my $type = shift;
my $info = shift;
my $has_info_file;
# Read package contents...
foreach my $file (@{$info->sorted_index}) {
my $index_info = $info->index->{$file};
my $file_info = $info->file_info->{$file};
my $link = $index_info->{link} || '';
my ($fname, $path) = fileparse($file);
next unless ($index_info->{type} =~ m,^[\-lh],o)
and ($path =~ m,^usr/share/info/, or $path =~ m,^usr/info/,);
# Ignore dir files. That's a different error which we already catch in
# the files check.
next if $fname =~ /^dir(?:\.old)?(?:\.gz)?/;
# Note that this package contains at least one info file.
$has_info_file = 1;
# Analyze the file names making sure the documents are named properly.
# Note that Emacs 22 added support for images in info files, so we have to
# accept those and ignore them. Just ignore .png files for now.
my @fname_pieces = split /\./, $fname;
my $ext = pop @fname_pieces;
if ($ext eq 'gz') { # ok!
if ($index_info->{type} =~ m,^[-h],o) { # compressed with maximum compression rate?
if ($file_info !~ m/gzip compressed data/o) {
tag 'info-document-not-compressed-with-gzip', $file;
} else {
if ($file_info !~ m/max compression/o) {
tag 'info-document-not-compressed-with-max-compression', $file;
}
}
}
} elsif ($ext eq 'png') {
next;
} else {
push (@fname_pieces, $ext);
tag 'info-document-not-compressed', $file;
}
my $infoext = pop @fname_pieces;
unless ($infoext && $infoext =~ /^info(-\d+)?$/) { # it's not foo.info
unless (!@fname_pieces) { # it's not foo{,-{1,2,3,...}}
tag 'info-document-has-wrong-extension', $file;
}
}
# If this is the main info file (no numeric extension). make sure it has
# appropriate dir entry information.
if ($fname !~ /-\d+\.gz/ && $file_info =~ /gzip compressed data/) {
my $pid = open INFO, '-|';
if (not defined $pid) {
fail("cannot fork: $!");
} elsif ($pid == 0) {
my $f = quotemeta($info->unpacked($file));
clean_env(1);
$ENV{LC_ALL} = 'C';
exec "zcat $f 2>&1"
or fail("cannot run zcat: $!");
}
local $_;
my ($section, $start, $end);
while (<INFO>) {
$section = 1 if /^INFO-DIR-SECTION\s+\S/;
$start = 1 if /^START-INFO-DIR-ENTRY\b/;
$end = 1 if /^END-INFO-DIR-ENTRY\b/;
}
close INFO;
tag 'info-document-missing-dir-section', $file unless $section;
tag 'info-document-missing-dir-entry', $file unless $start && $end;
}
}
# If there's at least one info file in the package, the package should depend
# on dpkg (>= 1.15.4) | install-info to ensure the dir file is properly
# handled on partial upgrades.
if ($has_info_file) {
my $depends = $info->relation('depends');
unless ($depends->implies('dpkg (>= 1.15.4) | install-info')) {
tag 'missing-dependency-on-install-info';
}
}
}
1;
# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
# End:
# vim: syntax=perl sw=4 sts=4 sr et
|