#!/usr/bin/env perl # $Id$ # tlpsrc2zip - create zip file(s) for all tlpsrc arguments # Copyright 2007 Norbert Preining # # This file is licensed under the GNU General Public License version 2 # or any later version. BEGIN { $^W = 1; ($mydir = $0) =~ s,/[^/]*$,,; unshift (@INC, "$mydir/.."); } use strict; use TeXLive::TLPSRC; use TeXLive::TLPOBJ; use TeXLive::TLTREE; use Getopt::Long; use Pod::Usage; use File::Path; my $opt_all = 0; chomp (my $opt_master = `cd $::mydir/../.. && pwd`); my $opt_catalogue = ""; my $opt_outputdir = "./zip"; our $opt_debug = 0; my $help = 0; GetOptions( "all!" => \$opt_all, "master=s" => \$opt_master, # location of the tree "catalogue=s" => \$opt_catalogue, # location of the TeX Catalogue "outputdir=s" => \$opt_outputdir, "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"; } if (! -d "$opt_outputdir") { mkpath("$opt_outputdir") or die "Cannot mkdir $opt_outputdir!"; } 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; 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); } $tlp->make_zip($tltree,$opt_outputdir); } warn "\n"; return 0; } __END__ =head1 NAME tlpsrc2zip - create zip file(s) from tlpsrc files =head1 SYNOPSIS tlpsrc2zip [OPTION]... [TLPSRC]... =head1 OPTIONS =over 8 =item B<-all> Generate zip files for all .tlpsrc files in C. =item B<-master> I The location given by B<-master> must point to a valid svn repository of TeX Live Master direcory. Defaults to C<../..> of C<$0>. =item B<-outputdir> I Specifies the location where zip files are created. Defaults to C<./zip>. =back The standard options C<-help> and C<-debug> are also accepted. See the tlpfiles documentation for details. =head1 DESCRIPTION B converts TeX Live Package Source files (tlpsrc) into zip files containing all the files in the package. 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). Note that a copy of the created TeX Live Package Object file (.tlpobj) is always included in the zip file in .tlpobj/NAME.tlpobj. =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: #