Adding side stream changes to Maemian. Working to integrate full upstream libraries...
[maemian] / nokia-lintian / checks / md5sums
diff --git a/nokia-lintian/checks/md5sums b/nokia-lintian/checks/md5sums
new file mode 100644 (file)
index 0000000..1c00cc2
--- /dev/null
@@ -0,0 +1,122 @@
+# md5sums -- lintian check script -*- perl -*-
+
+# Copyright (C) 1998 Christian Schwarz and Richard Braakman
+#
+# 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::md5sums;
+use strict;
+use Tags;
+use Util;
+
+sub run {
+
+my $pkg = shift;
+my $type = shift;
+
+my $control = "control/md5sums";
+
+my %control_entry;
+my %info_entry;
+my %conffile;
+
+# read in md5sums info file
+open(C, '<', "md5sums") or fail("cannot open md5sums info file: $!");
+while (<C>) {
+    chop;
+    next if m/^\s*$/;
+    m/^(\S+)\s*(\S.*)$/ or fail("syntax error in md5sums info file: $_");
+    my $zzsum = $1;
+    my $zzfile = $2;
+    $zzfile =~ s,^(\./)?,,;
+    $info_entry{$zzfile} = $zzsum;
+}
+close(C);
+
+# read in conffiles
+if (-f "control/conffiles") {
+    open(C, '<', "control/conffiles")
+       or fail("cannot open control file conffiles: $!");
+    while (<C>) {
+       chop;
+       next if m/^\s*$/;
+       s,^/,,;
+       $conffile{$_} = 1;
+    }
+    close(C);
+}
+
+# Is there a md5sums control file?
+unless (-f $control) {
+    # ignore if package contains no files
+    return 0 if -z "md5sums";
+
+    # check if package contains non-conffiles
+    # debhelper doesn't create entries in md5sums
+    # for conffiles since this information would
+    # be redundant
+    my $only_conffiles = 1;
+    foreach my $file (keys %info_entry) {
+       unless ($conffile{$file}) {
+           $only_conffiles = 0;
+           last;
+       }
+    }
+
+    tag "no-md5sums-control-file", "" unless $only_conffiles;
+    return 0;
+}
+
+# Is it empty? Then skip it. Tag will be issued by control-files
+if (-z $control) {
+    return 0;
+}
+
+# read in md5sums control file
+open(C, '<', $control)
+    or fail("cannot open md5sums control file $control: $!");
+while (<C>) {
+    chop;
+    next if m/^\s*$/;
+    if (m{^([a-f0-9]+)\s*(?:\./)?(\S.*)$} && length($1) == 32) {
+       $control_entry{$2} = $1;
+    } else {
+       tag "malformed-md5sums-control-file", "line $.";
+    }
+}
+close(C);
+
+for my $file (keys %control_entry) {
+
+    if (not exists $info_entry{$file}) {
+       tag "md5sums-lists-nonexisting-file", "$file";
+    } elsif ($info_entry{$file} ne $control_entry{$file}) {
+       tag "md5sum-mismatch", "$file";
+    }
+
+    delete $info_entry{$file};
+}
+for my $file (keys %info_entry) {
+    tag "file-missing-in-md5sums", "$file"
+       unless ($conffile{$file} || $file =~ m%^var/lib/[ai]spell/.%);
+}
+
+}
+
+1;
+
+# vim: syntax=perl