This makes nftables a bit more embedded-friendly. Signed-off-by: Steven Barth <cyrus@xxxxxxxxxxx> --- configure.ac | 9 +++++++-- include/nftables.h | 7 +++++++ src/Makefile.in | 2 ++ src/main.c | 6 +++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 3a7647f..a2dd415 100644 --- a/configure.ac +++ b/configure.ac @@ -71,8 +71,13 @@ AC_CHECK_LIB([nftnl], [nft_rule_alloc], , AC_CHECK_LIB([gmp], [__gmpz_init], , AC_MSG_ERROR([No suitable version of libgmp found])) -AC_CHECK_LIB([readline], [readline], , - AC_MSG_ERROR([No suitable version of libreadline found])) +AC_ARG_WITH([cli], [AS_HELP_STRING([--without-cli], + [disable interactive CLI (libreadline support)])], + [], [with_cli=yes]) +AS_IF([test "x$with_cli" != xno], [ +AC_CHECK_LIB([readline],[readline], , AC_MSG_ERROR([No suitable version of libreadline found])) +]) +AC_SUBST(with_cli) # Checks for header files. AC_HEADER_STDC diff --git a/include/nftables.h b/include/nftables.h index 3394e32..c3d3dbf 100644 --- a/include/nftables.h +++ b/include/nftables.h @@ -31,7 +31,14 @@ extern unsigned int debug_level; extern const char *include_paths[INCLUDE_PATHS_MAX]; struct parser_state; +#ifdef HAVE_LIBREADLINE extern int cli_init(struct parser_state *state); +#else +static inline int cli_init(struct parser_state *state) +{ + return -1; +} +#endif extern void cli_exit(void); extern void cli_display(const char *fmt, va_list ap) __fmtstring(1, 0); diff --git a/src/Makefile.in b/src/Makefile.in index 8ac2b46..7ecc5f2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -3,7 +3,9 @@ PROGRAMS += nft nft-destdir := @sbindir@ nft-obj += main.o +ifeq (@with_cli@,yes) nft-obj += cli.o +endif nft-obj += rule.o nft-obj += statement.o nft-obj += datatype.o diff --git a/src/main.c b/src/main.c index 2685b0d..ee684ce 100644 --- a/src/main.c +++ b/src/main.c @@ -335,7 +335,11 @@ int main(int argc, char * const *argv) if (scanner_read_file(scanner, filename, &internal_location) < 0) goto out; } else if (interactive) { - cli_init(&state); + if (cli_init(&state) < 0) { + fprintf(stderr, "%s: interactive CLI not supported in this build\n", + argv[0]); + exit(NFT_EXIT_FAILURE); + } return 0; } else { fprintf(stderr, "%s: no command specified\n", argv[0]); -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html