diff options
Diffstat (limited to 'Master/tlpkg')
-rwxr-xr-x | Master/tlpkg/bin/ctan-list | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Master/tlpkg/bin/ctan-list b/Master/tlpkg/bin/ctan-list new file mode 100755 index 00000000000..4975767c89e --- /dev/null +++ b/Master/tlpkg/bin/ctan-list @@ -0,0 +1,97 @@ +#!/usr/bin/env perl +# Copyright 2010 Norbert Preining +# This file is licensed under the GNU General Public License version 2 +# or any later version. +# +# From an email from Karl: +# Jim Hefferon could use a dump of TL packages for CTAN with one line per +# package, showing the package name, collection it belongs to, and all its +# schemes. + +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 *all* arch dep pacakges (also tlpsv etc etc) + next if ($pkg =~ m/\./); + my $tlp = $tlpdb->get_package($pkg); + if (!defined($tlp)) { + printf STDERR "strange, $pkg not found but listed, continuing anyway.\n"; + next; + } + next if ($tlp->category eq "Scheme"); + next if ($tlp->category eq "Collection"); + # TODO ??? What to do with TLCore??? + # get the list of packages that depend on that one: + my @deps = $tlpdb->needed_by($pkg); + my @schemes; + my $collection = undef; + for my $p (@deps) { + my $tlpo = $tlpdb->get_package($p); + if (!defined($tlpo)) { + printf STDERR "$p seems to depend on $pkg, but $p cannot be found?\n"; + next; + } + if ($tlpo->category eq "Scheme") { + push @schemes, $p; + } elsif ($tlpo->category eq "Collection") { + if (defined($collection)) { + printf STDERR "$pkg is asked for in more than one collection: $collection, $p\n"; + 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); + 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: # |