diff options
Diffstat (limited to 'Master/tlpkg/archive/applied.use-autopatterns-from-dedicated-tlpsrc-files.patch')
-rw-r--r-- | Master/tlpkg/archive/applied.use-autopatterns-from-dedicated-tlpsrc-files.patch | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/Master/tlpkg/archive/applied.use-autopatterns-from-dedicated-tlpsrc-files.patch b/Master/tlpkg/archive/applied.use-autopatterns-from-dedicated-tlpsrc-files.patch new file mode 100644 index 00000000000..3f9dad59c2f --- /dev/null +++ b/Master/tlpkg/archive/applied.use-autopatterns-from-dedicated-tlpsrc-files.patch @@ -0,0 +1,396 @@ + +This patch adds the ability to change the auto generated patterns by +adding one tlpsrc file named + 00texlive.autopatterns.tlpsrc +and within these files the relevant src/bin/doc/run patterns, but the FIRST +word in the pattern is the category to which the pattern applies. + +The included 00texlive.autopatterns.tlpsrc adds the necessary patterns +to get the exact same behaviour as before. + +tlpsrc2tlpdb also gets a command line --no-autopatterns if you want +to disable loading of auto patterns. + +Warning: This change will make the description for maintaining separate +repositories a bit outdated, since now also these autopattern files +have to be added, or patterns themselves have to be specified. + +Index: tlpkg/TeXLive/TLPSRC.pm +=================================================================== +--- tlpkg/TeXLive/TLPSRC.pm (revision 11079) ++++ tlpkg/TeXLive/TLPSRC.pm (working copy) +@@ -201,7 +201,11 @@ + # + sub make_tlpobj + { +- my ($self,$tltree) = @_; ++ my ($self,$tltree,$defaultpatterns) = @_; ++ my %patterns; ++ if (defined($defaultpatterns)) { ++ %patterns = %{$defaultpatterns}; ++ } + my $tlp = TeXLive::TLPOBJ->new; + $tlp->name($self->name); + $tlp->category($self->category); +@@ -212,124 +216,67 @@ + $tlp->depends(@{$self->{'depends'}}) if (defined($self->{'depends'})); + $tlp->revision(0); + my $filemax; +- my $usedefault = 1; ++ my $usedefault; + my @allpospats; + my @allnegpats; ++ my $pkgname = $self->name; + # +- # runpatterns ++ # src/run/doc patterns + # +- foreach my $p (@{$self->{'runpatterns'}}) { +- if ($p =~ m/^\+!(.*)$/) { +- push @allnegpats, $1; +- } elsif ($p =~ m/^\+(.*)$/) { +- push @allpospats, $1; +- } elsif ($p =~ m/^!(.*)$/) { +- push @allnegpats, $1; +- $usedefault = 0; +- } else { +- push @allpospats, $p; +- $usedefault = 0; ++ # WARNING WARNING WARNING ++ # the "bin" must be last since we drop through for further dealing ++ # with specialities of the bin patterns!!!! ++ for my $pattype (qw/src run doc bin/) { ++ @allpospats = (); ++ @allnegpats = (); ++ $usedefault = 1; ++ foreach my $p (@{$self->{${pattype} . 'patterns'}}) { ++ if ($p =~ m/^\+!(.*)$/) { ++ push @allnegpats, $1; ++ } elsif ($p =~ m/^\+(.*)$/) { ++ push @allpospats, $1; ++ } elsif ($p =~ m/^!(.*)$/) { ++ push @allnegpats, $1; ++ $usedefault = 0; ++ } else { ++ push @allpospats, $p; ++ $usedefault = 0; ++ } + } +- } +- if ($usedefault) { +- if ($self->category eq "Package") { +- foreach my $md (qw/bibtex context dvips fonts makeindex metafont +- metapost mft omega scripts tex vtex/) { +- # mark the default pattern with a leading * so that +- # we do not warn a missing hit on a default pattern +- push @allpospats, "*t texmf-dist $md $self->{'name'}"; ++ if ($usedefault && defined($patterns{$pattype})) { ++ for my $p (@{$patterns{$pattype}}) { ++ # replace the string %NAME% with the actual package name ++ # we have to make a copy of $p otherwise we change it in the ++ # hash once and for all ++ (my $pp = $p) =~ s/%NAME%/$pkgname/g; ++ # sort through the patterns, and make sure that * are added to ++ # tag the default patterns ++ if ($pp =~ m/^!(.*)$/) { ++ push @allnegpats, "*$1"; ++ } else { ++ push @allpospats, "*$pp"; ++ } + } + } +- } +- foreach my $p (@allpospats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'run'); +- } +- foreach my $p (@allnegpats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'run',1); +- } +- # +- # srcpatterns +- # +- @allpospats = (); +- @allnegpats = (); +- $usedefault = 1; +- foreach my $p (@{$self->{'srcpatterns'}}) { +- if ($p =~ m/^\+!(.*)$/) { +- push @allnegpats, $1; +- } elsif ($p =~ m/^\+(.*)$/) { +- push @allpospats, $1; +- } elsif ($p =~ m/^!(.*)$/) { +- push @allnegpats, $1; +- $usedefault = 0; +- } else { +- push @allpospats, $p; +- $usedefault = 0; ++ # at this point we do NOT do the actual pattern matching for ++ # bin patterns, since we have some specialities to do ++ last if ($pattype eq "bin"); ++ # for all other patterns we create the list and add the files ++ foreach my $p (@allpospats) { ++ ddebug("pos pattern $p\n"); ++ $self->_do_normal_pattern($p,$tlp,$tltree,$pattype); + } +- } +- if ($usedefault) { +- # default patterns for srcfiles +- if ($self->category eq "Package") { +- push @allpospats, "*t texmf-dist source $self->{'name'}"; +- } elsif ($self->category eq "Documentation") { +- push @allpospats, "*t texmf-doc source $self->{'name'}"; ++ foreach my $p (@allnegpats) { ++ ddebug("neg pattern $p\n"); ++ $self->_do_normal_pattern($p,$tlp,$tltree,$pattype,1); + } + } +- foreach my $p (@allpospats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'src'); +- } +- foreach my $p (@allnegpats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'src',1); +- } + # +- # docpatterns +- # +- @allpospats = (); +- @allnegpats = (); +- $usedefault = 1; +- foreach my $p (@{$self->{'docpatterns'}}) { +- if ($p =~ m/^\+!(.*)$/) { +- push @allnegpats, $1; +- } elsif ($p =~ m/^\+(.*)$/) { +- push @allpospats, $1; +- } elsif ($p =~ m/^!(.*)$/) { +- push @allnegpats, $1; +- $usedefault = 0; +- } else { +- push @allpospats, $p; +- $usedefault = 0; +- } +- } +- if ($usedefault) { +- # default patterns for docfiles +- if ($self->category eq "Package") { +- push @allpospats, "*t texmf-dist doc $self->{'name'}"; +- } elsif ($self->category eq "Documentation") { +- push @allpospats, "*t texmf-doc doc $self->{'name'}"; +- } +- } +- foreach my $p (@allpospats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'doc'); +- } +- foreach my $p (@allnegpats) { +- $self->_do_normal_pattern($p,$tlp,$tltree,'doc',1); +- } +- # + # binpatterns + # +- # no default patterns for binfiles +- @allpospats = (); +- @allnegpats = (); +- foreach my $p (@{$self->{'binpatterns'}}) { +- if ($p =~ m/^\+!(.*)$/) { +- push @allnegpats, $1; +- } elsif ($p =~ m/^\+(.*)$/) { +- push @allpospats, $1; +- } elsif ($p =~ m/^!(.*)$/) { +- push @allnegpats, $1; +- } else { +- push @allpospats, $p; +- } +- } ++ # mind that @allpospats and @allnegpats have already been set up ++ # in the above loop. We only have to deal with the specialities of ++ # the bin patterns + foreach my $p (@allpospats) { + my @todoarchs = $tltree->architectures; + my $finalp = $p; +@@ -472,17 +419,29 @@ + sub srcpatterns { + my $self = shift; + if (@_) { @{ $self->{'srcpatterns'} } = @_ } +- return @{ $self->{'srcpatterns'} }; ++ if (defined($self->{'srcpatterns'})) { ++ return @{ $self->{'srcpatterns'} }; ++ } else { ++ return; ++ } + } + sub docpatterns { + my $self = shift; + if (@_) { @{ $self->{'docpatterns'} } = @_ } +- return @{ $self->{'docpatterns'} }; ++ if (defined($self->{'docpatterns'})) { ++ return @{ $self->{'docpatterns'} }; ++ } else { ++ return; ++ } + } + sub binpatterns { + my $self = shift; + if (@_) { @{ $self->{'binpatterns'} } = @_ } +- return @{ $self->{'binpatterns'} }; ++ if (defined($self->{'binpatterns'})) { ++ return @{ $self->{'binpatterns'} }; ++ } else { ++ return; ++ } + } + sub depends { + my $self = shift; +@@ -492,7 +451,11 @@ + sub runpatterns { + my $self = shift; + if (@_) { @{ $self->{'runpatterns'} } = @_ } +- return @{ $self->{'runpatterns'} }; ++ if (defined($self->{'runpatterns'})) { ++ return @{ $self->{'runpatterns'} }; ++ } else { ++ return; ++ } + } + sub executes { + my $self = shift; +@@ -746,7 +709,9 @@ + + If a given pattern section is empty or B<all> the provided patterns have + the prefix C<+> (e.g., C<+f ...>), then the following patterns, listed +-by type are I<automatically> added at expansion time: ++by type are I<automatically> added at expansion time. Note that this list ++is not definitive, but is taken from the patterns of tlpsrc files ++named C<00texlive.autopatterns.>I<Category>C<.tlpsrc>. + + =over 4 + +Index: tlpkg/tlpsrc/00texlive.autopatterns.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/00texlive.autopatterns.tlpsrc (revision 0) ++++ tlpkg/tlpsrc/00texlive.autopatterns.tlpsrc (revision 0) +@@ -0,0 +1,21 @@ ++name 00texlive.autopatterns ++category TLCore ++shortdesc Defines the automatically generated patterns ++# auto patterns for category Package ++runpattern Package t texmf-dist bibtex %NAME% ++runpattern Package t texmf-dist context %NAME% ++runpattern Package t texmf-dist dvips %NAME% ++runpattern Package t texmf-dist fonts %NAME% ++runpattern Package t texmf-dist makeindex %NAME% ++runpattern Package t texmf-dist metafont %NAME% ++runpattern Package t texmf-dist metapost %NAME% ++runpattern Package t texmf-dist mft %NAME% ++runpattern Package t texmf-dist omega %NAME% ++runpattern Package t texmf-dist scripts %NAME% ++runpattern Package t texmf-dist tex %NAME% ++runpattern Package t texmf-dist vtex %NAME% ++srcpattern Package t texmf-dist source %NAME% ++docpattern Package t texmf-dist doc %NAME% ++# auto patterns for category Documentation ++srcpattern Documentation t texmf-doc source %NAME% ++docpattern Documentation t texmf-doc doc %NAME% +Index: tlpkg/bin/tlpsrc2tlpdb +=================================================================== +--- tlpkg/bin/tlpsrc2tlpdb (revision 11079) ++++ tlpkg/bin/tlpsrc2tlpdb (working copy) +@@ -31,6 +31,7 @@ + my $opt_nobinsplit = 0; + my $opt_winwarning; + my $opt_fromfiles = 0; ++my $opt_noautopatterns = 0; + + TeXLive::TLUtils::process_logging_options(); + GetOptions( +@@ -38,6 +39,7 @@ + "master=s" => \$opt_master, # location of the TL tree + "catalogue=s" => \$opt_catalogue, # location of the TeX Catalogue + "no-bin-split!" => \$opt_nobinsplit, ++ "no-autopatterns" => \$opt_noautopatterns, + "from-files" => \$opt_fromfiles, + "with-win-pattern-warning" => \$opt_winwarning, + "help|?" => \$help) or pod2usage(1); +@@ -63,9 +65,66 @@ + $tlc = TeXLive::TeXCatalogue->new ("location" => $opt_catalogue); + } + ++ my $tlpsrc_dir = "$opt_master/tlpkg/tlpsrc"; ++ ++ # get the default patterns ++ my %autopatterns; ++ if (! $opt_noautopatterns) { ++ my $apfile = "$tlpsrc_dir/00texlive.autopatterns.tlpsrc"; ++ if (! -r $apfile) { ++ if (! $opt_noautopatterns) { ++ tlwarn ("No autopatterns tlpsrc 00texlive.autopatterns.tlpsrc found.\n"); ++ tlwarn ("Stopping here. If you want to continue either add the above file\n"); ++ tlwarn ("or call tlpsrc with --no-autopatterns.\n"); ++ exit 1; ++ } ++ } ++ my $tlsrc = new TeXLive::TLPSRC; ++ $tlsrc->from_file ( $apfile ); ++ if ($tlsrc->binpatterns) { ++ for my $p ($tlsrc->binpatterns) { ++ my ($cat, @rest) = split ' ', $p; ++ push @{$autopatterns{$cat}{"bin"}}, join(' ', @rest); ++ } ++ } ++ if ($tlsrc->srcpatterns) { ++ for my $p ($tlsrc->srcpatterns) { ++ my ($cat, @rest) = split ' ', $p; ++ push @{$autopatterns{$cat}{"src"}}, join(' ', @rest); ++ } ++ } ++ if ($tlsrc->docpatterns) { ++ for my $p ($tlsrc->docpatterns) { ++ my ($cat, @rest) = split ' ', $p; ++ push @{$autopatterns{$cat}{"doc"}}, join(' ', @rest); ++ } ++ } ++ if ($tlsrc->runpatterns) { ++ for my $p ($tlsrc->runpatterns) { ++ my ($cat, @rest) = split ' ', $p; ++ push @{$autopatterns{$cat}{"run"}}, join(' ', @rest); ++ } ++ } ++ ++ for my $cat (keys %autopatterns) { ++ debug ("Category $cat\n"); ++ for my $d (@{$autopatterns{$cat}{"bin"}}) { ++ debug ("Found auto bin pattern $d\n"); ++ } ++ for my $d (@{$autopatterns{$cat}{"src"}}) { ++ debug ("Found auto src pattern $d\n"); ++ } ++ for my $d (@{$autopatterns{$cat}{"doc"}}) { ++ debug ("Found auto doc pattern $d\n"); ++ } ++ for my $d (@{$autopatterns{$cat}{"run"}}) { ++ debug ("Found auto run pattern $d\n"); ++ } ++ } ++ } # end of if (! $opt_noautopatterns) ++ + # if we're regenerating the whole thing, get all our tlpsrc files. + if ($opt_all) { +- my $tlpsrc_dir = "$opt_master/tlpkg/tlpsrc"; + chdir ($tlpsrc_dir) || die "chdir($tlpsrc_dir) failed: $!"; + @ARGV = glob ("*.tlpsrc"); + } +@@ -82,11 +141,16 @@ + my $tldb = TeXLive::TLPDB->new; + my $src_count = 0; + foreach my $f (@ARGV) { ++ next if ($f =~ m/^00texlive\.autopatterns/); + $src_count++ if $opt_all; + + my $tlsrc = new TeXLive::TLPSRC; + $tlsrc->from_file ($f); +- my $tlp = $tlsrc->make_tlpobj ($tltree); ++ my $patternref; ++ if (defined($autopatterns{$tlsrc->category})) { ++ $patternref = $autopatterns{$tlsrc->category}; ++ } ++ my $tlp = $tlsrc->make_tlpobj ($tltree, $autopatterns{$tlsrc->category}); + + (my $base_f = $f) =~ s/\.tlpsrc$//; + warn "$f: package name " . $tlp->name . " does not match filename\n" |