diff options
Diffstat (limited to 'new-infra/read-tpm-dump-tpl.pl')
-rwxr-xr-x | new-infra/read-tpm-dump-tpl.pl | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/new-infra/read-tpm-dump-tpl.pl b/new-infra/read-tpm-dump-tpl.pl new file mode 100755 index 00000000000..892b40a4529 --- /dev/null +++ b/new-infra/read-tpm-dump-tpl.pl @@ -0,0 +1,307 @@ +#!/usr/bin/perl +# +# tpm2deb-source.pl +# machinery to create debian packages from TeX Live depot +# (c) 2005, 2006 Norbert Preining +# +# $Id: tpm2deb-source.pl 2691 2007-04-16 09:42:22Z frank $ +# +# configuration is done via the file tpm2deb.cfg +# + +use strict; +no strict 'refs'; +# use warnings; +# no warnings 'uninitialized'; + +my $opt_master; +our $opt_debug; +our $opt_nosrcpkg; +our $opt_noremove; +my $globalreclevel; +my $oldsrcdir; +my $datadump ; + +BEGIN { + my $upstream_modules = "/usr/share/tex-common/"; + unshift (@INC, "./all/debian"); + unshift (@INC, $upstream_modules); +} + +my ($mydir,$mmydir); +($mydir = $0) =~ s,/[^/]*$,,; +if ($mydir eq $0) { $mydir = `pwd` ; chomp($mydir); } +if (!($mydir =~ m,/.*,,)) { $mmydir = `pwd`; chomp($mmydir); $mydir = "$mmydir/$mydir" ; } + + +# $opt_master = "./LocalTPM"; +$opt_debug = 0; +$opt_nosrcpkg = 0; +$opt_noremove = 0; +$globalreclevel = 1; +$oldsrcdir = "./src"; +$datadump = "tpm.data"; + +use Getopt::Long; +# use Data::Dumper; + +#use Strict; +use File::Basename; +use File::Copy; +use File::Path; +use File::Temp qw/ tempfile tempdir /; +use Storable; +## not needed, atm we are calling eperl binary use Parse::ePerl; +#use XML::DOM; +use Cwd; +#use FileUtils qw(canon_dir cleandir make_link newpath member +# normalize substitute_var_val dirname diff_list remove_list +# rec_rmdir sync_dir walk_dir start_redirection stop_redirection); +#use Tpm; +# +# Configuration for destination of files +# DONT USER DOUBLE QUOTES; THESE VARIABLES HAVE TO GET REEVALUATED +# AFTER $tmpdir IS SET!! +# +my $changelog = ""; +my $changelogversion = ""; +my $changelogextraversion = ""; +my $changelogrevision = ""; +my $changelogdistribution = ""; +my $allowed_dists = "(unstable|UNRELEASED|sarge-backports|etch-backports|stable-security|experimental)"; + + +our $Master; +our %TpmData; + +$Master = `pwd`; +chomp($Master); +my $TpmGlobalPath = $Master; +my $DataGlobalPath = $Master; + +unshift (@INC, "$Master/../Build/tools"); +File::Basename::fileparse_set_fstype('unix'); + + +use Getopt::Long; +use File::Basename; +use File::Copy; +use File::Path; +use File::Temp qw/ tempfile tempdir /; +use Storable; +use Cwd; +use Tpm; + +our (%TeXLive); +our (%Config,%TpmData); +our %TexmfTreeOfType = ( "TLCore" => "texmf", + "Documentation" => "texmf-doc", + "Package" => "texmf-dist"); +our @TpmCategories = keys %TexmfTreeOfType; +our %TypeOfTexmfTree = reverse %TexmfTreeOfType; + +# pre set $opt_master to ./LocalTPM which contains also the Tools dir +# this is set in the main script, and changed with commandline option. +# should it maybe be deleted here? + +my $opt_debug; +my $opt_onlyscripts; + +sub populate_TpmData_from_dump { + my $datafile = $_[0]; + my $tpmdataref = retrieve($datafile); + %TpmData = %{$tpmdataref}; +} + +sub load_collection_tpm_data { + # local functions + sub trim { + my ($str) = @_; + $str =~ s/^[\n\s]+//; + $str =~ s/[\n\s]+$//; + return $str; + } + sub get_requires { + my ($tpm,$type) = @_; + my %requires = $tpm->getHash("Requires"); + my @keylist = keys %requires; + my @tlcorereqlist = (); + my @packagereqlist = (); + if ($type eq '') { + $type = "all"; + } + foreach my $k (keys %requires) { + foreach my $e (@{$requires{$k}}) { + # manually exclude Windows-only packages + if ($e eq "bin-bzip2") {} + elsif ($e eq "bin-xpdf") {} + elsif ($e eq "bin-chktex") {} + elsif ($e eq "bin-ghostscript") {} + elsif ($e eq "bin-gzip") {} + elsif ($e eq "bin-jpeg2ps") {} + elsif ($e eq "bin-perl") {} + elsif ($e eq "bin-windvi") {} + elsif ($e eq "lib-freetype2") {} + elsif ($e eq "lib-gd") {} + elsif ($e eq "lib-geturl") {} + elsif ($e eq "lib-gnu") {} + elsif ($e eq "lib-gs") {} + elsif ($e eq "lib-jpeg") {} + elsif ($e eq "lib-md5") {} + elsif ($e eq "lib-png") {} + elsif ($e eq "lib-regex") {} + elsif ($e eq "lib-texmfmp") {} + elsif ($e eq "lib-tiff") {} + elsif ($e eq "lib-ttf") {} + elsif ($e eq "lib-xpdf") {} + elsif ($e eq "lib-xpm") {} + elsif ($e eq "lib-zlib") {} + elsif ($e =~ /^bin-(.*)$/) { + push @packagereqlist, "$k/$e"; + } + elsif ($e =~ /^hyphen-(.*)$/){ + push @packagereqlist, "$k/$e"; + } + elsif ($k eq "TLCore") { + push @tlcorereqlist, "$k/$e"; + } else { + push @packagereqlist, "$k/$e"; + } + } + } + if ($type eq '' || $type eq 'all') { + my %foo; + $foo{'TLCore'} = \@tlcorereqlist; + $foo{'Package'} = \@packagereqlist; + #my @foo=(@tlcorereqlist,@packagereqlist); + #return(@foo); + return(\%foo); + } elsif ($type eq 'TLCore') { + return(@tlcorereqlist); + } elsif ($type eq 'Package') { + return(@packagereqlist); + } else { + die("Don't know this type: $type!\n"); + } + } + # start of real function + print "Start loading tpm data ... \n"; + foreach my $t ('TLCore', 'Documentation', 'Package') { + my $subtree = ${TexmfTreeOfType}{$t}; + foreach my $f (<$Master/$subtree/tpm/*.tpm>) { + print "Working on $f\n"; + my $shortn = basename($f); + $shortn =~ s,\.tpm$,,; + if (($t eq 'TLCore') && ($shortn =~ m/^scheme-/)) { next ; } + my $tpm = Tpm->new("$subtree/tpm/$shortn.tpm"); + $TpmData{$t}{$shortn}{'BinFiles'} = [ $tpm->getFileList("BinFiles") ]; + $TpmData{$t}{$shortn}{'DocFiles'} = [ $tpm->getFileList("DocFiles") ]; + $TpmData{$t}{$shortn}{'RunFiles'} = [ $tpm->getFileList("RunFiles") ]; + $TpmData{$t}{$shortn}{'SourceFiles'} = [ $tpm->getFileList("SourceFiles") ]; + $TpmData{$t}{$shortn}{'RemoteFiles'} = [ $tpm->getFileList("RemoteFiles") ]; + $TpmData{$t}{$shortn}{'Title'} = trim($tpm->getAttribute("Title")); + # print "got title $TpmData{$t}{$shortn}{'Title'}\n"; + $TpmData{$t}{$shortn}{'Description'} = trim($tpm->getAttribute("Description")); + $TpmData{$t}{$shortn}{'License'} = trim($tpm->getAttribute("License")); + my @foo = $tpm->getList("Installation"); + $TpmData{$t}{$shortn}{'Installation'} = \@foo ; + my $alldeps = get_requires($tpm,'all'); + my @incs = @{$alldeps->{'Package'}}; + my @deps = @{$alldeps->{'TLCore'}}; + $TpmData{$t}{$shortn}{'Package'} = \@incs; + $TpmData{$t}{$shortn}{'TLCore'} = \@deps; + } + } + print " ... done\n"; +} + +sub dump_tpm_data { + print "Dumping TpmData\n\n"; + #foreach my $t ('TLCore', 'Documentation', 'Package') { + foreach my $t ('Package') { + print "Dumping $t:\n"; + my %foo = %{$TpmData{$t}}; + foreach my $p (keys %foo) { + open (FOO,">tlptpm/$p.tlp") || die("Cannot open tlptpm/$p.tpmtlp!"); + print FOO "name $p\n"; + foreach my $foo (@{$TpmData{$t}{$p}{'Package'}}) { + print FOO "depend $foo\n"; + } + foreach my $ex (@{$TpmData{$t}{$p}{'Installation'}}) { + my %foo = %{$ex}; + print FOO "execute $foo{'function'} $foo{'mode'} $foo{'parameter'}\n"; + } + foreach my $foo (@{$TpmData{$t}{$p}{'TLCore'}}) { + print FOO "depend $foo\n"; + } + my @foo; + @foo = @{$TpmData{$t}{$p}{'DocFiles'}}; + if ($#foo >= 0) { + print FOO "docfiles\n"; + foreach my $foo (sort @foo) { + print FOO " $foo\n"; + } + } + @foo = @{$TpmData{$t}{$p}{'SourceFiles'}}; + if ($#foo >= 0) { + print FOO "srcfiles\n"; + foreach my $foo (sort @foo) { + print FOO " $foo\n"; + } + } + @foo = @{$TpmData{$t}{$p}{'BinFiles'}}; + if ($#foo >= 0) { + print FOO "binfiles\n"; + foreach my $foo (sort @foo) { + print FOO " $foo\n"; + } + } + @foo = @{$TpmData{$t}{$p}{'RunFiles'}}; + if ($#foo >= 1) { + print FOO "runfiles\n"; + foreach my $foo (sort @foo) { + if ($foo =~ /.*\.tpm$/) { next; } + print FOO " $foo\n"; + } + } + @foo = @{$TpmData{$t}{$p}{'RemoteFiles'}}; + if ($#foo >= 0) { + print FOO "remotefiles\n"; + foreach my $foo (sort @foo) { + print FOO " $foo\n"; + } + } + close(FOO); + } + } +} + + +&main(@ARGV); + +1; + +# variables needed outside of main +my $version; +my $revision; +my $extraversion; +my $date; +my $arch; +my $shortl; + +sub main { + ${Tpm::MasterDir} = $TeXLive{'all'}{'tpm_global_path'}; + $arch = "all"; + ${Tpm::CurrentArch} = "i386-linux"; + ${Tpm::MasterDir} = $Master; + load_collection_tpm_data(); + dump_tpm_data(); +} + + +### Local Variables: +### perl-indent-level: 4 +### tab-width: 4 +### indent-tabs-mode: t +### End: +# vim:set tabstop=4: # |