summaryrefslogtreecommitdiff
path: root/Master/tlpkg
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg')
-rwxr-xr-xMaster/tlpkg/bin/ctan-list97
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: #