#ifndef PARSE_OPTIONS_H
#define PARSE_OPTIONS_H

#include "gettext.h"

struct repository;

/**
 * Refer to Documentation/technical/api-parse-options.adoc for the API doc.
 */

enum parse_opt_type {
	/* special types */
	OPTION_END,
	OPTION_GROUP,
	OPTION_NUMBER,
	OPTION_ALIAS,
	OPTION_SUBCOMMAND,
	/* options with no arguments */
	OPTION_BIT,
	OPTION_NEGBIT,
	OPTION_BITOP,
	OPTION_COUNTUP,
	OPTION_SET_INT,
	/* options with arguments (usually) */
	OPTION_STRING,
	OPTION_INTEGER,
	OPTION_UNSIGNED,
	OPTION_CALLBACK,
	OPTION_LOWLEVEL_CALLBACK,
	OPTION_FILENAME
};

enum parse_opt_flags {
	PARSE_OPT_KEEP_DASHDASH = 1 << 0,
	PARSE_OPT_STOP_AT_NON_OPTION = 1 << 1,
	PARSE_OPT_KEEP_ARGV0 = 1 << 2,
	PARSE_OPT_KEEP_UNKNOWN_OPT = 1 << 3,
	PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
	PARSE_OPT_ONE_SHOT = 1 << 5,
	PARSE_OPT_SHELL_EVAL = 1 << 6,
	PARSE_OPT_SUBCOMMAND_OPTIONAL = 1 << 7,
};

enum parse_opt_option_flags {
	PARSE_OPT_OPTARG  = 1 << 0,
	PARSE_OPT_NOARG   = 1 << 1,
	PARSE_OPT_NONEG   = 1 << 2,
	PARSE_OPT_HIDDEN  = 1 << 3,
	PARSE_OPT_LASTARG_DEFAULT = 1 << 4,
	PARSE_OPT_NODASH = 1 << 5,
	PARSE_OPT_LITERAL_ARGHELP = 1 << 6,
	PARSE_OPT_FROM_ALIAS = 1 << 7,
	PARSE_OPT_NOCOMPLETE = 1 << 9,
	PARSE_OPT_COMP_ARG = 1 << 10,
	PARSE_OPT_CMDMODE = 1 << 11,
};

enum parse_opt_result {
	PARSE_OPT_COMPLETE = -3,
	PARSE_OPT_HELP = -2,
	PARSE_OPT_ERROR = -1,	/* must be the same as error() */
	PARSE_OPT_DONE = 0,	/* fixed so that "return 0" works */
	PARSE_OPT_NON_OPTION,
	PARSE_OPT_SUBCOMMAND,
	PARSE_OPT_UNKNOWN
};

struct option;
typedef int parse_opt_cb(const struct option *, const char *arg, int unset);

struct parse_opt_ctx_t;
typedef enum parse_opt_result parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
					      const struct option *opt,
					      const char *arg, int unset);

typedef int parse_opt_subcommand_fn(int argc, const char **argv,
				    const char *prefix, struct repository *repo);

