From 74eae918c3bf3772d260cb25777d9a998172a401 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 29 Jul 2008 12:41:48 +0200 Subject: [PATCH] Handle more general types of option arguments. * build-aux/cross-options.pl: The argument ends at the first space, not the first non-symbol character. Use @var for each word appearing the argument description. --- ChangeLog | 7 +++++++ build-aux/cross-options.pl | 25 ++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9f76020..2d384edc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-07 Akim Demaille + + Handle more general types of option arguments. + * build-aux/cross-options.pl: The argument ends at the first + space, not the first non-symbol character. + Use @var for each word appearing the argument description. + 2008-11-07 Akim Demaille Destroy the variants that remain on the stack in case of error. diff --git a/build-aux/cross-options.pl b/build-aux/cross-options.pl index 31733e72..2cec3696 100755 --- a/build-aux/cross-options.pl +++ b/build-aux/cross-options.pl @@ -7,19 +7,27 @@ use strict; my %option; while (<>) { - if (/^\s* # Initial spaces. - (?:(-\w),\s+)? # $1: Possible short option. - (--[-\w]+) # $2: Long option. - (\[?) # $3: '[' iff the argument is optional. - (?:=([-\w]+))? # $4: Possible argument name. + if (/^\s* # Initial spaces. + (?:(-\w),\s+)? # $1: $short: Possible short option. + (--[-\w]+) # $2: $long: Long option. + (\[?) # $3: $opt: '[' iff the argument is optional. + (?:=(\S+))? # $4: $arg: Possible argument name. + \s # Spaces. /x) { my ($short, $long, $opt, $arg) = ($1, $2, $3, $4); $short = defined $short ? '@option{' . $short . '}' : ''; if ($arg) { + # if $opt, $arg contains the closing ]. + substr ($arg, -1) = '' + if $opt eq '['; $arg =~ s/^=//; - $arg = '@var{' . lc ($arg) . '}'; + $arg = lc ($arg); + # If the argument is compite (e.g., for --define[=NAME[=VALUE]]), + # put each word in @var, to build @var{name}[=@var{value}], not + # @var{name[=value]}]. + $arg =~ s/(\w+)/\@var{$1}/g; $arg = '[' . $arg . ']' if $opt eq '['; $option{"$long=$arg"} = $short ? "$short $arg" : ''; @@ -33,5 +41,8 @@ while (<>) foreach my $long (sort keys %option) { - printf "\@item %-40s \@tab %s\n", '@option{' . $long . '}', $option{$long}; + # Avoid trailing spaces. + printf ("\@item %-40s \@tab%s\n", + '@option{' . $long . '}', + $option{$long} ? " $option{$long}" : ""); } -- 2.45.2