cmdline-opts: support generating the --help output

This commit is contained in:
Daniel Stenberg 2016-11-15 09:08:50 +01:00
parent 7c9b9add6f
commit b8c35f40f9
14 changed files with 84 additions and 14 deletions

View File

@ -26,6 +26,7 @@ Each file has a set of meta-data and a body of text.
Mutexed: (space separated list of options this overrides) Mutexed: (space separated list of options this overrides)
Requires: (space separated list of features this option requres) Requires: (space separated list of features this option requres)
See-also: (space separated list of related options) See-also: (space separated list of related options)
Help: (short text for the --help output for this option)
--- (end of meta-data) --- (end of meta-data)
### Body ### Body
@ -37,11 +38,15 @@ correct markup that shows both short and long version.
## Header ## Header
`page-header` is the nroff formatted file that will be output before the `page-header` is the nroff formatted file that will be output before the
generated options output. generated options output for the master man page.
## Generate ## Generate
`perl gen.pl` `./gen.pl mainpage`
This command outputs an nroff file, meant to become `curl.1`. The full curl This command outputs a single huge nroff file, meant to become `curl.1`. The
man page. full curl man page.
`./gen.pl listhelp`
Generates a full `curl --help` output for all known command line options.

View File

@ -2,6 +2,7 @@ Short: c
Long: cookie-jar Long: cookie-jar
Arg: <filename> Arg: <filename>
Protocols: HTTP Protocols: HTTP
Help: Write cookies to <filename> after operation
--- ---
Specify to which file you want curl to write all cookies after a completed Specify to which file you want curl to write all cookies after a completed
operation. Curl writes all cookies from its in-memory cookie storage to the operation. Curl writes all cookies from its in-memory cookie storage to the

View File

@ -1,7 +1,8 @@
Short: b Short: b
Long: cookie Long: cookie
Arg: <name=data> Arg: <data>
Protocols: HTTP Protocols: HTTP
Help: Send cookies from string/file
--- ---
Pass the data to the HTTP server in the Cookie header. It is supposedly Pass the data to the HTTP server in the Cookie header. It is supposedly
the data previously received from the server in a "Set-Cookie:" line. The the data previously received from the server in a "Set-Cookie:" line. The

View File

