2 Documentation for the argp argument parser
4 Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
5 This file is part of the GNU C Library.
6 Written by Miles Bader <miles@gnu.ai.mit.edu>.
8 The GNU C Library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public License as
10 published by the Free Software Foundation; either version 2 of the
11 License, or (at your option) any later version.
13 The GNU C Library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details.
18 You should have received a copy of the GNU Library General Public
19 License along with the GNU C Library; see the file COPYING.LIB. If not,
20 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 @node Argp, Suboptions, Getopt, Parsing Program Arguments
26 @section Parsing Program Options with Argp
27 @cindex argp (program argument parser)
28 @cindex argument parsing with argp
29 @cindex option parsing with argp
31 @dfn{Argp} is an interface for parsing unix-style argument vectors
32 (@pxref{Program Arguments}).
34 Unlike the more common @code{getopt} interface, it provides many related
35 convenience features in addition to parsing options, such as
36 automatically producing output in response to @samp{--help} and
37 @samp{--version} options (as defined by the GNU coding standards).
38 Doing these things in argp results in a more consistent look for
39 programs that use it, and makes less likely that implementors will
40 neglect to implement them or keep them up-to-date.
42 Argp also provides the ability to merge several independently defined
43 option parsers into one, mediating conflicts between them, and making
44 the result appear seamless. A library can export an argp option parser,
45 which programs can easily use in conjunction with their own option
46 parser. This results in less work for user programs (indeed, some may
47 use only argument parsers exported by libraries, and have no options of
48 their own), and more consistent option-parsing for the abstractions
49 implemented by the library.
52 The header file @file{<argp.h>} should be included to use argp.
54 @subsection The @code{argp_parse} Function
56 The main interface to argp is the @code{argp_parse} function; often, a
57 call to @code{argp_parse} is the only argument-parsing code needed in
58 @code{main} (@pxref{Program Arguments}).
62 @deftypefun {error_t} argp_parse (const struct argp *@var{argp}, int @var{argc}, char **@var{argv}, unsigned @var{flags}, int *@var{arg_index}, void *@var{input})
63 The @code{argp_parse} function parses the arguments in @var{argv}, of
64 length @var{argc}, using the argp parser @var{argp} (@pxref{Argp
65 Parsers}); a value of zero is the same as a @code{struct argp}
66 containing all zeros. @var{flags} is a set of flag bits that modify the
67 parsing behavior (@pxref{Argp Flags}). @var{input} is passed through to
68 the argp parser @var{argp}, and has meaning defined by it; a typical
69 usage is to pass a pointer to a structure which can be used for
70 specifying parameters to the parser and passing back results from it.
72 Unless the @code{ARGP_NO_EXIT} or @code{ARGP_NO_HELP} flags are included
73 in @var{flags}, calling @code{argp_parse} may result in the program
74 exiting---for instance when an unknown option is encountered.
75 @xref{Program Termination}.
77 If @var{arg_index} is non-null, the index of the first unparsed option
78 in @var{argv} is returned in it.
80 The return value is zero for successful parsing, or an error code
81 (@pxref{Error Codes}) if an error was detected. Different argp parsers
82 may return arbitrary error codes, but standard ones are @code{ENOMEM} if
83 a memory allocation error occurred, or @code{EINVAL} if an unknown option
84 or option argument was encountered.
88 * Globals: Argp Global Variables. Global argp parameters.
89 * Parsers: Argp Parsers. Defining parsers for use with @code{argp_parse}.
90 * Flags: Argp Flags. Flags that modify the behavior of @code{argp_parse}.
91 * Help: Argp Help. Printing help messages when not parsing.
92 * Examples: Argp Examples. Simple examples of programs using argp.
93 * Customization: Argp User Customization.
94 Users may control the @samp{--help} output format.
97 @node Argp Global Variables, Argp Parsers, , Argp
98 @subsection Argp Global Variables
100 These variables make it very easy for every user program to implement
101 the @samp{--version} option and provide a bug-reporting address in the
102 @samp{--help} output (which is implemented by argp regardless).
106 @deftypevar {const char *} argp_program_version
107 If defined or set by the user program to a non-zero value, then a
108 @samp{--version} option is added when parsing with @code{argp_parse}
109 (unless the @code{ARGP_NO_HELP} flag is used), which will print this
110 string followed by a newline and exit (unless the @code{ARGP_NO_EXIT}
116 @deftypevar {const char *} argp_program_bug_address
117 If defined or set by the user program to a non-zero value,
118 @code{argp_program_bug_address} should point to a string that is the
119 bug-reporting address for the program. It will be printed at the end of
120 the standard output for the @samp{--help} option, embedded in a sentence
121 that says something like @samp{Report bugs to @var{address}.}.
127 @defvar argp_program_version_hook
128 If defined or set by the user program to a non-zero value, then a
129 @samp{--version} option is added when parsing with @code{argp_parse}
130 (unless the @code{ARGP_NO_HELP} flag is used), which calls this function
131 to print the version, and then exits with a status of 0 (unless the
132 @code{ARGP_NO_EXIT} flag is used). It should point to a function with
133 the following type signature:
136 void @var{print-version} (FILE *@var{stream}, struct argp_state *@var{state})
140 @xref{Argp Parsing State}, for an explanation of @var{state}.
142 This variable takes precedent over @code{argp_program_version}, and is
143 useful if a program has version information that cannot be easily
144 specified as a simple string.
149 @deftypevar error_t argp_err_exit_status
150 The exit status that argp will use when exiting due to a parsing error.
151 If not defined or set by the user program, this defaults to
152 @code{EX_USAGE} from @file{<sysexits.h>}.
155 @node Argp Parsers, Argp Flags, Argp Global Variables, Argp
156 @subsection Specifying Argp Parsers
158 The first argument to the @code{argp_parse} function is a pointer to a
159 @code{struct argp}, which known as an @dfn{argp parser}:
163 @deftp {Data Type} {struct argp}
164 This structure specifies how to parse a given set of options and
165 arguments, perhaps in conjunction with other argp parsers. It has the
169 @item const struct argp_option *options
170 A pointer to a vector of @code{argp_option} structures specifying which
171 options this argp parser understands; it may be zero if there are no
172 options at all. @xref{Argp Option Vectors}.
174 @item argp_parser_t parser
175 A pointer to a function that defines actions for this parser; it is
176 called for each option parsed, and at other well-defined points in the
177 parsing process. A value of zero is the same as a pointer to a
178 function that always returns @code{ARGP_ERR_UNKNOWN}.
179 @xref{Argp Parser Functions}.
181 @item const char *args_doc
182 If non-zero, a string describing what non-option arguments are wanted by
183 this parser; it is only used to print the @samp{Usage:} message. If it
184 contains newlines, the strings separated by them are considered
185 alternative usage patterns, and printed on separate lines (lines after
186 the first are prefixed by @samp{ or: } instead of @samp{Usage:}).
188 @item const char *doc
189 If non-zero, a string containing extra text to be printed before and
190 after the options in a long help message, with the two sections
191 separated by a vertical tab (@code{'\v'}, @code{'\013'}) character. By
192 convention, the documentation before the options is just a short string
193 saying what the program does, and that afterwards is longer, describing
194 the behavior in more detail.
196 @item const struct argp_child *children
197 A pointer to a vector of @code{argp_children} structures specifying
198 additional argp parsers that should be combined with this one.
199 @xref{Argp Children}.
201 @item char *(*help_filter)(int @var{key}, const char *@var{text}, void *@var{input})
202 If non-zero, a pointer to a function to filter the output of help
203 messages. @xref{Argp Help Filtering}.
207 The @code{options}, @code{parser}, @code{args_doc}, and @code{doc}
208 fields are usually all that are needed. If an argp parser is defined as
209 an initialized C variable, only the used fields need be specified in
210 the initializer---the rest will default to zero due to the way C
211 structure initialization works (this fact is exploited for most argp
212 structures, grouping the most-used fields near the beginning, so that
213 unused fields can simply be left unspecified).
216 * Options: Argp Option Vectors. Specifying options in an argp parser.
217 * Argp Parser Functions:: Defining actions for an argp parser.
218 * Children: Argp Children. Combining multiple argp parsers.
219 * Help Filtering: Argp Help Filtering. Customizing help output for an argp parser.
222 @node Argp Option Vectors, Argp Parser Functions, Argp Parsers, Argp Parsers
223 @subsection Specifying Options in an Argp Parser
225 The @code{options} field in a @code{struct argp} points to a vector of
226 @code{struct argp_option} structures, each of which specifies an option
227 that argp parser supports (actually, sometimes multiple entries may used
228 for a single option if it has many names). It should be terminated by
229 an entry with zero in all fields (note that when using an initialized C
230 array for options, writing @code{@{ 0 @}} is enough to achieve this).
234 @deftp {Data Type} {struct argp_option}
235 This structure specifies a single option that an argp parser
236 understands, and how to parse and document it. It has the following fields:
239 @item const char *name
240 The long name for this option, corresponding to the long option
241 @samp{--@var{name}}; this field can be zero if this option only has a
242 short name. To specify multiple names for an option, additional entries
243 may follow this one, with the @code{OPTION_ALIAS} flag set (@pxref{Argp
247 The integer key that is provided to the argp parser's parsing function
248 when this option is being parsed. Also, if @var{key} has a value that
249 is a printable @sc{ascii} character (i.e., @code{isascii (@var{key})} is
250 true), it @emph{also} specifies a short option @samp{-@var{char}}, where
251 @var{char} is the @sc{ascii} character with the code @var{key}.
253 @item const char *arg
254 If non-zero, this is the name of an argument associated with this
255 option, which must be provided (e.g., with the
256 @samp{--@var{name}=@var{value}} or @samp{-@var{char} @var{value}}
257 syntaxes) unless the @code{OPTION_ARG_OPTIONAL} flag (@pxref{Argp Option
258 Flags}) is set, in which case it @emph{may} be provided.
261 Flags associated with this option (some of which are referred to above).
262 @xref{Argp Option Flags}.
264 @item const char *doc
265 A documentation string for this option, for printing in help messages.
267 If both the @code{name} and @code{key} fields are zero, this string
268 will be printed out-dented from the normal option column, making it
269 useful as a group header (it will be the first thing printed in its
270 group); in this usage, it's conventional to end the string with a
274 The group this option is in.
276 In a long help message, options are sorted alphabetically within each
277 group, and the groups presented in the order 0, 1, 2, @dots{}, @var{n},
278 @minus{}@var{m}, @dots{}, @minus{}2, @minus{}1. Every entry in an
279 options array with this
280 field 0 will inherit the group number of the previous entry, or zero if
281 it's the first one, unless its a group header (@code{name} and
282 @code{key} fields both zero), in which case, the previous entry + 1 is
283 the default. Automagic options such as @samp{--help} are put into group
286 Note that because of C structure initialization rules, this field
287 often need not be specified, because 0 is the right value.
292 * Flags: Argp Option Flags. Flags for options.
295 @node Argp Option Flags, , , Argp Option Vectors
296 @subsubsection Flags for Argp Options
298 The following flags may be or'd together in the @code{flags} field of a
299 @code{struct argp_option}, and control various aspects of how that
300 option is parsed or displayed in help messages:
305 @item OPTION_ARG_OPTIONAL
306 The argument associated with this option is optional.
311 This option isn't displayed in any help messages.
316 This option is an alias for the closest previous non-alias option. This
317 means that it will be displayed in the same help entry, and will inherit
318 fields other than @code{name} and @code{key} from the aliased option.
323 This option isn't actually an option (and so should be ignored by the
324 actual option parser), but rather an arbitrary piece of documentation
325 that should be displayed in much the same manner as the options (known
326 as a @dfn{documentation option}).
328 If this flag is set, then the option @code{name} field is displayed
329 unmodified (e.g., no @samp{--} prefix is added) at the left-margin
330 (where a @emph{short} option would normally be displayed), and the
331 documentation string in the normal place. For purposes of sorting, any
332 leading whitespace and punctuation is ignored, except that if the first
333 non-whitespace character is not @samp{-}, this entry is displayed after
334 all options (and @code{OPTION_DOC} entries with a leading @samp{-}) in
339 @item OPTION_NO_USAGE
340 This option shouldn't be included in `long' usage messages (but is still
341 included in help messages). This is mainly intended for options that
342 are completely documented in an argp's @code{args_doc} field
343 (@pxref{Argp Parsers}), in which case including the option
344 in the generic usage list would be redundant.
346 For instance, if @code{args_doc} is @code{"FOO BAR\n-x BLAH"}, and the
347 @samp{-x} option's purpose is to distinguish these two cases, @samp{-x}
348 should probably be marked @code{OPTION_NO_USAGE}.
351 @node Argp Parser Functions, Argp Children, Argp Option Vectors, Argp Parsers
352 @subsection Argp Parser Functions
354 The function pointed to by the @code{parser} field in a @code{struct
355 argp} (@pxref{Argp Parsers}) defines what actions take place in response
356 to each option or argument that is parsed, and is also used as a hook,
357 to allow a parser to do something at certain other points during
361 Argp parser functions have the following type signature:
363 @cindex argp parser functions
365 error_t @var{parser} (int @var{key}, char *@var{arg}, struct argp_state *@var{state})
369 where the arguments are as follows:
373 For each option that is parsed, @var{parser} is called with a value of
374 @var{key} from that option's @code{key} field in the option vector
375 (@pxref{Argp Option Vectors}). @var{parser} is also called at other
376 times with special reserved keys, such as @code{ARGP_KEY_ARG} for
377 non-option arguments. @xref{Argp Special Keys}.
380 If @var{key} is an option, @var{arg} is the value given for it, or zero
381 if no value was specified. Only options that have a non-zero @code{arg}
382 field can ever have a value, and those must @emph{always} have a value,
383 unless the @code{OPTION_ARG_OPTIONAL} flag was specified (if the input
384 being parsed specifies a value for an option that doesn't allow one, an
385 error results before @var{parser} ever gets called).
387 If @var{key} is @code{ARGP_KEY_ARG}, @var{arg} is a non-option argument;
388 other special keys always have a zero @var{arg}.
391 @var{state} points to a @code{struct argp_state}, containing useful
392 information about the current parsing state for use by @var{parser}.
393 @xref{Argp Parsing State}.
396 When @var{parser} is called, it should perform whatever action is
397 appropriate for @var{key}, and return either @code{0} for success,
398 @code{ARGP_ERR_UNKNOWN}, if the value of @var{key} is not handled by
399 this parser function, or a unix error code if a real error occurred
400 (@pxref{Error Codes}).
404 @deftypevr Macro int ARGP_ERR_UNKNOWN
405 Argp parser functions should return @code{ARGP_ERR_UNKNOWN} for any
406 @var{key} value they do not recognize, or for non-option arguments
407 (@code{@var{key} == ARGP_KEY_ARG}) that they do not wish to handle.
411 A typical parser function uses a switch statement on @var{key}:
415 parse_opt (int key, char *arg, struct argp_state *state)
419 case @var{option_key}:
424 return ARGP_ERR_UNKNOWN;
431 * Keys: Argp Special Keys. Special values for the @var{key} argument.
432 * State: Argp Parsing State. What the @var{state} argument refers to.
433 * Functions: Argp Helper Functions. Functions to help during argp parsing.
436 @node Argp Special Keys, Argp Parsing State, , Argp Parser Functions
437 @subsubsection Special Keys for Argp Parser Functions
439 In addition to key values corresponding to user options, the @var{key}
440 argument to argp parser functions may have a number of other special
441 values (@var{arg} and @var{state} refer to parser function arguments;
442 @pxref{Argp Parser Functions}):
448 This is not an option at all, but rather a command line argument, whose
449 value is pointed to by @var{arg}.
451 When there are multiple parser functions (due to argp parsers being
452 combined), it's impossible to know which one wants to handle an
453 argument, so each is called in turn, until one returns 0 or an error
454 other than @code{ARGP_ERR_UNKNOWN}; if an argument is handled by no one,
455 @code{argp_parse} immediately returns success, without parsing any more
458 Once a parser function returns success for this key, that fact is
459 recorded, and the @code{ARGP_KEY_NO_ARGS} case won't be used.
460 @emph{However}, if while processing the argument, a parser function
461 decrements the @code{next} field of its @var{state} argument, the option
462 won't be considered processed; this is to allow you to actually modify
463 the argument (perhaps into an option), and have it processed again.
468 If a parser function returns @code{ARGP_ERR_UNKNOWN} for
469 @code{ARGP_KEY_ARG}, it is immediately called again with the key
470 @code{ARGP_KEY_ARGS}, which has a similar meaning, but is slightly more
471 convenient for consuming all remaining arguments. @var{arg} is 0, and
472 the tail of the argument vector may be found at @code{@var{state}->argv
473 + @var{state}->next}. If success is returned for this key, and
474 @code{@var{state}->next} is unchanged, then all remaining arguments are
475 considered to have been consumed, otherwise, the amount by which
476 @code{@var{state}->next} has been adjust indicates how many were used.
477 For instance, here's an example that uses both, for different args:
482 if (@var{state}->arg_num == 0)
484 first_arg = @var{arg};
486 /* Let the next case parse it. */
487 return ARGP_KEY_UNKNOWN;
490 remaining_args = @var{state}->argv + @var{state}->next;
491 num_remaining_args = @var{state}->argc - @var{state}->next;
498 There are no more command line arguments at all.
502 @item ARGP_KEY_NO_ARGS
503 Because it's common to want to do some special processing if there
504 aren't any non-option args, parser functions are called with this key if
505 they didn't successfully process any non-option arguments. Called just
506 before @code{ARGP_KEY_END} (where more general validity checks on
507 previously parsed arguments can take place).
512 Passed in before any parsing is done. Afterwards, the values of each
513 element of the @code{child_input} field of @var{state}, if any, are
514 copied to each child's state to be the initial value of the @code{input}
515 when @emph{their} parsers are called.
519 @item ARGP_KEY_SUCCESS
520 Passed in when parsing has successfully been completed (even if there are
521 still arguments remaining).
526 Passed in if an error has occurred, and parsing terminated (in which case
527 a call with a key of @code{ARGP_KEY_SUCCESS} is never made).
532 The final key ever seen by any parser (even after
533 @code{ARGP_KEY_SUCCESS} and @code{ARGP_KEY_ERROR}). Any resources
534 allocated by @code{ARGP_KEY_INIT} may be freed here (although sometimes
535 certain resources allocated there are to be returned to the caller after
536 a successful parse; in that case, those particular resources can be
537 freed in the @code{ARGP_KEY_ERROR} case).
540 In all cases, @code{ARGP_KEY_INIT} is the first key seen by parser
541 functions, and @code{ARGP_KEY_FINI} the last (unless an error was
542 returned by the parser for @code{ARGP_KEY_INIT}). Other keys can occur
543 in one the following orders (@var{opt} refers to an arbitrary option
547 @item @var{opt}@dots{} @code{ARGP_KEY_NO_ARGS} @code{ARGP_KEY_END} @code{ARGP_KEY_SUCCESS}
548 The arguments being parsed contained no non-option arguments at all.
550 @item ( @var{opt} | @code{ARGP_KEY_ARG} )@dots{} @code{ARGP_KEY_END} @code{ARGP_KEY_SUCCESS}
551 All non-option arguments were successfully handled by a parser function
552 (there may be multiple parser functions if multiple argp parsers were
555 @item ( @var{opt} | @code{ARGP_KEY_ARG} )@dots{} @code{ARGP_KEY_SUCCESS}
556 Some non-option argument was unrecognized.
558 This occurs when every parser function returns @code{ARGP_KEY_UNKNOWN}
559 for an argument, in which case parsing stops at that argument. If
560 @var{arg_index} is a null pointer otherwise an error occurs.
563 In all cases, if a non-null value for @var{arg_index} was passed to
564 @code{argp_parse}, the index of the first unparsed command-line argument
565 is passed back in it.
567 If an error occurs (either detected by argp, or because a parser
568 function returned an error value), then each parser is called with
569 @code{ARGP_KEY_ERROR}, and no further calls are made except the final
570 call with @code{ARGP_KEY_FINI}.
572 @node Argp Helper Functions, , Argp Parsing State, Argp Parser Functions
573 @subsubsection Functions For Use in Argp Parsers
575 Argp provides a number of functions for the user of argp parser
576 functions (@pxref{Argp Parser Functions}), mostly for producing error
577 messages. These take as their first argument the @var{state} argument
578 to the parser function (@pxref{Argp Parsing State}).
580 @cindex usage messages, in argp
583 @deftypefun void argp_usage (const struct argp_state *@var{state})
584 Output the standard usage message for the argp parser referred to by
585 @var{state} to @code{@var{state}->err_stream} and terminate the program
586 with @code{exit (argp_err_exit_status)} (@pxref{Argp Global Variables}).
589 @cindex syntax error messages, in argp
592 @deftypefun void argp_error (const struct argp_state *@var{state}, const char *@var{fmt}, @dots{})
593 Print the printf format string @var{fmt} and following args, preceded by
594 the program name and @samp{:}, and followed by a @w{@samp{Try @dots{}
595 --help}} message, and terminate the program with an exit status of
596 @code{argp_err_exit_status} (@pxref{Argp Global Variables}).
599 @cindex error messages, in argp
602 @deftypefun void argp_failure (const struct argp_state *@var{state}, int @var{status}, int @var{errnum}, const char *@var{fmt}, @dots{})
603 Similarly to the standard gnu error-reporting function @code{error},
604 print the printf format string @var{fmt} and following args, preceded by
605 the program name and @samp{:}, and followed by the standard unix error
606 text for @var{errnum} if it is non-zero; then if @var{status} is
607 non-zero, terminate the program with that as its exit status.
609 The difference between this function and @code{argp_error} is that
610 @code{argp_error} is for @emph{parsing errors}, whereas
611 @code{argp_failure} is for other problems that occur during parsing but
612 don't reflect a syntactic problem with the input---such as illegal
613 values for options, bad phase of the moon, etc.
618 @deftypefun void argp_state_help (const struct argp_state *@var{state}, FILE *@var{stream}, unsigned @var{flags})
619 Output a help message for the argp parser referred to by @var{state} to
620 @var{stream}. The @var{flags} argument determines what sort of help
621 message is produced. @xref{Argp Help Flags}.
624 Error output is sent to @code{@var{state}->err_stream}, and the program
625 name printed is @code{@var{state}->name}.
627 The output or program termination behavior of these functions may be
628 suppressed if the @code{ARGP_NO_EXIT} or @code{ARGP_NO_ERRS} flags,
629 respectively, were passed to @code{argp_parse}. @xref{Argp Flags}.
631 This behavior is useful if an argp parser is exported for use by other
632 programs (e.g., by a library), and may be used in a context where it is
633 not desirable to terminate the program in response to parsing errors.
634 In argp parsers intended for such general use, calls to any of these
635 functions should be followed by code return of an appropriate error code
636 for the case where the program @emph{doesn't} terminate; for example:
639 if (@var{bad argument syntax})
641 argp_usage (@var{state});
647 If it's known that a parser function will only be used when
648 @code{ARGP_NO_EXIT} is not set, the return may be omitted.
650 @node Argp Parsing State, Argp Helper Functions, Argp Special Keys, Argp Parser Functions
651 @subsubsection Argp Parsing State
653 The third argument to argp parser functions (@pxref{Argp Parser
654 Functions}) is a pointer to a @code{struct argp_state}, which contains
655 information about the state of the option parsing.
659 @deftp {Data Type} {struct argp_state}
660 This structure has the following fields, which may be modified as noted:
663 @item const struct argp *const root_argp
664 The top level argp parser being parsed. Note that this is often
665 @emph{not} the same @code{struct argp} passed into @code{argp_parse} by
666 the invoking program (@pxref{Argp}), but instead an internal argp parser
667 that contains options implemented by @code{argp_parse} itself (such as
672 The argument vector being parsed. May be modified.
675 The index in @code{argv} of the next argument to be parsed. May be modified.
677 One way to consume all remaining arguments in the input is to set
678 @code{@var{state}->next = @var{state}->argc} (perhaps after recording
679 the value of the @code{next} field to find the consumed arguments).
680 Also, you can cause the current option to be re-parsed by decrementing
681 this field, and then modifying
682 @code{@var{state}->argv[@var{state}->next]} to be the option that should
686 The flags supplied to @code{argp_parse}. May be modified, although some
687 flags may only take effect when @code{argp_parse} is first invoked.
690 @item unsigned arg_num
691 While calling a parsing function with the @var{key} argument
692 @code{ARGP_KEY_ARG}, this is the number of the current arg, starting at
693 0, and incremented after each such call returns. At all other times,
694 this is the number of such arguments that have been processed.
697 If non-zero, the index in @code{argv} of the first argument following a
698 special @samp{--} argument (which prevents anything following being
699 interpreted as an option). Only set once argument parsing has proceeded
703 An arbitrary pointer passed in from the caller of @code{argp_parse}, in
704 the @var{input} argument.
706 @item void **child_inputs
707 Values to pass to child parsers. This vector will be the same length as
708 the number of children in the current parser, and each child parser will
709 be given the value of @code{@var{state}->child_inputs[@var{i}]} as
710 @emph{its} @code{@var{state}->input} field, where @var{i} is the index
711 of the child in the this parser's @code{children} field. @xref{Argp
715 For the parser function's use. Initialized to 0, but otherwise ignored
719 The name used when printing messages. This is initialized to
720 @code{argv[0]}, or @code{program_invocation_name} if that is
723 @item FILE *err_stream
724 @itemx FILE *out_stream
725 Stdio streams used when argp prints something; error messages are
726 printed to @code{err_stream}, and all other output (such as
727 @samp{--help} output) to @code{out_stream}. These are initialized to
728 @code{stderr} and @code{stdout} respectively (@pxref{Standard Streams}).
731 Private, for use by the argp implementation.
735 @node Argp Children, Argp Help Filtering, Argp Parser Functions, Argp Parsers
736 @subsection Combining Multiple Argp Parsers
738 The @code{children} field in a @code{struct argp} allows other argp
739 parsers to be combined with the referencing one to parse a single set of
740 arguments. It should point to a vector of @code{struct argp_child},
741 terminated by an entry having a value of zero in the @code{argp} field.
743 Where conflicts between combined parsers arise (for instance, if two
744 specify an option with the same name), they are resolved in favor of
745 the parent argp parsers, or earlier argp parsers in the list of children.
749 @deftp {Data Type} {struct argp_child}
750 An entry in the list of subsidiary argp parsers pointed to by the
751 @code{children} field in a @code{struct argp}. The fields are as follows:
754 @item const struct argp *argp
755 The child argp parser, or zero to end the list.
758 Flags for this child.
760 @item const char *header
761 If non-zero, an optional header to be printed in help output before the
762 child options. As a side-effect, a non-zero value forces the child
763 options to be grouped together; to achieve this effect without actually
764 printing a header string, use a value of @code{""}. As with header
765 strings specified in an option entry, the value conventionally has
766 @samp{:} as the last character. @xref{Argp Option Vectors}.
769 Where to group the child options relative to the other (`consolidated')
770 options in the parent argp parser. The values are the same as the
771 @code{group} field in @code{struct argp_option} (@pxref{Argp Option
772 Vectors}), but all child-groupings follow parent options at a particular
773 group level. If both this field and @code{header} are zero, then the
774 child's options aren't grouped together at all, but rather merged with
775 the parent options (merging the child's grouping levels with the
780 @node Argp Flags, Argp Help, Argp Parsers, Argp
781 @subsection Flags for @code{argp_parse}
783 The default behavior of @code{argp_parse} is designed to be convenient
784 for the most common case of parsing program command line argument. To
785 modify these defaults, the following flags may be or'd together in the
786 @var{flags} argument to @code{argp_parse}:
791 @item ARGP_PARSE_ARGV0
792 Don't ignore the first element of the @var{argv} argument to
793 @code{argp_parse}. Normally (and always unless @code{ARGP_NO_ERRS} is
794 set) the first element of the argument vector is skipped for option
795 parsing purposes, as it corresponds to the program name in a command
801 Don't print error messages for unknown options to @code{stderr}; unless
802 this flag is set, @code{ARGP_PARSE_ARGV0} is ignored, as @code{argv[0]}
803 is used as the program name in the error messages. This flag implies
804 @code{ARGP_NO_EXIT} (on the assumption that silent exiting upon errors
810 Don't parse any non-option args. Normally non-option args are parsed by
811 calling the parse functions with a key of @code{ARGP_KEY_ARG}, and the
812 actual arg as the value. This flag needn't normally be set, as the
813 normal behavior is to stop parsing as soon as some argument isn't
814 accepted by a parsing function. @xref{Argp Parser Functions}.
819 Parse options and arguments in the same order they occur on the command
820 line---normally they're rearranged so that all options come first
825 Don't provide the standard long option @samp{--help}, which ordinarily
826 causes usage and option help information to be output to @code{stdout},
827 and @code{exit (0)} called.
832 Don't exit on errors (they may still result in error messages).
837 Use the gnu getopt `long-only' rules for parsing arguments. This
838 allows long-options to be recognized with only a single @samp{-} (for
839 instances, @samp{-help}), but results in a generally somewhat less
840 useful interface, that conflicts with the way most GNU programs work.
841 For this reason, its use is discouraged.
846 Turns off any message-printing/exiting options, specifically
847 @code{ARGP_NO_EXIT}, @code{ARGP_NO_ERRS}, and @code{ARGP_NO_HELP}.
850 @node Argp Help Filtering, , Argp Children, Argp Parsers
852 @subsection Customizing Argp Help Output
854 The @code{help_filter} field in a @code{struct argp} is a pointer to a
855 function to filter the text of help messages before displaying them.
856 They have a function signature like:
859 char *@var{help-filter} (int @var{key}, const char *@var{text}, void *@var{input})
863 where @var{key} is either a key from an option, in which case @var{text}
864 is that option's help text (@pxref{Argp Option Vectors}), or one of the
865 special keys with names beginning with @samp{ARGP_KEY_HELP_}, describing
866 which other help text @var{text} is (@pxref{Argp Help Filter Keys}).
868 The function should return either @var{text}, if it should be used
869 as-is, a replacement string, which should be allocated using
870 @code{malloc}, and will be freed by argp, or zero, meaning `print
871 nothing'. The value of @var{text} supplied is @emph{after} any
872 translation has been done, so if any of the replacement text also needs
873 translation, that should be done by the filter function. @var{input} is
874 either the input supplied to @code{argp_parse}, or zero, if
875 @code{argp_help} was called directly by the user.
878 * Keys: Argp Help Filter Keys. Special @var{key} values for help filter functions.
881 @node Argp Help Filter Keys, , , Argp Help Filtering
882 @subsubsection Special Keys for Argp Help Filter Functions
884 The following special values may be passed to an argp help filter
885 function as the first argument, in addition to key values for user
886 options, and specify which help text the @var{text} argument contains:
891 @item ARGP_KEY_HELP_PRE_DOC
892 Help text preceding options.
896 @item ARGP_KEY_HELP_POST_DOC
897 Help text following options.
901 @item ARGP_KEY_HELP_HEADER
902 Option header string.
906 @item ARGP_KEY_HELP_EXTRA
907 After all other documentation; @var{text} is zero for this key.
911 @item ARGP_KEY_HELP_DUP_ARGS_NOTE
912 The explanatory note emitted when duplicate option arguments have been
917 @item ARGP_KEY_HELP_ARGS_DOC
918 The argument doc string (the @code{args_doc} field from the argp parser;
919 @pxref{Argp Parsers}).
922 @node Argp Help, Argp Examples, Argp Flags, Argp
923 @subsection The @code{argp_help} Function
925 Normally programs using argp need not worry too much about printing
926 argument-usage-type help messages, because the standard @samp{--help}
927 option is handled automatically by argp, and the typical error cases can
928 be handled using @code{argp_usage} and @code{argp_error} (@pxref{Argp
931 However, if it's desirable to print a standard help message in some
932 context other than parsing the program options, argp offers the
933 @code{argp_help} interface.
937 @deftypefun void argp_help (const struct argp *@var{argp}, FILE *@var{stream}, unsigned @var{flags}, char *@var{name})
938 Output a help message for the argp parser @var{argp} to @var{stream}.
939 What sort of messages is printed is determined by @var{flags}.
941 Any options such as @samp{--help} that are implemented automatically by
942 argp itself will @emph{not} be present in the help output; for this
943 reason, it is better to use @code{argp_state_help} if calling from
944 within an argp parser function. @xref{Argp Helper Functions}.
948 * Flags: Argp Help Flags. Specifying what sort of help message to print.
951 @node Argp Help Flags, , , Argp Help
952 @subsection Flags for the @code{argp_help} Function
954 When calling @code{argp_help} (@pxref{Argp Help}), or
955 @code{argp_state_help} (@pxref{Argp Helper Functions}), exactly what is
956 output is determined by the @var{flags} argument, which should consist
957 of any of the following flags, or'd together:
960 @item ARGP_HELP_USAGE
961 A unix @samp{Usage:} message that explicitly lists all options.
963 @item ARGP_HELP_SHORT_USAGE
964 A unix @samp{Usage:} message that displays only an appropriate
965 placeholder to indicate where the options go; useful for showing
966 the non-option argument syntax.
969 A @samp{Try @dots{} for more help} message; @samp{@dots{}} contains the
970 program name and @samp{--help}.
973 A verbose option help message that gives each option understood along
974 with its documentation string.
976 @item ARGP_HELP_PRE_DOC
977 The part of the argp parser doc string that precedes the verbose option help.
979 @item ARGP_HELP_POST_DOC
980 The part of the argp parser doc string that follows the verbose option help.
983 @code{(ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)}
985 @item ARGP_HELP_BUG_ADDR
986 A message saying where to report bugs for this program, if the
987 @code{argp_program_bug_address} variable contains one.
989 @item ARGP_HELP_LONG_ONLY
990 Modify any output appropriately to reflect @code{ARGP_LONG_ONLY} mode.
993 The following flags are only understood when used with
994 @code{argp_state_help}, and control whether the function returns after
995 printing its output, or terminates the program:
998 @item ARGP_HELP_EXIT_ERR
999 Terminate the program with @code{exit (argp_err_exit_status)}.
1001 @item ARGP_HELP_EXIT_OK
1002 Terminate the program with @code{exit (0)}.
1005 The following flags are combinations of the basic ones for printing
1009 @item ARGP_HELP_STD_ERR
1010 Assuming an error message for a parsing error has already printed,
1011 prints a note on how to get help, and terminates the program with an
1014 @item ARGP_HELP_STD_USAGE
1015 Prints a standard usage message and terminates the program with an
1016 error. This is used when no more specific error message is appropriate.
1018 @item ARGP_HELP_STD_HELP
1019 Prints the standard response for a @samp{--help} option, and terminates
1020 the program successfully.
1023 @node Argp Examples, Argp User Customization, Argp Help, Argp
1024 @subsection Argp Examples
1026 These example programs demonstrate the basic usage of argp.
1029 * 1: Argp Example 1. A minimal program using argp.
1030 * 2: Argp Example 2. A program using only default options.
1031 * 3: Argp Example 3. A simple program with user options.
1032 * 4: Argp Example 4. Combining multiple argp parsers.
1035 @node Argp Example 1, Argp Example 2, , Argp Examples
1036 @subsubsection A Minimal Program Using Argp
1038 This is (probably) the smallest possible program that uses argp.
1039 It won't do much except give an error messages and exit when there are any
1040 arguments, and print a (rather pointless) message for @samp{--help}.
1043 @include argp-ex1.c.texi
1046 @node Argp Example 2, Argp Example 3, Argp Example 1, Argp Examples
1047 @subsubsection A Program Using Argp with Only Default Options
1049 This program doesn't use any options or arguments, but uses argp to be
1050 compliant with the GNU standard command line format.
1052 In addition to making sure no arguments are given, and implementing a
1053 @samp{--help} option, this example will have a @samp{--version} option,
1054 and will put the given documentation string and bug address in the
1055 @samp{--help} output, as per GNU standards.
1057 The variable @code{argp} contains the argument parser specification;
1058 adding fields to this structure is the way most parameters are passed to
1059 @code{argp_parse} (the first three fields are usually used, but not in
1060 this small program). There are also two global variables that argp
1061 knows about defined here, @code{argp_program_version} and
1062 @code{argp_program_bug_address} (they are global variables because they
1063 will almost always be constant for a given program, even if it uses
1064 different argument parsers for various tasks).
1067 @include argp-ex2.c.texi
1070 @node Argp Example 3, Argp Example 4, Argp Example 2, Argp Examples
1071 @subsubsection A Program Using Argp with User Options
1073 This program uses the same features as example 2, and adds user options
1076 We now use the first four fields in @code{argp} (@pxref{Argp Parsers}),
1077 and specifies @code{parse_opt} as the parser function (@pxref{Argp
1080 Note that in this example, @code{main} uses a structure to communicate
1081 with the @code{parse_opt} function, a pointer to which it passes in the
1082 @code{input} argument to @code{argp_parse} (@pxref{Argp}), and is
1083 retrieved by @code{parse_opt} through the @code{input} field in its
1084 @code{state} argument (@pxref{Argp Parsing State}). Of course, it's
1085 also possible to use global variables instead, but using a structure
1086 like this is somewhat more flexible and clean.
1089 @include argp-ex3.c.texi
1092 @node Argp Example 4, , Argp Example 3, Argp Examples
1093 @subsubsection A Program Using Multiple Combined Argp Parsers
1095 This program uses the same features as example 3, but has more options,
1096 and somewhat more structure in the @samp{--help} output. It also shows
1097 how you can `steal' the remainder of the input arguments past a certain
1098 point, for programs that accept a list of items, and the special
1099 @var{key} value @code{ARGP_KEY_NO_ARGS}, which is only given if no
1100 non-option arguments were supplied to the program (@pxref{Argp Special
1103 For structuring the help output, two features are used: @emph{headers},
1104 which are entries in the options vector (@pxref{Argp Option Vectors})
1105 with the first four fields being zero, and a two part documentation
1106 string (in the variable @code{doc}), which allows documentation both
1107 before and after the options (@pxref{Argp Parsers}); the
1108 two parts of @code{doc} are separated by a vertical-tab character
1109 (@code{'\v'}, or @code{'\013'}). By convention, the documentation
1110 before the options is just a short string saying what the program does,
1111 and that afterwards is longer, describing the behavior in more detail.
1112 All documentation strings are automatically filled for output, although
1113 newlines may be included to force a line break at a particular point.
1114 All documentation strings are also passed to the @code{gettext}
1115 function, for possible translation into the current locale.
1118 @include argp-ex4.c.texi
1121 @node Argp User Customization, , Argp Examples, Argp
1122 @subsection Argp User Customization
1124 @cindex ARGP_HELP_FMT environment variable
1125 The way formatting of argp @samp{--help} output may be controlled to
1126 some extent by a program's users, by setting the @code{ARGP_HELP_FMT}
1127 environment variable to a comma-separated list (whitespace is ignored)
1128 of the following tokens:
1133 Turn @dfn{duplicate-argument-mode} on or off. In duplicate argument
1134 mode, if an option which accepts an argument has multiple names, the
1135 argument is shown for each name; otherwise, it is only shown for the
1136 first long option, and a note is emitted later so the user knows that it
1137 applies to the other names as well. The default is @samp{no-dup-args},
1138 which is less consistent, but prettier.
1141 @item no-dup-args-note
1142 Enable or disable the note informing the user of suppressed option
1143 argument duplication. The default is @samp{dup-args-note}.
1145 @item short-opt-col=@var{n}
1146 Show the first short option in column @var{n} (default 2).
1148 @item long-opt-col=@var{n}
1149 Show the first long option in column @var{n} (default 6).
1151 @item doc-opt-col=@var{n}
1152 Show `documentation options' (@pxref{Argp Option Flags}) in column
1153 @var{n} (default 2).
1155 @item opt-doc-col=@var{n}
1156 Show the documentation for options starting in column @var{n} (default 29).
1158 @item header-col=@var{n}
1159 Indent group headers (which document groups of options) to column
1160 @var{n} (default 1).
1162 @item usage-indent=@var{n}
1163 Indent continuation lines in @samp{Usage:} messages to column @var{n}
1166 @item rmargin=@var{n}
1167 Word wrap help output at or before column @var{n} (default 79).