3 use warnings FATAL => 'all';
5 use ExtUtils::Manifest qw(maniread);
7 use Getopt::Long qw(:config gnu_getopt);
10 'tar=s' => \(my $tar = 'tar'),
11 ) or die("Error in command line arguments\n");
13 my ($tarball, $manifest) = @ARGV;
15 = $tarball =~ /\.bz2$/ ? '-j'
16 : $tarball =~ /\.xz$/ ? '-J'
17 : $tarball =~ /\.t?gz$/ ? '-z'
18 : $tarball =~ /\.Z$/ ? '-Z'
23 my $null = File::Spec->devnull;
24 @tarfiles = `$tar -t $type -f "$tarball" 2>$null`;
30 for my $path (@tarfiles) {
31 if (!defined $prefix) {
32 ($prefix) = $path =~ m{^([^/]+)};
34 elsif ($path !~ m{^\Q$prefix\E(?:/|$)}) {
40 s{^\Q$prefix\E/}{} for @tarfiles;
44 @tarfiles = grep !m{(?:^|/)$}, @tarfiles;
45 my %tarfiles = map +($_ => 1), @tarfiles;
47 my %manifiles = %{ maniread($manifest) };
49 my @extra = grep { !exists $manifiles{$_} } sort keys %tarfiles;
50 my @missing = grep { !exists $tarfiles{$_} } sort keys %manifiles;
54 $message .= "$tarball has extra files:\n" . join '', map " $_\n", @extra;
57 $message .= "$tarball is missing files:\n" . join '', map " $_\n", @missing;