#!/usr/bin/env perl # Copyright 2010 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. # # Output a dump of TL packages with one line per package, showing the # package name, collection it belongs to, and all its schemes. This is # used on the CTAN web pages. Run from cron. my $mydir; BEGIN { $vc_id = '$Id$'; $^W = 1; ($mydir = $0) =~ s,/[^/]*$,,; unshift (@INC, "$mydir/.."); } use strict; use TeXLive::TLPOBJ; use TeXLive::TLPDB; use TeXLive::TLUtils; exit (&main()); sub main { chomp(my $Master = `cd $mydir/../.. && pwd`); my $tlpdb = TeXLive::TLPDB->new("root" => $Master); die "Cannot init tlpdb from $Master ..." unless defined($tlpdb); # first collect for each collection the set of schemes it is contained in my @schemes = $tlpdb->schemes; my %col_to_schemes; foreach my $c ($tlpdb->collections) { @{$col_to_schemes{$c}} = (); for my $s ($tlpdb->needed_by($c)) { if ($s =~ m/^scheme-/) { push @{$col_to_schemes{$c}}, $s; } } } foreach my $pkg ($tlpdb->list_packages) { next if ($pkg =~ m/^00texlive/); # ignore internal pkgs. # ignore *all* arch dep pacakges (also tlpsv etc.) next if ($pkg =~ m/\./); my $tlp = $tlpdb->get_package($pkg); if (!defined($tlp)) { warn "strange, $pkg not found but listed, continuing anyway"; next; } # For schemes and collections, output their dependencies. if ($tlp->category =~ /^(Scheme|Collection)$/) { my @depends = $tlp->depends; print "$pkg @depends\n"; next; } # For regular packages, output the collection/schemes which include them. my @deps = $tlpdb->needed_by($pkg); my @schemes; my $collection = undef; for my $p (@deps) { my $tlpo = $tlpdb->get_package($p); if (!defined($tlpo)) { warn "$p seems to depend on $pkg, but $p cannot be found?"; next; } if ($tlpo->category eq "Scheme") { push @schemes, $p; } elsif ($tlpo->category eq "Collection") { if (defined($collection)) { warn "$pkg asked for in more than one collection: $collection, $p"; next; } else { $collection = $p; } } } if (!defined($collection)) { # should not happen $collection = "(undefined)"; } else { push @schemes, @{$col_to_schemes{$collection}}; } @schemes = TeXLive::TLUtils::sort_uniq(@schemes); my $catname = $tlp->catalogue; # so ctan can map back to their names print "($catname)" if $catname; print "$pkg $collection @schemes\n"; } } __END__ ### Local Variables: ### perl-indent-level: 2 ### tab-width: 2 ### indent-tabs-mode: nil ### End: # vim:set tabstop=2 expandtab: #