summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tlpsrc2zip
blob: 50d4f715088d828f454730c6242bb67e76c90489 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/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;
  chomp ($mydir = `dirname $0`);
  unshift (@INC, "$mydir/..");
}

use strict;

use TeXLive::TLPSRC;
use TeXLive::TLPOBJ;
use TeXLive::TLTREE;
use Cwd;
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!";
	}
  # we have an relative zipdir, so we have to make it absolute
  my $cwd = &getcwd;
  if ("$opt_outputdir" !~ m@^/@) {
    $opt_outputdir = "$cwd/$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($opt_master,$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<Master/tlpkg/tlpsrc/*.tlpsrc>.

=item B<-master> I<Master_dir>
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<output_dir>
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<tlpsrc2zip> 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<TeXLive::TLPOBJ> 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<http://tug.org/texlive>) 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: #