Hi Norbert,

I've started adapting tpm2license-new.pl so that it

- is usable for tetex-base

- also produces a list of files for each package.

The first one is done, the second I cannot achieve.  I simply don't grok
whether and how it is possible to use methods from Tpm.pm (and in fact I
never used OO features in Perl, or anywhere).  I attach the patch that
describes my current state.  After copying tpms for fontinst, wasysym
and xkeyval from LocalTPM to their tetex directory, this is what I get:

$ debian/tpm2licenses-new.pl --master=../../texlive/texlive/LocalTPM/ 
--catalogue=/home/frank/src/Upstream-source/texcatalogue --what=files
Subroutine main::dirname redefined at /usr/share/perl/5.8/Exporter.pm line 65.
 at debian/tpm2licenses-new.pl line 79
% fontinst
ARRAY(0x8646684)
% wasysym

texmf-dist/source/latex/wasysym/wasysym.dtx
texmf-dist/source/latex/wasysym/wasysym.ins

% xkeyval
texmf-dist/source/latex/xkeyval/xkeyval.dtx
$

I don't understand why this guess works with xkeyval, gives an
additional empty line with wasysym, but just data rubbish with
fontinst.  This is the relevant part:

sub printFiles {
    my ($pkgcat, $LocalTPM)= @_;
    my $pkg_header = "% $pkgcat";
    my $dom_parser = new XML::DOM::Parser;
    my $doc = $dom_parser->parsefile($LocalTPM);
    my %SourceFiles = &Tpm::getListField($doc, "SourceFiles");
    print $pkg_header . "\n";
    print $SourceFiles{text} . "\n";
}

Do I need to access getListField differently?

TIA, Frank
-- 
Frank Küster
Single Molecule Spectroscopy, Protein Folding @ Inst. f. Biochemie, Univ. Zürich
Debian Developer (teTeX)

--- /home/frank/src/Packages/texlive/texlive/LocalTPM/tpm2licenses-new.pl       
2006-02-23 14:35:50.000000000 +0100
+++ debian/tpm2licenses-new.pl  2006-03-03 21:58:41.000000000 +0100
@@ -20,7 +20,7 @@
 #  unshift (@INC, "$mydir/..");
 }
 
-#use Strict;
+use strict;
 use Getopt::Long;
 use File::Basename;
 use File::Copy;
@@ -34,15 +34,20 @@
 #use Tpm;
 
 
-$opt_debug=0;
-$opt_master=".";
-$opt_catalogue="/src/TeX/texcatalogue/";
+# $opt_debug=0; # unused
+my $opt_master=".";
+my $opt_catalogue="/src/TeX/texcatalogue/";
+my $opt_what="license";
+my $Master;
+my $what;
 
 GetOptions ("debug!",  # debug mode
        "master=s" => \$opt_master,     # location of Master
-       "catalogue=s" => \$opt_catalogue        # location of the catalogue
+       "catalogue=s" => \$opt_catalogue,       # location of the catalogue
+       "what=s" => \$opt_what      # print licenses or files in a tpm?
        );
  
+
 if (!($opt_master =~ m,/.*$,,)) {
     $Master = `pwd`;
     chomp($Master);
@@ -50,9 +55,17 @@
 } else {
     $Master = $opt_master;
 }
+$what = $opt_what;
+
 my $TpmGlobalPath = $Master;
 my $DataGlobalPath = $Master;
 
+# texlive
+# my $TpmDirGlob = $Master . "./texmf-dist/tpm/*.tpm";
+# teTeX
+my $TpmDirGlob = "./debian/tpm/*.tpm";
+
+
 #
 # put Master/Tools/ into the include path to find TeX live perl modules
 #
@@ -114,10 +127,17 @@
 
 1;
 
+my $LocalTPM;
+my $licline;
+my $bn;
+my $pkgcat;
+my $node;
+
 sub list_licenses {
-   foreach $f (<./texmf-dist/tpm/*.tpm>) {
+   foreach $LocalTPM (<$TpmDirGlob >) {
+#     foreach $LocalTPM 
(</home/frank/src/Packages/texlive/texlive/LocalTPM/texmf-dist/tpm/*.tpm>) {
       $licline = "";
-      $bn = &basename($f,".tpm");
+      $bn = &basename($LocalTPM,".tpm");
       if (defined($Tpm2Catalogue{$bn})) {
         $pkgcat = $Tpm2Catalogue{$bn};
       } else {
@@ -150,23 +170,37 @@
            $licline .= "unknown";
          } else {
            $licline .= "$ltype (unverified)";
+           # we know the license, it makes sense to output the files
+           $what eq "files" && &printFiles($pkgcat,$LocalTPM)
          }
-         print "$licline\n";
+         $what eq "license" && print "$licline\n";
          next;
        }
        $licline .= "$ltype (verification 
data:$version:$lversion:$lchecked:$luser)";
-       print "$licline\n";
+       $what eq "license" && print "$licline\n";
+       # we know the license, it makes sense to output the files
+       $what eq "files" && &printFiles($pkgcat,$catname)
       }
    }
 
-#   foreach $f (<./texmf-doc/tpm/*.tpm>) {
-#      my $dat = $parser->parsefile($f);
+sub printFiles {
+    my ($pkgcat, $LocalTPM)= @_;
+    my $pkg_header = "% $pkgcat";
+    my $dom_parser = new XML::DOM::Parser;
+    my $doc = $dom_parser->parsefile($LocalTPM);
+    my %SourceFiles = &Tpm::getListField($doc, "SourceFiles");
+    print $pkg_header . "\n";
+    print $SourceFiles{text} . "\n";
+}
+
+#   foreach $LocalTPM (<./texmf-doc/tpm/*.tpm>) {
+#      my $dat = $parser->parsefile($LocalTPM);
 #      if (defined($dat->getElementsByTagName("TPM:License")) &&
 #          defined($dat->getElementsByTagName("TPM:License")->item(0)) &&
 #        
defined($dat->getElementsByTagName("TPM:License")->item(0)->getFirstChild)) {
-#        print &basename($f,".tpm"), "\t", 
$dat->getElementsByTagName("TPM:License")->item(0)->getFirstChild->toString, 
"\n";
+#        print &basename($LocalTPM,".tpm"), "\t", 
$dat->getElementsByTagName("TPM:License")->item(0)->getFirstChild->toString, 
"\n";
 #      } else {
-#          print &basename($f,".tpm"), "\tnon-in-catalogue\n";
+#          print &basename($LocalTPM,".tpm"), "\tnon-in-catalogue\n";
 #      }
 #   }
 }

Reply via email to