From: Jeremy Sowden <jeremy@xxxxxxxxxx> In addition to the package-version and release-name, output the CLI implementation (if any) and whether mini-gmp was used, e.g.: $ ./src/nft -V nftables v0.9.3 (Topsy) cli: linenoise minigmp: no Signed-off-by: Jeremy Sowden <jeremy@xxxxxxxxxx> Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> --- Hi Jeremy et al. I'm revisiting this one, it's basically your patch with a few mangling. I wonder if it's probably a good idea to introduce a long version mode. I have seen other tools providing more verbose information about all build information. The idea would be to leave -v/--version as it is, and introduce -V which would be more verbose. Thanks. src/Makefile.am | 3 +++ src/main.c | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index 9142ab4484f2..b4b9142bf6b0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -13,6 +13,9 @@ endif if BUILD_XTABLES AM_CPPFLAGS += ${XTABLES_CFLAGS} endif +if BUILD_MINIGMP +AM_CPPFLAGS += -DHAVE_MINIGMP +endif AM_CFLAGS = -Wall \ -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \ diff --git a/src/main.c b/src/main.c index 6ab1b89f4dd5..6a88e777cc1f 100644 --- a/src/main.c +++ b/src/main.c @@ -27,6 +27,7 @@ static struct nft_ctx *nft; enum opt_vals { OPT_HELP = 'h', OPT_VERSION = 'v', + OPT_VERSION_LONG = 'V', OPT_CHECK = 'c', OPT_FILE = 'f', OPT_INTERACTIVE = 'i', @@ -46,7 +47,7 @@ enum opt_vals { OPT_TERSE = 't', OPT_INVALID = '?', }; -#define OPTSTRING "+hvd:cf:iI:jvnsNaeSupypTt" +#define OPTSTRING "+hvVd:cf:iI:jvnsNaeSupypTt" static const struct option options[] = { { @@ -141,6 +142,7 @@ static void show_help(const char *name) "Options:\n" " -h, --help Show this help\n" " -v, --version Show version information\n" +" -V Show extended version information\n" "\n" " -c, --check Check commands validity without actually applying the changes.\n" " -f, --file <filename> Read input from <filename>\n" @@ -164,6 +166,31 @@ static void show_help(const char *name) name, DEFAULT_INCLUDE_PATH); } +static void show_version(void) +{ + const char *cli, *minigmp; + +#if defined(HAVE_LIBREADLINE) + cli = "readline"; +#elif defined(HAVE_LIBLINENOISE) + cli = "linenoise"; +#else + cli = "no"; +#endif + +#if defined(HAVE_MINIGMP) + minigmp = "yes"; +#else + minigmp = "no"; +#endif + + printf("%s v%s (%s)\n" + " cli: %s\n" + " minigmp: %s\n", + PACKAGE_NAME, PACKAGE_VERSION, RELEASE_NAME, + cli, minigmp); +} + static const struct { const char *name; enum nft_debug_level level; @@ -272,6 +299,9 @@ int main(int argc, char * const *argv) printf("%s v%s (%s)\n", PACKAGE_NAME, PACKAGE_VERSION, RELEASE_NAME); exit(EXIT_SUCCESS); + case OPT_VERSION_LONG: + show_version(); + exit(EXIT_SUCCESS); case OPT_CHECK: nft_ctx_set_dry_run(nft, true); break; -- 2.11.0