#!/usr/bin/env perl # $Id$ # Copyright 2007 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. # # convert a set of tlpsrc files (given as arguments) into tlpdb BEGIN { $^W = 1; chomp ($mydir = `dirname $0`); unshift (@INC, "$mydir/.."); } use strict; use TeXLive::TLPSRC; use TeXLive::TLPOBJ; use TeXLive::TLPDB; use TeXLive::TLTREE; use Getopt::Long; use Pod::Usage; use File::Path; my $opt_all = 0; my $opt_catalogue = ""; chomp (my $opt_master = `cd $::mydir/../.. && pwd`); our $opt_debug = 0; my $help = 0; GetOptions( "all!" => \$opt_all, "master=s" => \$opt_master, # location of the TL tree "catalogue=s" => \$opt_catalogue, # location of the TeX Catalogue "debug!", "help|?" => \$help) or pod2usage(1); pod2usage(-exitstatus => 0, -verbose => 2) if $help; exit (&main ()); sub main { if (! -d $opt_master) { die "$0: Master $opt_master not a directory, goodbye.\n"; } my $tlc = undef; if (! -d $opt_catalogue) { warn "$0: -c /Cat/a/logue not given, continuing without it.\n"; } else { require TeXLive::TeXCatalogue; # not at compile time, for now anyway. warn "$0: reading TeX Catalogue tree $opt_catalogue ...\n"; $tlc = TeXLive::TeXCatalogue->new( "location" => $opt_catalogue ); } # 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"); } warn "$0: reading Master tree $opt_master ...\n"; my $tltree = TeXLive::TLTREE->new( "svnroot" => $opt_master ); $tltree->init_from_svn; warn "$0: updating from tlpsrc ...\n"; my $tldb = TeXLive::TLPDB->new; my $last = ""; my $src_count = 0; foreach my $f (@ARGV) { if ($opt_all) { # progress report my $first = lc (substr ($f, 0, 1)); if ($first ne $last) { print STDERR "$first "; $last = $first; } $src_count++; } my $tlsrc = new TeXLive::TLPSRC; $tlsrc->from_file ($f); my $tlp = $tlsrc->make_tlpobj ($tltree); if ($tlc) { # merge TeX Catalogue information $tlp->update_from_catalogue ($tlc); } $tldb->add_tlpobj ($tlp); } warn "\n"; # write the new db, to the real location given --all, or stdout. if ($opt_all) { local *TLPDB; our $TLPDB = ">$opt_master/texlive.tlpdb"; open (TLPDB) || die "open($TLPDB) failed: $!"; $tldb->writeout (*TLPDB); warn "$0: wrote $src_count packages $TLPDB.\n"; } else { $tldb->writeout; } return 0; } __END__ =head1 NAME tlpsrc2tlpdb - generate a TeX Live database from tlpsrc files =head1 SYNOPSIS tlpsrc2tlpdb [OPTION]... [TLPSRC]... =head1 OPTIONS =over 8 =item B<-all> Use all .tlpsrc files in C, and update the live database in C. (No repository operations are done.) =item B<-catalogue> I The location given by B<-catalogue> must point to a valid TeX Catalogue. No default value. If given, the generated tlpobj files will contain information gathered from the TeX Catalogue. =item B<-master> I The location given by B<-master> must point to a valid svn repository of TeX Live's Master direcory. Defaults to C<../..> of C<$0>. =back The standard options C<-help> and C<-debug> are also accepted. See the tlpfiles documentation for details. =head1 DESCRIPTION B converts TeX Live source package files (tlpsrc) files into a TeX Live package database (tlpdb) If a TeX Catalogue hierarchy is specified, additional information from the catalogue are merged into the database (see L for the list of included information from the TeX Catalogue). =head1 AUTHORS AND COPYRIGHT This script and its documentation were written for the TeX Live distribution (L) and both are licensed under the GNU General Public License Version 2 or later. =cut ### Local Variables: ### perl-indent-level: 2 ### tab-width: 2 ### indent-tabs-mode: nil ### End: # vim:set tabstop=2 expandtab: #