autogen 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 , Fri, 18 Jun 1999 21:23:48 -0400