/*
 * `type`::
 *   holds the type of the option, you must have an OPTION_END last in your
 *   array.
 *
 * `short_name`::
 *   the character to use as a short option name, '\0' if none.
 *
 * `long_name`::
 *   the long option (without the leading dashes) or subcommand name,
 *   NULL if none.
 *
 * `value`::
 *   stores pointers to the values to be filled.
 *
 * `precision`::
 *   precision of the integer pointed to by `value` in number of bytes. Should
 *   typically be its `sizeof()`.
 *
 * `argh`::
 *   token to explain the kind of argument this option wants. Does not
 *   begin in capital letter, and does not end with a full stop.
 *   Should be wrapped by N_() for translation.
 *   Is automatically enclosed in brackets when printed, unless it
 *   contains any of the following characters: ()<>[]|
 *   E.g. "name" is shown as "<name>" to indicate that a name value
 *   needs to be supplied, not the literal string "name", but
 *   "<start>,<end>" and "(this|that)" are printed verbatim.
 *
 * `help`::
 *   the short help associated to what the option does.
 *   Must never be NULL (except for OPTION_END and OPTION_SUBCOMMAND).
 *   OPTION_GROUP uses this pointer to store the group header.
 *   Should be wrapped by N_() for translation.
 *
 * `flags`::
 *   mask of parse_opt_option_flags.
 *   PARSE_OPT_OPTARG: says that the argument is optional (not for BOOLEANs)
 *   PARSE_OPT_NOARG: says that this option does not take an argument
 *   PARSE_OPT_NONEG: says that this option cannot be negated
 *                   (i.e. rejects "--no-<option>")
 *   PARSE_OPT_HIDDEN: this option is skipped in the default usage, and
 *                     shown only in the full usage.
 *   PARSE_OPT_LASTARG_DEFAULT: says that this option will take the default
 *				value if no argument is given when the option
 *				is last on the command line. If the option is
 *				not last it will require an argument.
 *				Should not be used with PARSE_OPT_OPTARG.
 *   PARSE_OPT_NODASH: this option doesn't start with a dash; can only be a
 *		       short option and can't accept arguments.
 *   PARSE_OPT_LITERAL_ARGHELP: says that argh shouldn't be enclosed in brackets
 *				(i.e. '<argh>') in the help message.
 *				Useful for options with multiple parameters.
 *   PARSE_OPT_NOCOMPLETE: by default all visible options are completable
 *			   by git-completion.bash. This option suppresses that.
 *   PARSE_OPT_COMP_ARG: this option forces to git-completion.bash to
 *			 complete an option as --name= not --name even if
 *			 the option takes optional argument.
 *
 * `callback`::
 *   pointer to the callback to use for OPTION_CALLBACK
 *
 * `defval`::
 *   default value to fill (*->value) with for PARSE_OPT_OPTARG.
 *   OPTION_{BIT,SET_INT} store the {mask,integer} to put in the value when met.
 *   CALLBACKS can use it like they want.
 *
 * `ll_callback`::
 *   pointer to the callback to use for OPTION_LOWLEVEL_CALLBACK
 *
 * `subcommand_fn`::
 *   pointer to a function to use for OPTION_SUBCOMMAND.
 *   It will be put in value when the subcommand is given on the command line.
 */
struct option {
	enum parse_opt_type type;
	int short_name;
	const char *long_name;
	void *value;
	size_t precision;
	const char *argh;
	const char *help;

	enum parse_opt_option_flags flags;
	parse_opt_cb *callback;
	intptr_t defval;
	parse_opt_ll_cb *ll_callback;
	intptr_t extra;
	parse_opt_subcommand_fn *subcommand_fn;
};

#define OPT_BIT_F(s, l, v, h, b, f) { \
	.type = OPTION_BIT, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG|(f), \
	.callback = NULL, \
	.defval = (b), \
}
#define OPT_COUNTUP_F(s, l, v, h, f) { \
	.type = OPTION_COUNTUP, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG|(f), \
}
#define OPT_SET_INT_F(s, l, v, h, i, f) { \
	.type = OPTION_SET_INT, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG | (f), \
	.defval = (i), \
}
#define OPT_BOOL_F(s, l, v, h, f)   OPT_SET_INT_F(s, l, v, h, 1, f)
#define OPT_CALLBACK_F(s, l, v, a, h, f, cb) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.flags = (f), \
	.callback = (cb), \
}
#define OPT_STRING_F(s, l, v, a, h, f) { \
	.type = OPTION_STRING, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.flags = (f), \
}
#define OPT_INTEGER_F(s, l, v, h, f) { \
	.type = OPTION_INTEGER, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v) + BARF_UNLESS_SIGNED(*(v)), \
	.precision = sizeof(*v), \
	.argh = N_("n"), \
	.help = (h), \
	.flags = (f), \
}

#define OPT_END() { \
	.type = OPTION_END, \
}
#define OPT_GROUP(h) { \
	.type = OPTION_GROUP, \
	.help = (h), \
}
#define OPT_BIT(s, l, v, h, b)      OPT_BIT_F(s, l, v, h, b, 0)
#define OPT_BITOP(s, l, v, h, set, clear) { \
	.type = OPTION_BITOP, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG|PARSE_OPT_NONEG, \
	.defval = (set), \
	.extra = (clear), \
}
#define OPT_NEGBIT(s, l, v, h, b) { \
	.type = OPTION_NEGBIT, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG, \
	.defval = (b), \
}
#define OPT_COUNTUP(s, l, v, h)     OPT_COUNTUP_F(s, l, v, h, 0)
#define OPT_SET_INT(s, l, v, h, i)  OPT_SET_INT_F(s, l, v, h, i, 0)
#define OPT_BOOL(s, l, v, h)        OPT_BOOL_F(s, l, v, h, 0)
#define OPT_HIDDEN_BOOL(s, l, v, h) { \
	.type = OPTION_SET_INT, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, \
	.defval = 1, \
}
#define OPT_CMDMODE_F(s, l, v, h, i, f) { \
	.type = OPTION_SET_INT, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.precision = sizeof(*v), \
	.help = (h), \
	.flags = PARSE_OPT_CMDMODE|PARSE_OPT_NOARG|PARSE_OPT_NONEG | (f), \
	.defval = (i), \
}
#define OPT_CMDMODE(s, l, v, h, i)  OPT_CMDMODE_F(s, l, v, h, i, 0)

