#! /usr/bin/perl # c2optlist
# # From one of our "standardized" main C files containing an # ESL_OPTIONS block, print a table listing each option. # Only the first block in the file is parsed, if multiple # ones exist. # # Crosscomparisons with man2optlist and sqc2optlist allow verification # that the options in a main .c file are documented in a .man page # and tested in a .sqc unit test file. # # Options are looked for following a line # static ESL_OPTIONS ... # until a bare # } # is found on a line by itself. # # SRE, Tue Sep 15 10:04:30 2009 [Janelia] # SVN $Id$ # while (<>) { if (/^static ESL_OPTIONS/) { $in_optionblock = 1; next; } if ($in_optionblock) { if (/^\s*{\s*"(-\S)",\s*([^,]+),/) { $option = $1; $arg = $2; } # short option elsif (/^\s*{\s*"(--\S+)",\s*([^,]+),/) { $option = $1; $arg = $2; } # long option elsif (/^\s*$/) { next; } # blank line elsif (/^\s*\/\*/) { next; } # comment line elsif (/^#if/) { next; } # allow conditional compilation of options elsif (/^#end/) { next; } # allow conditional compilation of options elsif (/^\s*{\s*0,\s*0,\s*0,/) { last; } # empty vector: end of options else { die "unrecognized option line:\n$_"; } if ($arg eq "eslARG_NONE") { $optarg = "-"; } elsif ($arg eq "eslARG_INT") { $optarg = ""; } elsif ($arg eq "eslARG_REAL") { $optarg = ""; } elsif ($arg eq "eslARG_CHAR") { $optarg = ""; } elsif ($arg eq "eslARG_STRING") { $optarg = ""; } elsif ($arg eq "eslARG_INFILE") { $optarg = ""; } elsif ($arg eq "eslARG_OUTFILE") { $optarg = ""; } else { die "unrecognized option argument $arg on line:\n$_"; } printf ("%-20s %s\n", $option, $optarg); } if (/^};/) { die "Reached end of option structure without seeing empty 0,0,0,... vector"; } }