]> git.saurik.com Git - bison.git/blobdiff - build-aux/cross-options.pl
Clean up recent patches a little.
[bison.git] / build-aux / cross-options.pl
index 2cec3696162e487e0bb0cae9b3d7859fd18348fd..241c741b8f71ad277aedc36991e2d55a65d27c6a 100755 (executable)
@@ -5,7 +5,10 @@ use 5.005;
 use strict;
 
 my %option;
 use strict;
 
 my %option;
-while (<>)
+my %directive;
+my $scanner = `grep -i '"%[a-z]' $ARGV[0]`;
+$scanner =~ s/"\[-_\]"/-/g;
+while (<STDIN>)
 {
     if (/^\s*             # Initial spaces.
         (?:(-\w),\s+)?    # $1: $short: Possible short option.
 {
     if (/^\s*             # Initial spaces.
         (?:(-\w),\s+)?    # $1: $short: Possible short option.
@@ -16,7 +19,10 @@ while (<>)
         /x)
     {
        my ($short, $long, $opt, $arg) = ($1, $2, $3, $4);
         /x)
     {
        my ($short, $long, $opt, $arg) = ($1, $2, $3, $4);
-       $short = defined $short ? '@option{' . $short . '}' : '';
+       $short = '' if ! defined $short;
+       $short = '-d' if $long eq '--defines' && ! $short;
+       my $dir = '%' . substr($long, 2);
+       $dir = '' if index ($scanner, "\"$dir\"") < 0;
        if ($arg)
        {
             # if $opt, $arg contains the closing ].
        if ($arg)
        {
             # if $opt, $arg contains the closing ].
@@ -24,25 +30,46 @@ while (<>)
                 if $opt eq '[';
            $arg =~ s/^=//;
             $arg = lc ($arg);
                 if $opt eq '[';
            $arg =~ s/^=//;
             $arg = lc ($arg);
+           my $dir_arg = $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;
             # 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" : '';
-       }
-       else
-       {
-           $option{"$long"} = "$short";
+           my $long_arg = "=$arg";
+           if ($opt eq '[') {
+             $long_arg = "[$long_arg]";
+             $arg = "[$arg]";
+           }
+           # For arguments of directives: this only works if all arguments
+           # are strings and have the same syntax as on the command line.
+           if ($dir_arg eq 'name[=value]')
+           {
+               $dir_arg = '@var{name} ["@var{value}"]';
+           }
+           else
+           {
+               $dir_arg =~ s/(\w+)/\@var{"$1"}/g;
+               $dir_arg = '[' . $dir_arg . ']'
+                   if $opt eq '[';
+           }
+           $long = "$long$long_arg";
+           $short = "$short $arg" if $short && $short ne '-d';
+           $dir = "$dir $dir_arg" if $dir;
        }
        }
+       $option{$long} = $short;
+       $directive{$long} = $dir;
     }
 }
 
     }
 }
 
+my $sep = '';
 foreach my $long (sort keys %option)
 {
     # Avoid trailing spaces.
 foreach my $long (sort keys %option)
 {
     # Avoid trailing spaces.
-    printf ("\@item %-40s \@tab%s\n",
-            '@option{' . $long . '}',
-            $option{$long} ? " $option{$long}" : "");
+    print $sep;
+    $sep = "\n";
+    print '@item @option{', $long, "}\n\@tab";
+    print ' @option{', $option{$long}, '}' if $option{$long};
+    print "\n\@tab";
+    print ' @code{', $directive{$long}, '}' if $directive{$long};
+    print "\n";
 }
 }