gengetopt 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).

.


 -- James R. Van Zandt <jrv@vanzandt.mv.com>, Sun, 20 Jun 1999 10:15:03 -0400
