genparse for Debian
----------------------

Here is a feature comparison of six command line parser generators.

package                 clig    genparse gaa    autogen gengetopt wyg
			[1]     [2]     [3]     [4]     [5]     [6]
runs per project [7]    many    many    many    many    once    many
input                   file    file    file    file    file    file
C language app          yes     yes     yes     yes     yes     yes
shell script app        no      no      no      yes     no      no
package result          parser  parser  parser  parser  main.c  parser

config file input       no      no      yes     yes     no      yes
environment input       no      no      no      yes     no      no
config file output      no      no      no      yes     no      no
command line            yes     yes     yes     yes     yes     yes

short options           [8]     yes     yes     yes     yes     yes
combined short options  no      yes     yes     yes     yes     yes
long options            [8]     yes     yes     yes     yes     yes
parameter types         4       5       5       any     11      4
callback functions      no      yes     yes     yes     yes     no
multiple parameters     yes     no      no      yes     no      no
optional parameters     yes     no      no      yes     no      no
default values          yes     yes     yes     yes     no      yes
range checks            yes     yes     no      no      no      no
option data             struct  struct  struct  struct  variables struct

usage()                 yes     yes     yes     yes     yes     yes
man page                yes     no      no      no      no      no
makefile                no      no      no      no      no      no

developer dependencies  tcl     none    none    none    none    bison,flex
user dependencies       none    none    none    [9]     none    none

 [1] clig is the only tool that generates a skeleton man page.  It
also updates a previously generated man page.
 [2,3] genparse and gaa have very similar capabilities.  genparse
supports range checks, and gaa supports option input from a
configuration file as well as the command line.  NOTE HOWEVER: gaa is
not maintained upstream.
 [4] autogen has many capabilities, but here we concentrate on the
portion called AutoOpts.  AutoOpts is the most general of these
programs, and has the most extensive documentation.  It is the only
one that supports shell scripts as well as C programs.  It also
supports input from a configuration file or the environment.
 [5] gengetopt is the only one that generates a skeleton main.c
instead of a separate parsing function.
 [6] wyg uses flex and bison to generate a configuration file parser,
but uses getopt_long to parse the command line options.
 [7] A program run "once" produces files which the user is expected to
edit.  If it's run again, the user would lose his edits.  A program
supporting "many" runs, the user is not expected to edit the result.
Thus, to change the interface (to add an option, for example), the
user could edit the description file and re-run the parser generator.
 [8] xlig supports either a short or long name for a given option, but
not both, and in either case it is introduced by a single dash.
 [9] There is a user-visible dependency iff the developer does a
dynamic link to the libopts.so library.  Developers are free to either
link statically or ship libopts.so with their product.  A Debian
package would need only a dependency on the package supplying libopts
(libopts2, at present).

.
(libopts2, at present).

 -- Jari Aalto <jari.aalto@cante.net>, Thu, 11 Mar 2010 02:01:48 +0200
