#!/usr/bin/env perl # $Id$ # Copyright 2007, 2008 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::TLConfig; use TeXLive::TLPSRC; use TeXLive::TLPOBJ; use TeXLive::TLPDB; use TeXLive::TLTREE; use TeXLive::TLUtils; use Getopt::Long; use Pod::Usage; use File::Path; my $opt_all = 0; my $opt_catalogue = ""; chomp (my $opt_master = `cd $::mydir/../.. && pwd`); my $help = 0; my $opt_nobinsplit = 0; TeXLive::TLUtils::process_logging_options(); GetOptions( "all!" => \$opt_all, "master=s" => \$opt_master, # location of the TL tree "catalogue=s" => \$opt_catalogue, # location of the TeX Catalogue "no-bin-split!" => \$opt_nobinsplit, "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) { info("$0: -c /Cat/a/logue not given, continuing without it.\n"); } else { require TeXLive::TeXCatalogue; # not at compile time, for now anyway. info("$0: reading TeX Catalogue $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"); } info("$0: reading Master $opt_master ...\n"); my $tltree = TeXLive::TLTREE->new( "svnroot" => $opt_master ); $tltree->init_from_svn; info("$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); } # split bin packages off if (not($opt_nobinsplit)) { # packages which have already a .win32 extension or the # 00texlive.something package are NOT spit, never! if ( ($tlp->name !~ m/\.win32/) && ($tlp->name !~ m/^00texlive\./) ) { my @binobjs = $tlp->split_bin_package; foreach (@binobjs) { $tldb->add_tlpobj($_); } } } $tldb->add_tlpobj ($tlp); } warn "\n"; # write the new db, to the real location given --all, or stdout. if ($opt_all) { $tldb->root("$opt_master"); # do set the option_archs from the dirs in Master/bin $tldb->option_archs($tltree->architectures); $tldb->save; info("$0: wrote $src_count packages to ". $tldb->root . ".\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>. =item B<-no-bin-split> Do NOT split files with binaries into several packages, one for the arch independent and one for each of the architectures with only the respective binaries. =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: #