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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.if !\nF .nr F 0
.if \nF>0 \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "CTAN-O-MAT 1"
.TH CTAN-O-MAT 1 "2017-11-23" "ctan-o-mat" "Gerd Neugebauer"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
ctan\-o\-mat \- Validate and upload a package for CTAN
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
ctan-o-mat [options] [<package configuration>]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This program can be used to automate the upload of a package to the
Comprehensive TeX Archive Network (https://www.ctan.org). The description
of the package is taken from a configuration file. Thus it can be updated
easily without the need to fill a Web form with the same old information
again and again.
.PP
The provided information is validated in any case. If the validation
succeeds and not only the validation is requested then the provided
archive file is placed in the incoming area of the \s-1CTAN\s0 for further
processing by the \s-1CTAN\s0 team.
.PP
In any case any finding during the validation is reported at the end
of the processing. Note that the validation is the default and a
official submission has to be requested by the an appropriate command
line option.
.PP
\&\fBctan-o-mat\fR requires an Internet connection to the \s-1CTAN\s0 server. Even the
validation retrieves the known attributes and the basic constraints
from the server.
.SH "CONFIGURATION"
.IX Header "CONFIGURATION"
The default configuration is read from a file with the same name as
the current directory an the extension .pkg. This file name can be
overwritten on the command line.
.PP
The configuration depends on the features currently supported by the
\&\s-1CTAN\s0 server.
Since these features can change over time the configuration is not
hard-coded in \fBctan-o-mat\fR. You can request an empty template of the
configuration via the command line parameter \f(CW\*(C`\-\-init\*(C'\fR.
.SH "OPTIONS"
.IX Header "OPTIONS"
.IP "\-h" 4
.IX Item "-h"
.PD 0
.IP "\-\-help" 4
.IX Item "--help"
.PD
Print this short summary about the usage and exit the program.
.IP "\-i" 4
.IX Item "-i"
.PD 0
.IP "\-\-init" 4
.IX Item "--init"
.PD
Create an empty template for a configuration.
.IP "\-\-list licenses" 4
.IX Item "--list licenses"
List the known licenses of \s-1CTAN\s0 to the standard output stream.
Each license is represented as one line. The line contains the fields
key, name, free indicator. Those fields are separated by tab characters.
Afterwards the program terminates without processing any further arguments.
.IP "\-\-config <package configuration>" 4
.IX Item "--config <package configuration>"
.PD 0
.IP "\-\-pkg <package configuration>" 4
.IX Item "--pkg <package configuration>"
.IP "\-\-package <package configuration>" 4
.IX Item "--package <package configuration>"
.PD
Set the package configuration file.
.IP "\-s" 4
.IX Item "-s"
.PD 0
.IP "\-\-submit" 4
.IX Item "--submit"
.PD
Upload the submission, validate it and officially submit it to \s-1CTAN\s0 it the
validation succeeds.
.IP "\-v" 4
.IX Item "-v"
.PD 0
.IP "\-\-verbose" 4
.IX Item "--verbose"
.PD
Print some more information during the processing (verbose mode).
.IP "\-\-version" 4
.IX Item "--version"
Print the version number of this program and exit.
.IP "\-\-validate" 4
.IX Item "--validate"
.PD 0
.IP "\-n" 4
.IX Item "-n"
.IP "\-\-noaction" 4
.IX Item "--noaction"
.PD
Do not perform the final upload. The package is validated and the
resulting messages are printed.
.IP "<package>" 4
.IX Item "<package>"
This parameter is the name of a package configuration
(see section \s-1CONFIGURATION\s0) contained in a file.
If not set otherwise the package configuration defaults to the
name of the current directory with \f(CW\*(C`.pkg\*(C'\fR appended.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
The following environment variables are recognized by \fBctan-o-mat\fR.
.IP "\s-1CTAN_O_MAT_URL\s0" 4
.IX Item "CTAN_O_MAT_URL"
The value is the \s-1URL\s0 prefix for the \s-1CTAN\s0 server to be contacted. The default
is \f(CW\*(C`https://ctan.org/submit\*(C'\fR. The complete \s-1URL\s0 is constructed by appending
\&\f(CW\*(C`validate\*(C'\fR, \f(CW\*(C`upload\*(C'\fR, or \f(CW\*(C`fields\*(C'\fR to use the respective \s-1CTAN REST API.\s0
.SH "CONNECTING VIA PROXIES"
.IX Header "CONNECTING VIA PROXIES"
If you need to connect to the Internet via a proxy then this can be achieved
by setting some environment variables before running \fBctan-o-mat\fR.
To redirect the request via the proxy simply define an environment variable
\&\f(CW\*(C`http_proxy\*(C'\fR to point to the proxy host \*(-- including protocol and port as
required. Note that the name of the environment variable is supposed to be in
\&\fBlower\fR case.
.SH "AUTHOR"
.IX Header "AUTHOR"
Gerd Neugebauer (gene@gerd\-neugebauer.de)
.SH "BUGS"
.IX Header "BUGS"
.IP "\(bu" 4
The program can not be used without a working connection to the
Internet.
|