Home | History | Annotate | Download | only in build-aux
      1 #! /usr/bin/env perl
      2 
      3 use warnings;
      4 use 5.005;
      5 use strict;
      6 
      7 my %option;
      8 my %directive;
      9 my $scanner = `grep -i '"%[a-z]' $ARGV[0]`;
     10 $scanner =~ s/"\[-_\]"/-/g;
     11 while (<STDIN>)
     12 {
     13     if (/^\s*             # Initial spaces.
     14         (?:(-\w),\s+)?    # $1: $short: Possible short option.
     15         (--[-\w]+)        # $2: $long:  Long option.
     16         (\[?)             # $3: $opt:   '[' iff the argument is optional.
     17         (?:=(\S+))?       # $4: $arg:   Possible argument name.
     18         \s                # Spaces.
     19         /x)
     20     {
     21 	my ($short, $long, $opt, $arg) = ($1, $2, $3, $4);
     22 	$short = '' if ! defined $short;
     23 	$short = '-d' if $long eq '--defines' && ! $short;
     24 	my $dir = '%' . substr($long, 2);
     25 	if (index ($scanner, "\"$dir\"") < 0)
     26 	{
     27 	  if ($long eq '--force-define') { $dir = '%define'; }
     28 	  else { $dir = ''; }
     29 	}
     30 	if ($arg)
     31 	{
     32             # if $opt, $arg contains the closing ].
     33             substr ($arg, -1) = ''
     34                 if $opt eq '[';
     35 	    $arg =~ s/^=//;
     36             $arg = lc ($arg);
     37 	    my $dir_arg = $arg;
     38             # If the argument is compite (e.g., for --define[=NAME[=VALUE]]),
     39             # put each word in @var, to build @var{name}[=@var{value}], not
     40             # @var{name[=value]}].
     41 	    $arg =~ s/(\w+)/\@var{$1}/g;
     42 	    my $long_arg = "=$arg";
     43 	    if ($opt eq '[') {
     44 	      $long_arg = "[$long_arg]";
     45 	      $arg = "[$arg]";
     46 	    }
     47 	    # For arguments of directives: this only works if all arguments
     48 	    # are strings and have the same syntax as on the command line.
     49 	    if ($dir_arg eq 'name[=value]')
     50 	    {
     51 		$dir_arg = '@var{name} ["@var{value}"]';
     52 	    }
     53 	    else
     54 	    {
     55 		$dir_arg =~ s/(\w+)/\@var{"$1"}/g;
     56 		$dir_arg = '[' . $dir_arg . ']'
     57 		    if $opt eq '[';
     58 	    }
     59 	    $long = "$long$long_arg";
     60 	    $short = "$short $arg" if $short && $short ne '-d';
     61 	    $dir = "$dir $dir_arg" if $dir;
     62 	}
     63 	$option{$long} = $short;
     64 	$directive{$long} = $dir;
     65     }
     66 }
     67 
     68 my $sep = '';
     69 foreach my $long (sort keys %option)
     70 {
     71     # Avoid trailing spaces.
     72     print $sep;
     73     $sep = "\n";
     74     print '@item @option{', $long, "}\n\@tab";
     75     print ' @option{', $option{$long}, '}' if $option{$long};
     76     print "\n\@tab";
     77     print ' @code{', $directive{$long}, '}' if $directive{$long};
     78     print "\n";
     79 }
     80