X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=nokia-lintian%2Fchecks%2Fpatch-systems;fp=nokia-lintian%2Fchecks%2Fpatch-systems;h=0000000000000000000000000000000000000000;hb=bf47c4c43f1f5f4986e85b74fc82b32048aeb846;hp=511a15dd75d0d363a2cbdf7d3d653467eeb0d28b;hpb=19fdce4b743853cee27edb892096cf64295c2874;p=maemian diff --git a/nokia-lintian/checks/patch-systems b/nokia-lintian/checks/patch-systems deleted file mode 100644 index 511a15d..0000000 --- a/nokia-lintian/checks/patch-systems +++ /dev/null @@ -1,210 +0,0 @@ -# patch-systems -- lintian check script -*- perl -*- -# -# Copyright (C) 2007 Marc Brockschmidt -# Copyright (C) 2008 Raphael Hertzog -# -# 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::patch_systems; -use strict; -use lib "$ENV{'LINTIAN_ROOT'}/checks/"; -use common_data; -use Dep; -use Tags; -use Util; - -sub run { - my ($pkg, $type) = @_; - - unless (-d "fields") { - fail("directory in lintian laboratory for $type package $pkg missing: fields"); - } - - #Some (cruft) checks are valid for every patch system, so we need to record that: - my $uses_patch_system = 0; - - #Get build deps so we can decide which build system the maintainer - #meant to use: - my $build_deps = ""; - if (open(IN, '<', "fields/build-depends")) { - local $/ = undef; - chomp($build_deps .= ); - close(IN); - } - if (open(IN, '<', "fields/build-depends-indep")) { - local $/ = undef; - $build_deps .= ", " if $build_deps; - chomp($build_deps .= ); - close(IN); - } - $build_deps = Dep::parse($build_deps); - # Get source package format - my $format = ""; - if (open(IN, '<', "fields/format")) { - local $/ = undef; - chomp($format .= ); - close(IN); - } - my $quilt_format = ($format =~ /3\.\d+ \(quilt\)/) ? 1 : 0; - - #----- dpatch - if (Dep::implies($build_deps, Dep::parse("dpatch"))) { - $uses_patch_system++; - #check for a debian/patches file: - if (! -r "debfiles/patches/00list") { - tag "dpatch-build-dep-but-no-patch-list", $pkg; - } else { - my $list_uses_cpp = 0; - if (open(OPTS, '<', "debfiles/patches/00options")) { - while() { - if (/DPATCH_OPTION_CPP=1/) { - $list_uses_cpp = 1; - last; - } - } - close(OPTS); - } - foreach my $listfile (glob("debfiles/patches/00list*")) { - my @patches; - if (open(IN, '<', "$listfile")) { - while() { - chomp; - next if (/^\#/); #ignore comments or CPP directive - s%//.*%% if $list_uses_cpp; # remove C++ style comments - if ($list_uses_cpp && m%/\*%) { - # remove C style comments - $_ .= while($_ !~ m%\*/%); - s%/\*[^*]*\*/%%g; - } - next if (/^\s*$/); #ignore blank lines - push @patches, split(' ', $_); - } - close(IN); - } - - # Check each patch. - foreach my $patch_file (@patches) { - $patch_file .= ".dpatch" if -e "debfiles/patches/$patch_file.dpatch" - and not -e "debfiles/patches/$patch_file"; - if (! -r "debfiles/patches/$patch_file") { - tag "dpatch-index-references-non-existent-patch", $patch_file; - next; - } - if (open(PATCH_FILE, '<', "debfiles/patches/$patch_file")) { - my $has_comment = 0; - while () { - #stop if something looking like a patch starts: - last if /^---/; - #note comment if we find a proper one - $has_comment = 1 if (/^\#+\s*DP:\s*(.*)$/ && $1 !~ /^no description\.?$/i) - } - close(PATCH_FILE); - unless ($has_comment) { - tag "dpatch-missing-description", $patch_file; - } - } - check_patch($patch_file); - } - } - } - } - - #----- quilt - if (Dep::implies($build_deps, Dep::parse("quilt")) or $quilt_format) { - $uses_patch_system++; - #check for a debian/patches file: - if (! -r "debfiles/patches/series") { - tag "quilt-build-dep-but-no-series-file", $pkg unless $quilt_format; - } else { - if (open(IN, '<', "debfiles/patches/series")) { - my @patches; - my @badopts; - while() { - chomp; s/^\s+//; s/\s+$//; # Strip leading/trailing spaces - s/(^|\s+)#.*$//; # Strip comment - next unless $_; - if (/^(\S+)\s+(\S.*)$/) { - $_ = $1; - if ($2 ne '-p1') { - push @badopts, $_; - } - } - push @patches, $_; - } - close(IN); - if (scalar(@badopts)) { - tag "quilt-patch-with-non-standard-options", @badopts; - } - - # Check each patch. - foreach my $patch_file (@patches) { - if (! -r "debfiles/patches/$patch_file") { - tag "quilt-series-references-non-existent-patch", $patch_file; - next; - } - check_patch($patch_file); - } - } - } - } else { - if (-r "debfiles/patches/series") { - # 3.0 (quilt) sources don't need quilt as dpkg-source will do the work - tag "quilt-series-but-no-build-dep" unless $quilt_format; - } - } - - - #----- general cruft checking: - if ($uses_patch_system) { - if ($uses_patch_system > 1) { - tag "more-than-one-patch-system"; - } - - open(STAT, '<', "diffstat") or fail("cannot open diffstat file: $!"); - while () { - my ($file) = (m,^\s+(.*?)\s+\|,) - or fail("syntax error in diffstat file: $_"); - - if ($file !~ /^debian/) { - tag "patch-system-but-direct-changes-in-diff", $file; - } - } - close (STAT) or fail("error reading diffstat file: $!"); - } -} - -# Checks on patches common to all build systems -sub check_patch($) { - my $patch_file = shift; - open(DIFFSTAT, "-|", "diffstat -p0 -l debfiles/patches/$patch_file") - or fail("can't fork diffstat"); - while () { - chomp; - if (m|^(\./)?debian/| or m|^(\./)?[^/]+/debian/|) { - tag "patch-modifying-debian-files", $patch_file, $_; - } - } - close(DIFFSTAT) or fail("cannot close pipe to diffstat on $patch_file: $!"); -} - -1; - -# Local Variables: -# indent-tabs-mode: t -# cperl-indent-level: 8 -# End: -# vim: syntax=perl sw=4 ts=4 noet shiftround