summaryrefslogtreecommitdiff
path: root/Build/tools/tlpkginfo
diff options
context:
space:
mode:
Diffstat (limited to 'Build/tools/tlpkginfo')
-rwxr-xr-xBuild/tools/tlpkginfo185
1 files changed, 89 insertions, 96 deletions
diff --git a/Build/tools/tlpkginfo b/Build/tools/tlpkginfo
index 11123269fd1..3630f31ac52 100755
--- a/Build/tools/tlpkginfo
+++ b/Build/tools/tlpkginfo
@@ -9,6 +9,8 @@ exit (&main ());
sub main
{
$CTAN = $ENV{"CTAN"} || "/home/ftp/tex-archive";
+ $CATALOGUE = $ENV{"TEX_CATALOGUE"} || "/home/httpd/html/catalogue/entries";
+
if ($ARGV[0] eq "--ctan-dir") {
return &find_ctan_dir ($ARGV[1]);
} else {
@@ -18,8 +20,6 @@ sub main
#
-# The CTAN path to a package is sometimes stored in the TeX Catalogue,
-# but old entries don't have it, etc. Still, we should use it if present.xx
# Return 0 for success if we find a path (and print it on stdout), else
# return 1.
#
@@ -28,106 +28,99 @@ sub find_ctan_dir
my ($me) = @_;
return 1 unless $me;
- (my $menobin = $me) =~ s,^bin-,,;
- (my $menodash = $me) =~ s,^.*-,,;
- (my $menopowerdot = $me) =~ s,^powerdot-,,;
- (my $menotype1 = $me) =~ s,-type1$,,;
-
- my $ctan_dir = "";
+ # The CTAN path to a package is sometimes stored in the TeX Catalogue,
+ # but old entries don't have it, etc. Still, we want to use it if present.
+ my $ctan_dir = &catalogue_find_ctan_path ($me);
+ if (! $ctan_dir) {
+ # fall back on many special cases
+ (my $menobin = $me) =~ s,^bin-,,;
+ (my $menodash = $me) =~ s,^.*-,,;
+ (my $menopowerdot = $me) =~ s,^powerdot-,,;
+ (my $menotype1 = $me) =~ s,-type1$,,;
- for my $dir (
- "macros/latex/contrib/$me", # most everything
- "macros/latex/contrib/\L$me", # HA-prosper
- "macros/latex/contrib/powerdot/contrib/$menopowerdot", # powerdot-doc-vn
- "macros/latex/exptl/$me", # semioneside
- "macros/latex/required/$me", # babel
- "macros/plain/$me", # plnfss
- "macros/xetex/latex/$me", # xetex
- "macros/generic/$me", # abbr
- "macros/generic/diagrams/$me", # circ
- "macros/$me", # eplain
- "support/$me", # thumbpdf
- "support/$menobin", # bin-thumbpdf
- "language/vietnamese/$me/unpacked", # vntex
- "language/hyphenation/$me", # bghyphen
- "language/hebrew/$me", # cjhebrew
- "language/greek/package-babel/$me", # ibycus-babel
- "language/coptic/$me", # cbcoptic
- "info/math/voss/$me", # mathmode
- "info/lshort/$menodash", # lshort-english
- "info/bibtex/$me", # tamethebeast
- "info/symbols/$me", # comprehensive
- "info/$me", # Type1fonts
- "graphics/$me", # sparklines
- "graphics/metapost/contrib/macros/$me", # mpattern
- "graphics/pstricks/contrib/pedigree/$me", # pst-pdgr
- "graphics/pstricks/contrib/$me", # pstricks-add
- "fonts/$me", # MnSymbol
- "fonts/utilities/$me", # accfonts
- "fonts/ps-type1/$me", # cm-super
- "fonts/ps-type1/$menotype1", # esint-type1
- "fonts/greek/$me", # lfb
- "fonts/gothic/$me", # blacklettert1
- "fonts/cyrillic/$me/texmf", # lh
- "fonts/chess/$me", # skaknew
- "biblio/bibtex/contrib/$me", # dk-bib
- ) {
- if (-d "$CTAN/$dir") {
- $ctan_dir = $dir;
- last;
+ for my $dir (
+ "macros/latex/contrib/$me", # most everything
+ "macros/latex/contrib/\L$me", # HA-prosper
+ "macros/latex/contrib/powerdot/contrib/$menopowerdot", # powerdot-doc-vn
+ "macros/latex/exptl/$me", # semioneside
+ "macros/latex/required/$me", # babel
+ "macros/plain/$me", # plnfss
+ "macros/xetex/latex/$me", # xetex
+ "macros/generic/$me", # abbr
+ "macros/generic/diagrams/$me", # circ
+ "macros/$me", # eplain
+ "support/$me", # thumbpdf
+ "support/$menobin", # bin-thumbpdf
+ "language/vietnamese/$me/unpacked", # vntex
+ "language/hyphenation/$me", # bghyphen
+ "language/hebrew/$me", # cjhebrew
+ "language/greek/package-babel/$me", # ibycus-babel
+ "language/coptic/$me", # cbcoptic
+ "info/math/voss/$me", # mathmode
+ "info/lshort/$menodash", # lshort-english
+ "info/bibtex/$me", # tamethebeast
+ "info/symbols/$me", # comprehensive
+ "info/$me", # Type1fonts
+ "graphics/$me", # sparklines
+ "graphics/metapost/contrib/macros/$me", # mpattern
+ "graphics/pstricks/contrib/pedigree/$me", # pst-pdgr
+ "graphics/pstricks/contrib/$me", # pstricks-add
+ "fonts/$me", # MnSymbol
+ "fonts/utilities/$me", # accfonts
+ "fonts/ps-type1/$me", # cm-super
+ "fonts/ps-type1/$menotype1", # esint-type1
+ "fonts/greek/$me", # lfb
+ "fonts/gothic/$me", # blacklettert1
+ "fonts/cyrillic/$me/texmf", # lh
+ "fonts/chess/$me", # skaknew
+ "biblio/bibtex/contrib/$me", # dk-bib
+ ) {
+ if (-d "$CTAN/$dir") {
+ $ctan_dir = $dir;
+ last;
+ }
}
- }
-
- # names totally dissimilar
- $ctan_dir = "fonts/fourier-GUT" if $me eq "fourier";
- $ctan_dir = "info/biblio" if $me eq "beebe";
- $ctan_dir = "info/italian/amsldoc" if $me eq "amsldoc-it";
- $ctan_dir = "info/italian/amsthdoc" if $me eq "amsthdoc-it";
- $ctan_dir = "info/tex-references" if $me eq "tex-refs";
- $ctan_dir = "language/basque" if $me eq "hyphen-basque";
- $ctan_dir = "language/devanagari/velthuis" if $me eq "devanagr";
- $ctan_dir = "language/hyphenation" if $me eq "hyphen-german";
- $ctan_dir = "language/hyphenation/elhyphen" if $me eq "hyphen-greek";
- $ctan_dir = "macros/latex/contrib/misc" if $me eq "ltxmisc";
- $ctan_dir = "macros/generic" if $me eq "genmisc";
- # do last, for sake of subdirs above.
- $ctan_dir = "language/hyphenation"
- if $me =~ /^hyphen-/ && ! $ctan_dir;
+ # names totally dissimilar
+ $ctan_dir = "fonts/fourier-GUT" if $me eq "fourier";
+ $ctan_dir = "info/biblio" if $me eq "beebe";
+ $ctan_dir = "info/italian/amsldoc" if $me eq "amsldoc-it";
+ $ctan_dir = "info/italian/amsthdoc" if $me eq "amsthdoc-it";
+ $ctan_dir = "info/tex-references" if $me eq "tex-refs";
+ $ctan_dir = "language/basque" if $me eq "hyphen-basque";
+ $ctan_dir = "language/devanagari/velthuis" if $me eq "devanagr";
+ $ctan_dir = "language/hyphenation" if $me eq "hyphen-german";
+ $ctan_dir = "language/hyphenation/elhyphen" if $me eq "hyphen-greek";
+ $ctan_dir = "macros/latex/contrib/misc" if $me eq "ltxmisc";
+ $ctan_dir = "macros/generic" if $me eq "genmisc";
+ # do last, for sake of subdirs above.
+ $ctan_dir = "language/hyphenation"
+ if $me =~ /^hyphen-/ && ! $ctan_dir;
+ }
+
print "$CTAN/$ctan_dir\n" if $ctan_dir;
return $ctan_dir ? 0 : 1;
}
-# this was the inverse code from ctan2tl, saving for a while until i get
-# a better grip.
-## case "$pkg" in
-## biblio) pkg=beebe;;
-## fourier-GUT) pkg=fourier;;
-## generic) pkg=genmisc;; # $ctan/macros/generic
-## ha-prosper) pkg=HA-prosper;;
-## misc) pkg=ltxmisc;; # until we do real misc package.
-## tex-references) pkg=tex-refs;;
-## velthuis) pkg=devanagr;;
-## voss) pkg=voss-de;;
-## esac
-##
-## # lshort is arranged by language.
-## pkgdir=`dirname $ctan_dir1`
-## up=`basename $pkgdir`
-## test "$up" = lshort && pkg=lshort-$pkg
-##
-## # esint is split into two.
-## test "$pkg" = esint && test "$up" = ps-type1 && pkg=esint-type1
-##
-## # vntex, powerdot, lh aare in unpacked subdirs.
-## test "$pkg" = unpacked && test "$up" = vntex && pkg=vntex
-## test "$pkg" = distrib && test "$up" = powerdot && pkg=powerdot
-## test "$pkg" = texmf && test "$up" = lh && pkg=lh
-##
-## # powerdot-doc-vn is a couple subdirs down.
-## test "$pkg" = doc-vn && test "$up" = contrib && pkg=powerdot-doc-vn
-##
-## # amslatex/vietnamese.
-## test "$pkg" = vietnamese && test "$up" = amslatex && pkg=amsldoc-vn
+
+# look up ctan path for given package name in catalogue entry.
+# xml is too hard to parse, so just look for the <ctan path...> entry.
+# Sometimes there is a single file, but worry about that later.
+#
+# Return the ctan path if found (without leading /), or undef.
+#
+sub catalogue_find_ctan_path
+{
+ my ($pkgname) = @_;
+
+ my $firstchar = substr ($pkgname, 0, 1);
+ my $catfile = "$CATALOGUE/$firstchar/$pkgname.xml";
+ return undef unless -r $catfile;
+
+ my $ctan_path = `sed -n -e "s,'/>,," -e "s,^ *<ctan path='/,,p" $catfile`;
+ return undef unless $ctan_path;
+ chomp ($ctan_path);
+ return $ctan_path;
+}