#!/usr/bin/env perl # $Id: check-collection-coverage 0 2007-10-14 20:32:44Z karl $ # Copyright 2007 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. # # Check that all package are contained in some collection. BEGIN { $^W = 1; ($mydir = $0) =~ s,/[^/]*$,,; unshift (@INC, "$mydir/.."); } our $mydir; use strict; use TeXLive::TLConfig; use TeXLive::TLPOBJ; use TeXLive::TLPDB; use Getopt::Long; use Pod::Usage; use File::Path; my $help = 0; GetOptions("help|?" => \$help) or pod2usage(1); pod2usage(-exitstatus => 0, -verbose => 2) if $help; exit (&main ()); sub main { # get the db. chomp (my $Master = `cd $mydir/../.. && pwd`); # xx TLPDB should default my $tlpdb = TeXLive::TLPDB->new ("root" => "$Master"); die("Cannot find tlpdb in $Master!\n") unless defined($tlpdb); my @colls = $tlpdb->collections; my %found; for my $pkg ($tlpdb->list_packages) { my $cat = $tlpdb->get_package($pkg)->category; # ignore collections and schemes next if ($cat eq "Collection"); next if ($cat eq "Scheme"); next if ($pkg =~ m/\./); $found{$pkg}{'present'} = 1; foreach my $c (@colls) { if (grep(/^$pkg$/,$tlpdb->get_package($c)->depends)) { $found{$pkg}{$c} = 1; } } } my @notincolls; my @multicolls; foreach my $pkg (keys %found) { my @k = keys %{$found{$pkg}}; if ($#k <= 0) { push @notincolls, $pkg; } if ($#k > 1) { push @multicolls, $pkg; } } if (@notincolls) { print "NOT COVERED PACKAGES:\n"; for my $pkg (@notincolls) { print "\t$pkg\n"; } } if (@multicolls) { print "MULTIPLE COVERED PACKAGES: \n"; for my $pkg (@multicolls) { print "\t$pkg: "; for my $c (keys %{$found{$pkg}}) { print "$c " if ($c ne "present"); } print "\n"; } } } __END__ =head1 NAME check-collection-coverage - check that all packages are contained in some collection =head1 SYNOPSIS check-collection-coverage =head1 OPTIONS There are no options bug C<-help>. =head1 DESCRIPTION Every package should be included in some collection. This program checks for that and echos found problems to stdout. =head1 AUTHORS AND COPYRIGHT This script and its documentation were written for the TeX Live distribution (L) and both are licensed under the GNU General Public License Version 2 or later. =cut ### Local Variables: ### perl-indent-level: 2 ### tab-width: 2 ### indent-tabs-mode: nil ### End: # vim:set tabstop=2 expandtab: #