#define OPT_INTEGER(s, l, v, h)     OPT_INTEGER_F(s, l, v, h, 0)
#define OPT_UNSIGNED(s, l, v, h) { \
	.type = OPTION_UNSIGNED, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v) + BARF_UNLESS_UNSIGNED(*(v)), \
	.precision = sizeof(*v), \
	.argh = N_("n"), \
	.help = (h), \
	.flags = PARSE_OPT_NONEG, \
}
#define OPT_STRING(s, l, v, a, h)   OPT_STRING_F(s, l, v, a, h, 0)
#define OPT_STRING_LIST(s, l, v, a, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.callback = &parse_opt_string_list, \
}
#define OPT_STRVEC(s, l, v, a, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.callback = &parse_opt_strvec, \
}
#define OPT_UYN(s, l, v, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG, \
	.callback = &parse_opt_tertiary, \
}
#define OPT_EXPIRY_DATE(s, l, v, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = N_("expiry-date"), \
	.help = (h), \
	.callback = parse_opt_expiry_date_cb, \
}
#define OPT_CALLBACK(s, l, v, a, h, cb) OPT_CALLBACK_F(s, l, v, a, h, 0, cb)
#define OPT_NUMBER_CALLBACK(v, h, cb) { \
	.type = OPTION_NUMBER, \
	.value = (v), \
	.help = (h), \
	.flags = PARSE_OPT_NOARG | PARSE_OPT_NONEG, \
	.callback = (cb), \
}
#define OPT_FILENAME(s, l, v, h) { \
	.type = OPTION_FILENAME, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = N_("file"), \
	.help = (h), \
}
#define OPT_COLOR_FLAG(s, l, v, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = N_("when"), \
	.help = (h), \
	.flags = PARSE_OPT_OPTARG, \
	.callback = parse_opt_color_flag_cb, \
	.defval = (intptr_t)"always", \
}

#define OPT_NOOP_NOARG(s, l) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.help = N_("no-op (backward compatibility)"), \
	.flags = PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, \
	.callback = parse_opt_noop_cb, \
}

static char *parse_options_noop_ignored_value MAYBE_UNUSED;
#define OPT_NOOP_ARG(s, l) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = &parse_options_noop_ignored_value, \
	.argh = "ignored", \
	.help = N_("no-op (backward compatibility)"), \
	.flags = PARSE_OPT_HIDDEN, \
	.callback = parse_opt_noop_cb, \
}

#define OPT_ALIAS(s, l, source_long_name) { \
	.type = OPTION_ALIAS, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (char *)(source_long_name), \
}

#define OPT_SUBCOMMAND_F(l, v, fn, f) { \
	.type = OPTION_SUBCOMMAND, \
	.long_name = (l), \
	.value = (v), \
	.flags = (f), \
	.subcommand_fn = (fn), \
}
#define OPT_SUBCOMMAND(l, v, fn)    OPT_SUBCOMMAND_F((l), (v), (fn), 0)

/*
 * parse_options() will filter out the processed options and leave the
 * non-option arguments in argv[]. argv0 is assumed program name and
 * skipped.
 *
 * usagestr strings should be marked for translation with N_().
 *
 * Returns the number of arguments left in argv[].
 *
 * In one-shot mode, argv0 is not a program name, argv[] is left
 * untouched and parse_options() returns the number of options
 * processed.
 */
int parse_options(int argc, const char **argv, const char *prefix,
		  const struct option *options,
		  const char * const usagestr[],
		  enum parse_opt_flags flags);

NORETURN void usage_with_options(const char * const *usagestr,
				 const struct option *options);

void show_usage_with_options_if_asked(int ac, const char **av,
				      const char * const *usage,
				      const struct option *options);

NORETURN void usage_msg_opt(const char *msg,
			    const char * const *usagestr,
			    const struct option *options);

/**
 * usage_msg_optf() is like usage_msg_opt() except that the first
 * argument is a format string, and optional format arguments follow
 * after the 3rd option.
 */