@ -8,6 +8,8 @@ closedir $dh;
my %optshort; my %optshort;
my %optlong; my %optlong;
my %helplong;
my %arglong;
# get the long name version, return the man page string # get the long name version, return the man page string
sub manpageify { sub manpageify {
@ -165,7 +167,8 @@ sub getshortlong {
open(F, "<$f"); open(F, "<$f");
my $short; my $short;
my $long; my $long;
my $help;
my $arg;
while(<F>) { while(<F>) {
if(/^Short: (.)/i) { if(/^Short: (.)/i) {
$short=$1; $short=$1;
@ -173,6 +176,12 @@ sub getshortlong {
elsif(/^Long: (.*)/i) { elsif(/^Long: (.*)/i) {
$long=$1; $long=$1;
} }
elsif(/^Help: (.*)/i) {
$help=$1;
}
elsif(/^Arg: (.*)/i) {
$arg=$1;
}
elsif(/^---/) { elsif(/^---/) {
last; last;
} }
@ -183,6 +192,8 @@ sub getshortlong {
} }
if($long) { if($long) {
$optlong{$long}=$short; $optlong{$long}=$short;
$helplong{$long}=$help;
$arglong{$long}=$arg;
} }
} }
@ -202,15 +213,59 @@ sub header {
printdesc(@d); printdesc(@d);
} }
sub listhelp {
foreach my $f (sort keys %helplong) {
my $long = $f;
my $short = $optlong{$long};
my $opt;
if(defined($short) && $long) {
$opt = "-$short, --$long";
}
elsif($long && !$short) {
$opt = " --$long";
}
my $arg = $arglong{$long};
if($arg) {
$opt .= " $arg";
}
printf " %-19s %s\n", $opt, $helplong{$f};
}
}
sub mainpage {
# show the page header
header();
# output docs for all options
foreach my $f (sort @s) {
single($f);
}
}
sub getargs {
my $f;
do {
$f = shift @ARGV;
if($f eq "mainpage") {
mainpage();
return;
}
elsif($f eq "listhelp") {
listhelp();
return;
}
} while($f);
print "Usage: gen.pl <mainpage/listhelp>\n";
}
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# learn all existing options # learn all existing options
indexoptions(); indexoptions();
# show the page header getargs();
header();
# output docs for all options
foreach my $f (sort @s) {
single($f);
}

View File

@ -4,6 +4,7 @@ Tags: Versions
Protocols: HTTP Protocols: HTTP
Added: Added:
Mutexed: http1.1 http2 Mutexed: http1.1 http2
Help: Use HTTP 1.0
--- ---
Tells curl to use HTTP version 1.0 instead of using its internally preferred Tells curl to use HTTP version 1.0 instead of using its internally preferred
HTTP version. HTTP version.

View File

@ -4,5 +4,6 @@ Tags: Versions
Protocols: HTTP Protocols: HTTP
Added: 7.33.0 Added: 7.33.0
Mutexed: http1.0 http2 Mutexed: http1.0 http2
Help: Use HTTP 1.1
--- ---
Tells curl to use HTTP version 1.1. Tells curl to use HTTP version 1.1.

View File

@ -5,6 +5,7 @@ Protocols: HTTP
Added: 7.49.0 Added: 7.49.0
Mutexed: http1.1 http1.0 http2 Mutexed: http1.1 http1.0 http2
Requires: HTTP/2 Requires: HTTP/2
Help: Use HTTP 2 without HTTP/1.1 Upgrade
--- ---
Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1
Upgrade. It requires prior knowledge that the server supports HTTP/2 straight Upgrade. It requires prior knowledge that the server supports HTTP/2 straight

View File

@ -6,5 +6,6 @@ Added: 7.33.0
Mutexed: http1.1 http1.0 http2-prior-knowledge Mutexed: http1.1 http1.0 http2-prior-knowledge
Requires: HTTP/2 Requires: HTTP/2
See-also: no-alpn See-also: no-alpn
Help: Use HTTP 2
--- ---
Tells curl to use HTTP version 2. Tells curl to use HTTP version 2.

View File

@ -4,6 +4,7 @@ Tags:
Protocols: Protocols:
Added: 7.36.0 Added: 7.36.0
Magic: divider Magic: divider
Help: Make next URL use its separate set of options
--- ---
Tells curl to use a separate operation for the following URL and associated Tells curl to use a separate operation for the following URL and associated
options. This allows you to send several URL requests, each with their own options. This allows you to send several URL requests, each with their own

View File

@ -6,6 +6,7 @@ Added: 7.36.0
Mutexed: Mutexed:
See-also: no-npn http2 See-also: no-npn http2
Requires: TLS Requires: TLS
Help: Disable the ALPN TLS extension
--- ---
Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built
with an SSL library that supports ALPN. ALPN is used by a libcurl that supports with an SSL library that supports ALPN. ALPN is used by a libcurl that supports

View File

@ -6,6 +6,7 @@ Added: 7.36.0
Mutexed: Mutexed:
See-also: no-alpn http2 See-also: no-alpn http2
Requires: TLS Requires: TLS
Help: Disable the NPN TLS extension
--- ---
Disable the NPN TLS extension. NPN is enabled by default if libcurl was built Disable the NPN TLS extension. NPN is enabled by default if libcurl was built
with an SSL library that supports NPN. NPN is used by a libcurl that supports with an SSL library that supports NPN. NPN is used by a libcurl that supports

View File

@ -1,7 +1,6 @@
Short: # Short: #
Long: progress-bar Long: progress-bar
Tags: Help: Disable the ALPN TLS extension
Protocols:
--- ---
Make curl display transfer progress as a simple progress bar instead of the Make curl display transfer progress as a simple progress bar instead of the
standard, more informational, meter. standard, more informational, meter.

View File

@ -6,6 +6,7 @@ Added:
Mutexed: tlsv1.1 tlsv1.2 Mutexed: tlsv1.1 tlsv1.2
Requires: TLS Requires: TLS
See-also: http1.1 http2 See-also: http1.1 http2
Help: Use TLSv1.0 or greater
--- ---
Forces curl to use TLS version 1.x when negotiating with a remote TLS server. Forces curl to use TLS version 1.x when negotiating with a remote TLS server.
You can use options --tlsv1.0, --tlsv1.1, --tlsv1.2, and --tlsv1.3 to control You can use options --tlsv1.0, --tlsv1.1, --tlsv1.2, and --tlsv1.3 to control

View File

@ -1,6 +1,7 @@
Short: v Short: v
Long: verbose Long: verbose
Mutexed: trace trace-ascii Mutexed: trace trace-ascii
Help: Make the operation more talkative
--- ---
Makes curl verbose during the operation. Useful for debugging and seeing Makes curl verbose during the operation. Useful for debugging and seeing
what's going on "under the hood". A line starting with '>' means "header data" what's going on "under the hood". A line starting with '>' means "header data"