From 71c35df2454b1d73f5d762bed56c725578f9f867 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 9 Oct 2014 22:48:27 +0200 Subject: build: allow disabling libreadline-support This makes nftables a bit more embedded-friendly. Signed-off-by: Steven Barth Signed-off-by: Pablo Neira Ayuso --- configure.ac | 6 ++++++ include/nftables.h | 7 +++++++ src/Makefile.in | 2 ++ src/main.c | 6 +++++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 3a7647f2..ea13cf8c 100644 --- a/configure.ac +++ b/configure.ac @@ -71,8 +71,14 @@ AC_CHECK_LIB([nftnl], [nft_rule_alloc], , AC_CHECK_LIB([gmp], [__gmpz_init], , AC_MSG_ERROR([No suitable version of libgmp 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 3394e324..c3d3dbfb 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 8ac2b460..7ecc5f2e 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 2685b0db..3607bd58 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]); -- cgit v1.2.3