__attribute__((format (printf,1,4)))
void NORETURN usage_msg_optf(const char *fmt,
			     const char * const *usagestr,
			     const struct option *options, ...);

void die_for_incompatible_opt4(int opt1, const char *opt1_name,
			       int opt2, const char *opt2_name,
			       int opt3, const char *opt3_name,
			       int opt4, const char *opt4_name);


static inline void die_for_incompatible_opt3(int opt1, const char *opt1_name,
					     int opt2, const char *opt2_name,
					     int opt3, const char *opt3_name)
{
	die_for_incompatible_opt4(opt1, opt1_name,
				  opt2, opt2_name,
				  opt3, opt3_name,
				  0, "");
}

static inline void die_for_incompatible_opt2(int opt1, const char *opt1_name,
					     int opt2, const char *opt2_name)
{
	die_for_incompatible_opt4(opt1, opt1_name,
				  opt2, opt2_name,
				  0, "",
				  0, "");
}

/*
 * Use these assertions for callbacks that expect to be called with NONEG and
 * NOARG respectively, and do not otherwise handle the "unset" and "arg"
 * parameters.
 */
#define BUG_ON_OPT_NEG(unset) do { \
	if ((unset)) \
		BUG("option callback does not expect negation"); \
} while (0)
#define BUG_ON_OPT_ARG(arg) do { \
	if ((arg)) \
		BUG("option callback does not expect an argument"); \
} while (0)

/*
 * Similar to the assertions above, but checks that "arg" is always non-NULL.
 * This assertion also implies BUG_ON_OPT_NEG(), letting you declare both
 * assertions in a single line.
 */
#define BUG_ON_OPT_NEG_NOARG(unset, arg) do { \
	BUG_ON_OPT_NEG(unset); \
	if(!(arg)) \
		BUG("option callback expects an argument"); \
} while(0)

/*----- incremental advanced APIs -----*/

struct parse_opt_cmdmode_list;

/*
 * It's okay for the caller to consume argv/argc in the usual way.
 * Other fields of that structure are private to parse-options and should not
 * be modified in any way.
 */
struct parse_opt_ctx_t {
	const char **argv;
	const char **out;
	int argc, cpidx, total;
	const char *opt;
	enum parse_opt_flags flags;
	unsigned has_subcommands;
	const char *prefix;
	const char **alias_groups; /* must be in groups of 3 elements! */
	struct parse_opt_cmdmode_list *cmdmode_list;
};

void parse_options_start(struct parse_opt_ctx_t *ctx,
			 int argc, const char **argv, const char *prefix,
			 const struct option *options,
			 enum parse_opt_flags flags);

enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
					 const struct option *options,
					 const char * const usagestr[]);

int parse_options_end(struct parse_opt_ctx_t *ctx);

struct option *parse_options_dup(const struct option *a);
struct option *parse_options_concat(const struct option *a, const struct option *b);

/*----- some often used options -----*/
int parse_opt_abbrev_cb(const struct option *, const char *, int);
int parse_opt_expiry_date_cb(const struct option *, const char *, int);
int parse_opt_color_flag_cb(const struct option *, const char *, int);
int parse_opt_verbosity_cb(const struct option *, const char *, int);
/* value is struct oid_array* */
int parse_opt_object_name(const struct option *, const char *, int);
/* value is struct object_id* */
int parse_opt_object_id(const struct option *, const char *, int);
int parse_opt_commits(const struct option *, const char *, int);
int parse_opt_commit(const struct option *, const char *, int);
int parse_opt_tertiary(const struct option *, const char *, int);
int parse_opt_string_list(const struct option *, const char *, int);
int parse_opt_strvec(const struct option *, const char *, int);
int parse_opt_noop_cb(const struct option *, const char *, int);
int parse_opt_passthru(const struct option *, const char *, int);
int parse_opt_passthru_argv(const struct option *, const char *, int);
/* value is enum branch_track* */
int parse_opt_tracking_mode(const struct option *, const char *, int);

