2 AC_INIT([ipset], [6.24], [kadlec@blackhole.kfki.hu])
3 AC_CONFIG_AUX_DIR([build-aux])
5 AC_CONFIG_MACRO_DIR([m4])
6 AC_CONFIG_HEADER([config.h])
7 AM_INIT_AUTOMAKE([foreign subdir-objects tar-pax])
8 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
13 dnl Shortcut: Linux supported alone
15 *-*-linux* | *-*-uclinux*) ;;
16 *) AC_MSG_ERROR([Linux systems supported exclusively!]);;
19 dnl Optionnally disable building the kernel module
21 AS_HELP_STRING([--with-kmod=yes/no],
22 [Build the kernel module (default: yes)]),
23 [BUILDKMOD="$withval";],
25 AM_CONDITIONAL(WITH_KMOD, test "$BUILDKMOD" == "yes")
27 dnl Additional arguments
28 dnl Kernel build directory or source tree
30 AS_HELP_STRING([--with-kbuild=PATH],
31 [Path to kernel build directory]),
32 [KBUILDDIR="$withval";])
33 AC_ARG_WITH([ksource],
34 AS_HELP_STRING([--with-ksource=PATH],
35 [Path to kernel source directory, if not the same as the kernel build directory]),
36 [KSOURCEDIR="$withval";])
37 AM_CONDITIONAL(WITH_KBUILDDIR, test "$KBUILDDIR" != "")
40 if test "$BUILDKMOD" == "yes"
42 dnl Sigh: check kernel version dependencies
43 if test "$KBUILDDIR" != ""
45 kbuilddir="$KBUILDDIR"
47 kbuilddir="/lib/modules/`uname -r`/build"
50 if test -n "$KSOURCEDIR"; then
51 ksourcedir="$KSOURCEDIR"
52 elif test -e "$kbuilddir/include/linux/netfilter/nfnetlink.h"; then
53 ksourcedir="$kbuilddir"
55 ksourcedir="/lib/modules/$(uname -r)/source"
57 if test ! -e "$ksourcedir/include/linux/netfilter/nfnetlink.h"
59 AC_MSG_ERROR([Invalid kernel source directory $ksourcedir])
62 if test ! -e "$kbuilddir/.config"
64 AC_MSG_ERROR([The kernel build directory $kbuilddir is not configured])
70 if ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/linux/netfilter/nfnetlink.h" && \
71 ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/uapi/linux/netfilter/nfnetlink.h";
73 AC_MSG_ERROR([The kernel source directory $ksourcedir is not patched with netlink.patch to support ipset])
77 dnl Maximal number of sets supported by the kernel, default 256
78 AC_ARG_WITH([maxsets],
79 AS_HELP_STRING([--with-maxsets=256],
80 [Maximal numer of sets supported by the kernel]),
81 [MAXSETS="$withval";])
82 AM_CONDITIONAL(WITH_MAXSETS, test "$MAXSETS" != "")
86 AC_ARG_ENABLE([verbose],
87 AS_HELP_STRING([--enable-verbose],
88 [Enable verbose mode at compiling/linking.]),
89 [case "${enableval}" in
90 yes) enable_verbose=yes ;;
91 no) enable_verbose=no ;;
92 *) AC_MSG_ERROR([bad value ${enableval} for --enable-verbose]) ;;
93 esac], [enable_verbose=no])
95 AC_ARG_ENABLE([debug],
96 AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
97 [], [enable_debug=no])
98 AS_IF([test "x$enable_debug" = "xyes"], [
99 AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
101 AM_CONDITIONAL([ENABLE_DEBUG], [test "x$enable_debug" = xyes])
103 dnl Enable type modules
104 AC_ARG_ENABLE([settype_modules],
105 AS_HELP_STRING([--enable-settype-modules],
106 [Enable set type modules support]),
107 [enable_settype_modules="$enableval"],
108 [enable_settype_modules="no"])
110 AC_ARG_WITH([settype_modules_list],
111 AS_HELP_STRING([--with-settype-modules-list="mod1 mod2 ..."],
112 [List of dynamic loading modules, ignored if settype-modules is disabled. It could be "all" to build all available settypes as modules]),
113 [SETTYPE_MODLIST_RAW="$withval";])
116 if test "x$enable_settype_modules" = "xyes"; then
117 for mod in $SETTYPE_MODLIST_RAW; do
118 if echo $mod | grep "all"; then
121 if echo $mod | grep "ipset_"; then
128 SETTYPE_MODLIST="${SETTYPE_MODLIST} $m"
131 AC_MSG_RESULT([checking for configuration with dynamic loading modules... $SETTYPE_MODLIST_RAW])
133 AC_SUBST(SETTYPE_MODLIST)
135 AM_CONDITIONAL([ENABLE_SETTYPE_MODULES], [test "x$enable_settype_modules" = xyes])
137 AM_CONDITIONAL([ENABLE_STATIC], [test "x$enable_static" = xyes])
138 AM_CONDITIONAL([ENABLE_SHARED], [test "x$enable_shared" = xyes])
140 dnl Checks for programs
149 dnl Checks for libraries
150 PKG_CHECK_MODULES([libmnl], [libmnl >= 1])
152 dnl Checks for header files
154 dnl Checks for declarations
155 AC_CHECK_DECLS([NLA_F_NESTED, NLA_F_NET_BYTEORDER, NLA_TYPE_MASK],,
156 [AC_MSG_ERROR([System kernel header files are older than 2.6.24, use CFLAGS for non-default location])],
157 [#include <sys/socket.h>
158 #include <linux/netlink.h>])
160 dnl Checks for typedefs, structures
161 AC_CHECK_TYPES([union nf_inet_addr],,,[#include <linux/types.h>
162 #include <netinet/in.h>
163 #include <linux/netfilter.h>])
165 dnl Checks for functions
166 AC_CHECK_FUNCS(gethostbyname2)
168 if test "$BUILDKMOD" == "yes"
170 dnl Check kernel incompatibilities... Ugly like hell
171 AC_MSG_CHECKING([kernel source for struct xt_action_param])
172 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
173 $GREP -q 'struct xt_action_param' $ksourcedir/include/linux/netfilter/x_tables.h; then
175 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, define)
178 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, undef)
181 AC_MSG_CHECKING([kernel source for vzalloc])
182 if test -f $ksourcedir/include/linux/vmalloc.h && \
183 $GREP -q 'vzalloc' $ksourcedir/include/linux/vmalloc.h; then
185 AC_SUBST(HAVE_VZALLOC, define)
188 AC_SUBST(HAVE_VZALLOC, undef)
191 AC_MSG_CHECKING([kernel source for ether_addr_equal])
192 if test -f $ksourcedir/include/linux/etherdevice.h && \
193 $GREP -q 'ether_addr_equal' $ksourcedir/include/linux/etherdevice.h; then
195 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, define)
198 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, undef)
201 AC_MSG_CHECKING([kernel source for nla_put_be16])
202 if test -f $ksourcedir/include/net/netlink.h && \
203 $GREP -q 'nla_put_be16' $ksourcedir/include/net/netlink.h; then
205 AC_SUBST(HAVE_NLA_PUT_BE16, define)
208 AC_SUBST(HAVE_NLA_PUT_BE16, undef)
211 AC_MSG_CHECKING([kernel source for nla_put_be64])
212 if test -f $ksourcedir/include/net/netlink.h && \
213 $GREP -q 'nla_put_be64' $ksourcedir/include/net/netlink.h; then
215 AC_SUBST(HAVE_NLA_PUT_BE64, define)
218 AC_SUBST(HAVE_NLA_PUT_BE64, undef)
221 AC_MSG_CHECKING([kernel source for portid in nl_info])
222 if test -f $ksourcedir/include/linux/netlink.h && \
223 $AWK '/^struct netlink_skb_parms/ {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'portid;'; then
225 AC_SUBST(HAVE_NL_INFO_PORTID, define)
228 AC_SUBST(HAVE_NL_INFO_PORTID, undef)
231 AC_MSG_CHECKING([kernel source for netlink_dump_start args])
232 if test -f $ksourcedir/include/linux/netlink.h && \
233 $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'done.*;'; then
234 AC_MSG_RESULT(5 args)
235 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 5)
236 elif test -f $ksourcedir/include/linux/netlink.h && \
237 $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'min_dump_alloc.*;'; then
238 AC_MSG_RESULT(6 args)
239 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 6)
241 AC_MSG_RESULT(4 args)
242 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 4)
245 AC_MSG_CHECKING([kernel source for ns_capable])
246 if test -f $ksourcedir/include/linux/capability.h && \
247 $GREP -q 'ns_capable' $ksourcedir/include/linux/capability.h; then
249 AC_SUBST(HAVE_NS_CAPABLE, define)
252 AC_SUBST(HAVE_NS_CAPABLE, undef)
255 AC_MSG_CHECKING([kernel source for nfnl_lock per subsys])
256 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
257 $GREP -q 'nfnl_lock.* subsys_id' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
259 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, define)
262 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, undef)
265 AC_MSG_CHECKING([kernel source for export.h])
266 if test -f $ksourcedir/include/linux/export.h; then
268 AC_SUBST(HAVE_EXPORT_H, define)
271 AC_SUBST(HAVE_EXPORT_H, undef)
274 AC_MSG_CHECKING([kernel source for ipv6_skip_exthdr args])
275 if test -f $ksourcedir/include/net/ipv6.h && \
276 $AWK '/ipv6_skip_exthdr/ {getline; print}' $ksourcedir/include/net/ipv6.h | $GREP -q 'frag_offp'; then
277 AC_MSG_RESULT(4 args)
278 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 4)
280 AC_MSG_RESULT(3 args)
281 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 3)
284 AC_MSG_CHECKING([kernel source for bool checkentry function prototype])
285 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
286 $GREP -q 'bool .\*checkentry.' $ksourcedir/include/linux/netfilter/x_tables.h; then
288 AC_SUBST(HAVE_CHECKENTRY_BOOL, define)
291 AC_SUBST(HAVE_CHECKENTRY_BOOL, undef)
294 AC_MSG_CHECKING([kernel source for old struct xt_target_param])
295 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
296 $GREP -q '^struct xt_target_param ' $ksourcedir/include/linux/netfilter/x_tables.h; then
298 AC_SUBST(HAVE_XT_TARGET_PARAM, define)
301 AC_SUBST(HAVE_XT_TARGET_PARAM, undef)
304 AC_MSG_CHECKING([kernel source for id in struct pernet_operations])
305 if test -f $ksourcedir/include/net/net_namespace.h && \
306 $AWK '/struct pernet_operations/ {for(i=1; i<=6; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'int \*id;'; then
308 AC_SUBST(HAVE_NET_OPS_ID, define)
311 AC_SUBST(HAVE_NET_OPS_ID, undef)
314 AC_MSG_CHECKING([kernel source for user_ns in struct net])
315 if test -f $ksourcedir/include/net/net_namespace.h && \
316 $AWK '/^struct net \{/ {for(i=1; i<=20; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'user_ns'; then
318 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, define)
321 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, undef)
324 AC_MSG_CHECKING([kernel source for rbtree_postorder_for_each_entry_safe])
325 if test -f $ksourcedir/include/linux/rbtree.h && \
326 $GREP -q 'rbtree_postorder_for_each_entry_safe' $ksourcedir/include/linux/rbtree.h; then
328 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, define)
331 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, undef)
334 AC_MSG_CHECKING([kernel source for kvfree])
335 if test -f $ksourcedir/include/linux/mm.h && \
336 $GREP -q 'kvfree' $ksourcedir/include/linux/mm.h; then
338 AC_SUBST(HAVE_KVFREE, define)
341 AC_SUBST(HAVE_KVFREE, undef)
344 AC_MSG_CHECKING([kernel source for struct net in struct xt_mtchk_param])
345 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
346 $AWK '/^struct xt_mtchk_param / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/x_tables.h | \
347 $GREP -q 'struct net '; then
349 AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, define)
352 AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, undef)
355 AC_MSG_CHECKING([kernel source for struct net in the change function of tcf_ematch_ops])
356 if test -f $ksourcedir/include/net/pkt_cls.h && \
357 $AWK '/^struct tcf_ematch_ops / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
358 $GREP -q '\*change..struct net \*net'; then
360 AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, define)
363 AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, undef)
366 AC_MSG_CHECKING([kernel source for struct net in struct tcf_ematch])
367 if test -f $ksourcedir/include/net/pkt_cls.h && \
368 $AWK '/^struct tcf_ematch_ops / {for(i=1; i<=7; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
369 $GREP -q 'struct net'; then
371 AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, define)
374 AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, undef)
377 AC_MSG_CHECKING([kernel source for struct net_generic])
378 if test -f $ksourcedir/include/net/netns/generic.h && \
379 $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
383 AC_MSG_ERROR([Netns support is required in the Linux kernel tree])
387 dnl Checks for compiler characteristics.
388 dnl Check extra warning flags except
389 dnl -Wconversion -> we need it
390 dnl -Wunreachable-code -> fails with ntoh*
391 dnl -Wpointer-arith -> limbnl uses it
392 dnl -Wsign-conversion -> libmnl
393 if test "x$enable_debug" = "xyes"
395 AX_CFLAGS_GCC_OPTION(-Waggregate-return)
396 AX_CFLAGS_GCC_OPTION(-Wbad-function-cast)
397 AX_CFLAGS_GCC_OPTION(-Wcast-align)
398 AX_CFLAGS_GCC_OPTION(-Wcast-qual)
399 AX_CFLAGS_GCC_OPTION(-Werror)
400 AX_CFLAGS_GCC_OPTION(-Wextra)
401 AX_CFLAGS_GCC_OPTION(-Wfloat-equal)
402 AX_CFLAGS_GCC_OPTION(-Wformat=2)
403 AX_CFLAGS_GCC_OPTION(-Wjump-misses-init)
404 AX_CFLAGS_GCC_OPTION(-Winit-self)
405 AX_CFLAGS_GCC_OPTION(-Winline)
406 AX_CFLAGS_GCC_OPTION(-Wlogical-op)
407 AX_CFLAGS_GCC_OPTION(-Wmissing-declarations)
408 AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute)
409 AX_CFLAGS_GCC_OPTION(-Wmissing-prototypes)
410 AX_CFLAGS_GCC_OPTION(-Wnested-externs)
411 AX_CFLAGS_GCC_OPTION(-Wno-missing-field-initializers)
412 AX_CFLAGS_GCC_OPTION(-Wold-style-definition)
413 AX_CFLAGS_GCC_OPTION(-Woverlength-strings)
414 AX_CFLAGS_GCC_OPTION(-Wpacked)
415 AX_CFLAGS_GCC_OPTION(-Wredundant-decls)
416 AX_CFLAGS_GCC_OPTION(-Wrwrite-strings)
417 AX_CFLAGS_GCC_OPTION(-Wshadow)
418 AX_CFLAGS_GCC_OPTION(-Wsign-compare)
419 AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes)
420 AX_CFLAGS_GCC_OPTION(-Wswitch-default)
421 AX_CFLAGS_GCC_OPTION(-Wundef)
422 AX_CFLAGS_GCC_OPTION(-Wuninitialized)
423 AX_CFLAGS_GCC_OPTION(-Wunused)
424 AX_CFLAGS_GCC_OPTION(-Wvla)
425 AX_CFLAGS_GCC_OPTION(-Wwrite-strings)
427 dnl Checks for library functions.
430 AC_CONFIG_FILES([Makefile include/libipset/Makefile
431 lib/Makefile lib/libipset.pc src/Makefile
432 kernel/include/linux/netfilter/ipset/ip_set_compat.h])
437 AC_MSG_RESULT([$PACKAGE userspace tool configuration:])
438 if test "x$enable_settype_modules" != "xyes"; then
439 AC_MSG_RESULT([ Dynamic module loading: disabled])
441 AC_MSG_RESULT([ Dynamic module loading: enabled])
443 IPSET_ALL_MODULES="`ls ${srcdir}/lib/ipset_*.c|sed -e 's/^.*lib\///' -e 's/\.c$//'`"
444 AC_MSG_RESULT([ Static modules:])
445 if test "x$SETTYPE_MODLIST" = "x"; then
446 for mod in $IPSET_ALL_MODULES; do
447 AC_MSG_RESULT([ ${mod}])
449 AC_MSG_RESULT([ Dynamic modules:])
450 elif echo $SETTYPE_MODLIST | grep "all" >/dev/null; then
451 AC_MSG_RESULT([ Dynamic modules:])
452 for mod in $IPSET_ALL_MODULES; do
453 AC_MSG_RESULT([ ${mod}])
456 for mod in $IPSET_ALL_MODULES; do
457 if echo $SETTYPE_MODLIST | grep $mod >/dev/null; then
460 AC_MSG_RESULT([ ${mod}])
463 AC_MSG_RESULT([ Dynamic modules:])
464 for mod in $IPSET_ALL_MODULES; do
465 if echo $SETTYPE_MODLIST | grep $mod >/dev/null; then
466 AC_MSG_RESULT([ ${mod}])