summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tlpsrc2container
blob: a65aa9975efdbaf15c7ac68ff41586b4ca9e9e51 (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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/usr/bin/env perl
# $Id$
# tlpsrc2container - create container 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_type = "zip";
my $opt_outputdir = "./zip";
my $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,
    "type=s"      => \$opt_type,
    "debug!", "help|?" => \$help) or pod2usage(1);

pod2usage(-exitstatus => 0, -verbose => 2) if $help;

if ($opt_debug) {
  $::LOGLEVELFILE = $::LOG_DDDEBUG;
  $::LOGLEVELTERMINAL = $::LOG_DDDEBUG;
}

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) {
		tllog ($::LOG_NORMAL, "$0: -c /Cat/a/logue not given, continuing without it.\n");
	} else {
		require TeXLive::TeXCatalogue;  # not at compile time, for now anyway.
		tllog ($::LOG_NORMAL, "$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");
	}

	tllog ($::LOG_NORMAL, "$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_container($opt_type,$opt_master,$opt_outputdir);
	}
	warn "\n";

	return 0;
}

__END__

=head1 NAME

tlpsrc2container - create container file(s) from tlpsrc files

=head1 SYNOPSIS

tlpsrc2container [OPTION]... [TLPSRC]...

=head1 OPTIONS

=over 8

=item B<-all>
Generate container files for all .tlpsrc files in C<Master/tlpkg/tlpsrc/*.tlpsrc>.

=item B<-outputdir> I<outputdir>
The location where created container files are placed, defaults to ./zip.

=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<-catalogue> I<Catalogue_dir>
The location given by B<-catalogue> must point to a valid TeX Catalogue.
No default value. If given, the included tlpobj files will contain information
gathered from the TeX Catalogue.

=item B<-type> I<zip|lzma>
Specifies the type of container to be used. C<zip> generates zip files,
while C<lzma> generates .tar.lzma files.

=back

The standard options C<-help> and C<-debug> are also accepted.
See the tlpfiles documentation for details.


=head1 DESCRIPTION

To distribute packages over the network and on installation media the 
packages are wrapped into container files. These container are either 
simple zip files or tar.lzma file containing all the files of the package.

B<tlpsrc2container> converts TeX Live Package Source files (tlpsrc) into 
container 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).


=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: #