#!/usr/bin/perl -w # java-info -- lintian collection script # Copyright (C) 2011 Vincent Fourmond # # 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. use strict; use warnings; use lib "$ENV{'LINTIAN_ROOT'}/lib/"; use Util qw(fail); my ($pkg, undef, $dir) = @ARGV; # Sanity check unless ( -d "$dir/unpacked/") { fail "java-info called with the wrong dir argument!"; } open INDEX, '<', "$dir/index" or fail "cannot open index: $!"; open OUT, '>', "$dir/java-info" or fail "cannot open java-info: $!"; chdir ("$dir/unpacked") or fail "unable to chdir to unpacked: $!"; while () { chomp; $_ = (split(' ', $_, 6))[5]; next if / -> .*/; # We skip symlinks. if (m#\S+\.jar$#i) { my $file = $_; my $has_manifest = 0; # This script needs unzip, there's no way around. print OUT "-- $file\n"; # First, the file list: open FILE_LIST, '-|', 'zipinfo', '-1', $file; while() { $has_manifest = 1 if $_ =~ m@^META-INF/MANIFEST.MF$@oi; next if( m#/$#o); # Skip directories print OUT; } close FILE_LIST; if($has_manifest) { print OUT "-- MANIFEST: $file\n"; open MANIFEST, '-|', 'unzip', '-p', $file, 'META-INF/MANIFEST.MF'; my $first = 1; while(my $line = ) { chomp $line; $line =~ s/\r//go; if($line =~ m/^(\S+:)\s*(.*)/o) { print OUT "\n" unless $first; $first = 0; print OUT " $1 $2"; } if($line =~ m/^ /o) { print OUT substr $line, 1; } } close MANIFEST; print OUT "\n" unless $first; } } } close INDEX; close OUT or fail("cannot write java-info: $!"); exit 0 # Local Variables: # indent-tabs-mode: nil # cperl-indent-level: 4 # End: # vim: syntax=perl sw=4 sts=4 sr et