#define OPT__VERBOSE(var, h)  OPT_COUNTUP('v', "verbose", (var), (h))
#define OPT__QUIET(var, h)    OPT_COUNTUP('q', "quiet",   (var), (h))
#define OPT__VERBOSITY(var) { \
	.type = OPTION_CALLBACK, \
	.short_name = 'v', \
	.long_name = "verbose", \
	.value = (var), \
	.help = N_("be more verbose"), \
	.flags = PARSE_OPT_NOARG, \
	.callback = &parse_opt_verbosity_cb, \
}, { \
	.type = OPTION_CALLBACK, \
	.short_name = 'q', \
	.long_name = "quiet", \
	.value = (var), \
	.help = N_("be more quiet"), \
	.flags = PARSE_OPT_NOARG, \
	.callback = &parse_opt_verbosity_cb, \
}
#define OPT__DRY_RUN(var, h)  OPT_BOOL('n', "dry-run", (var), (h))
#define OPT__FORCE(var, h, f) OPT_COUNTUP_F('f', "force",   (var), (h), (f))
#define OPT__ABBREV(var) { \
	.type = OPTION_CALLBACK, \
	.long_name = "abbrev", \
	.value = (var), \
	.argh = N_("n"), \
	.help = N_("use <n> digits to display object names"), \
	.flags = PARSE_OPT_OPTARG, \
	.callback = &parse_opt_abbrev_cb, \
}
#define OPT__SUPER_PREFIX(var) \
	OPT_STRING_F(0, "super-prefix", (var), N_("prefix"), \
		N_("prefixed path to initial superproject"), PARSE_OPT_HIDDEN)

#define OPT__COLOR(var, h) \
	OPT_COLOR_FLAG(0, "color", (var), (h))
#define OPT_COLUMN(s, l, v, h) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = N_("style"), \
	.help = (h), \
	.flags = PARSE_OPT_OPTARG, \
	.callback = parseopt_column_callback, \
}
#define OPT_PASSTHRU(s, l, v, a, h, f) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.flags = (f), \
	.callback = parse_opt_passthru, \
}
#define OPT_PASSTHRU_ARGV(s, l, v, a, h, f) { \
	.type = OPTION_CALLBACK, \
	.short_name = (s), \
	.long_name = (l), \
	.value = (v), \
	.argh = (a), \
	.help = (h), \
	.flags = (f), \
	.callback = parse_opt_passthru_argv, \
}
#define _OPT_CONTAINS_OR_WITH(l, v, h, f) { \
	.type = OPTION_CALLBACK, \
	.long_name = (l), \
	.value = (v), \
	.argh = N_("commit"), \
	.help = (h), \
	.flags = PARSE_OPT_LASTARG_DEFAULT | (f), \
	.callback = parse_opt_commits, \
	.defval = (intptr_t) "HEAD", \
}
#define OPT_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("contains", v, h, PARSE_OPT_NONEG)
#define OPT_NO_CONTAINS(v, h) _OPT_CONTAINS_OR_WITH("no-contains", v, h, PARSE_OPT_NONEG)
#define OPT_WITH(v, h) _OPT_CONTAINS_OR_WITH("with", v, h, PARSE_OPT_HIDDEN | PARSE_OPT_NONEG)
#define OPT_WITHOUT(v, h) _OPT_CONTAINS_OR_WITH("without", v, h, PARSE_OPT_HIDDEN | PARSE_OPT_NONEG)
#define OPT_CLEANUP(v) OPT_STRING(0, "cleanup", v, N_("mode"), N_("how to strip spaces and #comments from message"))
#define OPT_PATHSPEC_FROM_FILE(v) OPT_FILENAME(0, "pathspec-from-file", v, N_("read pathspec from file"))
#define OPT_PATHSPEC_FILE_NUL(v)  OPT_BOOL(0, "pathspec-file-nul", v, N_("with --pathspec-from-file, pathspec elements are separated with NUL character"))
#define OPT_AUTOSTASH(v) OPT_BOOL(0, "autostash", v, N_("automatically stash/stash pop before and after"))
#define OPT_DIFF_UNIFIED(v) OPT_INTEGER_F('U', "unified", v, N_("generate diffs with <n> lines context"), PARSE_OPT_NONEG)
#define OPT_DIFF_INTERHUNK_CONTEXT(v) OPT_INTEGER_F(0, "inter-hunk-context", v, N_("show context between diff hunks up to the specified number of lines"), PARSE_OPT_NONEG)

#define OPT_IPVERSION(v) \
	OPT_SET_INT_F('4', "ipv4", (v), N_("use IPv4 addresses only"), \
		TRANSPORT_FAMILY_IPV4, PARSE_OPT_NONEG), \
	OPT_SET_INT_F('6', "ipv6", (v), N_("use IPv6 addresses only"), \
		TRANSPORT_FAMILY_IPV6, PARSE_OPT_NONEG)

#endif
