#!/usr/bin/perl -w # # lintian-info -- transform lintian tags into descriptive text # # Copyright (C) 1998 Christian Schwarz and Richard Braakman # # This program is free software. It is distributed 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. use strict; use Getopt::Long; # turn file buffering off: $| = 1; BEGIN { # determine LINTIAN_ROOT my $LINTIAN_ROOT = $ENV{'LINTIAN_ROOT'} || '/usr/share/lintian'; $ENV{'LINTIAN_ROOT'} = $LINTIAN_ROOT unless exists $ENV{'LINTIAN_ROOT'}; } # import perl libraries use lib "$ENV{'LINTIAN_ROOT'}/lib"; use Read_taginfo; my %already_displayed = (); my %tag_info = %{read_tag_info()}; my ($annotate, $tags); Getopt::Long::config('bundling', 'no_getopt_compat', 'no_auto_abbrev'); GetOptions('annotate|a' => \$annotate, 'tags|t' => \$tags) or die("error parsing options\n"); # If tag mode was specified, read the arguments as tags and display the # descriptions for each one. (We don't currently display the severity, # although that would be nice.) my $unknown; if ($tags) { for my $tag (@ARGV) { print "N: $tag\n"; print "N:\n"; if (exists $tag_info{$tag}) { print wrap_paragraphs('N: ', $tag_info{$tag}); } else { print "N: Unknown tag.\n"; $unknown = 1; } print "N:\n"; } exit ($unknown ? 1 : 0); } # Otherwise, read input files or STDIN, watch for tags, and add descriptions # whenever we see one, can, and haven't already explained that tag. Strip off # color and HTML sequences. while (<>) { print; chomp; next if /^\s*$/; s/\e[\[\d;]*m//g; s///g; s,,,g; my ($type, $pkg); my @pieces = split(/:\s+/); if ($annotate) { $type = shift @pieces if ($pieces[0] =~ /^\w$/); $pkg = shift @pieces if ($pieces[0] =~ /^\S+( (binary|udeb))?$/); } else { $type = shift @pieces; $pkg = shift @pieces; } if ($annotate or (defined $type and $type =~ m/^[OEWIX]$/)) { my $tag = shift @pieces; next if not defined $tag; ($tag) = split(/\s+/, $tag, 2); next if not exists $tag_info{$tag} or $already_displayed{$tag}++; print "N:\n"; print wrap_paragraphs('N: ',$tag_info{$tag}); print "N:\n"; } } exit 0; # Local Variables: # indent-tabs-mode: t # cperl-indent-level: 4 # End: # vim: syntax=perl sw=4 ts=8