#!/usr/bin/env perl # $Id: check-execute-consistency 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 files needed for execute statements are present BEGIN { $^W = 1; ($mydir = $0) =~ s,/[^/]*$,,; unshift (@INC, "$mydir/.."); } our $mydir; use strict; use TeXLive::TLConfig; use TeXLive::TLUtils; use TeXLive::TLPOBJ; use TeXLive::TLPDB; use Getopt::Long; use Pod::Usage; use File::Path; my $help = 0; process_logging_options(); 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 (%maps,%langcodes,%fmtcodes); for my $pkg ($tlpdb->list_packages) { for my $e ($tlpdb->get_package($pkg)->executes) { if ($e =~ m/add(Mixed)?Map\s+(.*)$/) { my $foo = $2; chomp($foo); push @{$maps{$foo}}, $pkg; } elsif ($e =~ m/BuildFormat\s+(.*)$/) { my $foo = $1; chomp($foo); push @{$fmtcodes{$foo}}, $pkg; } elsif ($e =~ m/AddHyphen\s+.*\s+file=(\S+)$/) { my $foo = $1; chomp($foo); push @{$langcodes{$foo}}, $pkg; } else { warn "$pkg: unmatched execute: $e\n"; } } } my %badmaps; foreach my $mf (keys %maps) { my @found = $tlpdb->find_file($mf); if ($#found < 0) { $badmaps{$mf} = $maps{$mf}; } if ($#found > 0) { # we want to check for multiple inclusions my %mapfn; foreach my $foo (@found) { $foo =~ m/^(.*):(.*)$/; push @{$mapfn{$2}}, $1; } foreach my $k (keys %mapfn) { my @bla = @{$mapfn{$k}}; if ($#bla > 0) { warn "map file $mf occurs multiple times (in pkg @bla)!\n"; } } } } if (keys %badmaps) { print "mentioned map file not occuring in any package:\n"; foreach my $mf (keys %badmaps) { print "\t$mf (execute in @{$badmaps{$mf}})\n"; } } my %badhyphcodes; my %problemhyphen; foreach my $lc (keys %langcodes) { next if ($lc eq "zerohyph.tex"); my @found = $tlpdb->find_file("texmf-dist/tex/generic/hyph-utf8/loadhyph/$lc"); if ($#found < 0) { # try again this time search all packages my @found = $tlpdb->find_file("$lc"); if ($#found < 0) { $badhyphcodes{$lc} = $langcodes{$lc}; } else { $problemhyphen{$lc} = [ @found ]; } } } if (keys %badhyphcodes) { print "mentioned hyphen loaders without file:\n"; foreach my $mf (keys %badhyphcodes) { print "\t$mf (execute in @{$badhyphcodes{$mf}})\n"; } } # disable the echoing of problematic hyphens #if (keys %problemhyphen) { # print "hyphen files with possible problematic location:\n"; # foreach my $mf (keys %problemhyphen) { # print "\t$mf (@{$problemhyphen{$mf}})\n"; # } #} my %badfmtcodes; foreach my $lc (keys %fmtcodes) { my @found = $tlpdb->find_file("texmf/fmtutil/format.$lc.cnf"); if ($#found < 0) { $badfmtcodes{$lc} = $fmtcodes{$lc}; } } if (keys %badfmtcodes) { print "mentioned fmt codes without fmtutil.XXX.cnf:\n"; foreach my $mf (keys %badfmtcodes) { print "\t$mf (execute in @{$badfmtcodes{$mf}})\n"; } } } __END__ =head1 NAME check-depend-consistency - check that all depends actually exist as packages =head1 SYNOPSIS check-depend-consistency =head1 OPTIONS There are no options bug C<-help>. =head1 DESCRIPTION See above =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: #