]> git.ipfire.org Git - thirdparty/ipset.git/blob - configure.ac
Compatibility: Check for the fourth arg of list_for_each_entry_rcu()
[thirdparty/ipset.git] / configure.ac
1 dnl Boilerplate
2 AC_INIT([ipset], [7.7], [kadlec@netfilter.org])
3 AC_CONFIG_AUX_DIR([build-aux])
4 AC_CANONICAL_HOST
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])])
9
10 AC_ENABLE_STATIC
11 LT_INIT([dlopen])
12 LT_CONFIG_LTDL_DIR([libltdl])
13 LTDL_INIT([nonrecursive])
14
15 PKG_PROG_PKG_CONFIG
16
17 dnl Shortcut: Linux supported alone
18 case "$host" in
19 *-*-linux* | *-*-uclinux*) ;;
20 *) AC_MSG_ERROR([Linux systems supported exclusively!]);;
21 esac
22
23 dnl Optionnally disable building the kernel module
24 AC_ARG_WITH([kmod],
25 AS_HELP_STRING([--with-kmod=yes/no],
26 [Build the kernel module (default: yes)]),
27 [BUILDKMOD="$withval";],
28 [BUILDKMOD="yes";])
29 AM_CONDITIONAL(WITH_KMOD, test "$BUILDKMOD" == "yes")
30
31 dnl Additional arguments
32 dnl Kernel build directory or source tree
33 AC_ARG_WITH([kbuild],
34 AS_HELP_STRING([--with-kbuild=PATH],
35 [Path to kernel build directory]),
36 [KBUILDDIR="$withval";])
37 AC_ARG_WITH([ksource],
38 AS_HELP_STRING([--with-ksource=PATH],
39 [Path to kernel source directory, if not the same as the kernel build directory]),
40 [KSOURCEDIR="$withval";])
41 AM_CONDITIONAL(WITH_KBUILDDIR, test "$KBUILDDIR" != "")
42 AC_SUBST(KBUILDDIR)
43
44 dnl ipset bash compspec - bash shell programmable completion
45 AC_ARG_ENABLE([bashcompl],
46 AS_HELP_STRING([--enable-bashcompl],
47 [Install bash completion for ipset]),
48 [enable_bashcompl="$enableval"], [enable_bashcompl="no"])
49
50 # backward compatibility with older pkg-config
51 m4_ifndef([PKG_CHECK_VAR], [
52 # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
53 # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
54 # -------------------------------------------
55 # Retrieves the value of the pkg-config variable for the given module.
56 AC_DEFUN([PKG_CHECK_VAR],
57 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
58 AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
59
60 _PKG_CONFIG([$1], [variable="][$3]["], [$2])
61 AS_VAR_COPY([$1], [pkg_cv_][$1])
62
63 AS_VAR_IF([$1], [""], [$5], [$4])dnl
64 ])# PKG_CHECK_VAR
65 ])
66
67 # This hack makes PKG_CHECK_VARS from m4/pkg.m4 work on autoconf 2.63
68 # (courtesy of sunnybear in https://github.com/gdnsd/gdnsd/issues/85)
69 m4_ifndef([AS_VAR_COPY],
70 [m4_define([AS_VAR_COPY],
71 [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])])
72
73 if test "x$enable_bashcompl" = "xyes"; then
74 PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], , bashcompdir="${sysconfdir}/bash_completion.d")
75 AC_SUBST(bashcompdir)
76 fi
77
78 if test "$BUILDKMOD" == "yes"
79 then
80 dnl Sigh: check kernel version dependencies
81 if test "$KBUILDDIR" != ""
82 then
83 kbuilddir="$KBUILDDIR"
84 else
85 kbuilddir="/lib/modules/`uname -r`/build"
86 fi
87
88 if test -n "$KSOURCEDIR"; then
89 ksourcedir="$KSOURCEDIR"
90 elif test -e "$kbuilddir/include/linux/netfilter/nfnetlink.h"; then
91 ksourcedir="$kbuilddir"
92 else
93 ksourcedir="/lib/modules/$(uname -r)/source"
94 fi
95 if test ! -e "$ksourcedir/include/linux/netfilter/nfnetlink.h"
96 then
97 AC_MSG_ERROR([Invalid kernel source directory $ksourcedir])
98 fi
99
100 if test ! -e "$kbuilddir/.config"
101 then
102 AC_MSG_ERROR([The kernel build directory $kbuilddir is not configured])
103 fi
104
105 AC_PROG_GREP
106 AC_PROG_AWK
107
108 if ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/linux/netfilter/nfnetlink.h" && \
109 ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/uapi/linux/netfilter/nfnetlink.h";
110 then
111 AC_MSG_ERROR([The kernel source directory $ksourcedir is not patched with netlink.patch to support ipset])
112 fi
113 fi
114
115 dnl Maximal number of sets supported by the kernel, default 256
116 AC_ARG_WITH([maxsets],
117 AS_HELP_STRING([--with-maxsets=256],
118 [Maximal numer of sets supported by the kernel]),
119 [MAXSETS="$withval";])
120 AM_CONDITIONAL(WITH_MAXSETS, test "$MAXSETS" != "")
121 AC_SUBST(MAXSETS)
122
123 dnl Verbose compiling
124 AC_ARG_ENABLE([verbose],
125 AS_HELP_STRING([--enable-verbose],
126 [Enable verbose mode at compiling/linking.]),
127 [case "${enableval}" in
128 yes) enable_verbose=yes ;;
129 no) enable_verbose=no ;;
130 *) AC_MSG_ERROR([bad value ${enableval} for --enable-verbose]) ;;
131 esac], [enable_verbose=no])
132
133 AC_ARG_ENABLE([debug],
134 AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
135 [], [enable_debug=no])
136 AS_IF([test "x$enable_debug" = "xyes"], [
137 AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
138 ])
139 AM_CONDITIONAL([ENABLE_DEBUG], [test "x$enable_debug" = xyes])
140
141 dnl Enable type modules
142 AC_ARG_ENABLE([settype_modules],
143 AS_HELP_STRING([--enable-settype-modules],
144 [Enable set type modules support]),
145 [enable_settype_modules="$enableval"],
146 [enable_settype_modules="no"])
147
148 AC_ARG_WITH([settype_modules_list],
149 AS_HELP_STRING([--with-settype-modules-list="mod1 mod2 ..."],
150 [List of dynamic loading modules, ignored if settype-modules is disabled. It could be "all" to build all available settypes as modules]),
151 [SETTYPE_MODLIST_RAW="$withval";])
152
153 SETTYPE_MODLIST=
154 if test "x$enable_settype_modules" = "xyes"; then
155 for mod in $SETTYPE_MODLIST_RAW; do
156 if echo $mod | grep "all"; then
157 m="${mod}"
158 else
159 if echo $mod | grep "ipset_"; then
160 m="${mod}.c"
161 else
162 m="ipset_${mod}.c"
163 fi
164 fi
165
166 SETTYPE_MODLIST="${SETTYPE_MODLIST} $m"
167 done
168
169 AC_MSG_RESULT([checking for configuration with dynamic loading modules... $SETTYPE_MODLIST_RAW])
170 fi
171 AC_SUBST(SETTYPE_MODLIST)
172
173 AM_CONDITIONAL([ENABLE_SETTYPE_MODULES], [test "x$enable_settype_modules" = xyes])
174
175 AM_CONDITIONAL([ENABLE_STATIC], [test "x$enable_static" = xyes])
176 AM_CONDITIONAL([ENABLE_SHARED], [test "x$enable_shared" = xyes])
177
178 dnl Checks for programs
179 : ${CFLAGS=""}
180
181 AC_PROG_CC
182 AM_PROG_CC_C_O
183 AC_PROG_LIBTOOL
184 AC_PROG_INSTALL
185 AC_PROG_LN_S
186
187 dnl Checks for libraries
188 PKG_CHECK_MODULES([libmnl], [libmnl >= 1])
189
190 dnl Checks for header files
191
192 dnl Checks for declarations
193 AC_CHECK_DECLS([NLA_F_NESTED, NLA_F_NET_BYTEORDER, NLA_TYPE_MASK],,
194 [AC_MSG_ERROR([System kernel header files are older than 2.6.24, use CFLAGS for non-default location])],
195 [#include <sys/socket.h>
196 #include <linux/netlink.h>])
197
198 dnl Checks for typedefs, structures
199 AC_CHECK_TYPES([union nf_inet_addr],,,[#include <linux/types.h>
200 #include <netinet/in.h>
201 #include <linux/netfilter.h>])
202
203 dnl Checks for functions
204 AC_CHECK_FUNCS(gethostbyname2)
205
206 if test "$BUILDKMOD" == "yes"
207 then
208 dnl Check kernel incompatibilities... Ugly like hell
209
210 AC_MSG_CHECKING([kernel source for INIT_DEFERRABLE_WORK])
211 if test -f $ksourcedir/include/linux/workqueue.h && \
212 $GREP -q 'INIT_DEFERRABLE_WORK' $ksourcedir/include/linux/workqueue.h; then
213 AC_MSG_RESULT(yes)
214 AC_SUBST(HAVE_INIT_DEFERRABLE_WORK, define)
215 else
216 AC_MSG_RESULT(no)
217 AC_SUBST(HAVE_INIT_DEFERRABLE_WORK, undef)
218 fi
219
220 AC_MSG_CHECKING([kernel source for system_power_efficient_wq])
221 if test -f $ksourcedir/include/linux/workqueue.h && \
222 $GREP -q 'system_power_efficient_wq' $ksourcedir/include/linux/workqueue.h; then
223 AC_MSG_RESULT(yes)
224 AC_SUBST(HAVE_SYSTEM_POWER_EFFICIENT_WQ, define)
225 elif test -f $ksourcedir/include/linux/workqueue.h && \
226 $GREP -q 'system_wq' $ksourcedir/include/linux/workqueue.h; then
227 AC_MSG_RESULT(no)
228 AC_SUBST(HAVE_SYSTEM_POWER_EFFICIENT_WQ, undef)
229 else
230 AC_MSG_ERROR([Kernel source tree is too old, at least v2.36 is required])
231 fi
232
233 AC_MSG_CHECKING([kernel source for struct xt_action_param])
234 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
235 $GREP -q 'struct xt_action_param' $ksourcedir/include/linux/netfilter/x_tables.h; then
236 AC_MSG_RESULT(yes)
237 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, define)
238 else
239 AC_MSG_RESULT(no)
240 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, undef)
241 fi
242
243 AC_MSG_CHECKING([kernel source for vzalloc])
244 if test -f $ksourcedir/include/linux/vmalloc.h && \
245 $GREP -q 'vzalloc' $ksourcedir/include/linux/vmalloc.h; then
246 AC_MSG_RESULT(yes)
247 AC_SUBST(HAVE_VZALLOC, define)
248 else
249 AC_MSG_RESULT(no)
250 AC_SUBST(HAVE_VZALLOC, undef)
251 fi
252
253 AC_MSG_CHECKING([kernel source for ether_addr_equal])
254 if test -f $ksourcedir/include/linux/etherdevice.h && \
255 $GREP -q 'ether_addr_equal' $ksourcedir/include/linux/etherdevice.h; then
256 AC_MSG_RESULT(yes)
257 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, define)
258 else
259 AC_MSG_RESULT(no)
260 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, undef)
261 fi
262
263 AC_MSG_CHECKING([kernel source for is_zero_ether_addr])
264 if test -f $ksourcedir/include/linux/etherdevice.h && \
265 $GREP -q 'is_zero_ether_addr' $ksourcedir/include/linux/etherdevice.h; then
266 AC_MSG_RESULT(yes)
267 AC_SUBST(HAVE_IS_ZERO_ETHER_ADDR, define)
268 else
269 AC_MSG_RESULT(no)
270 AC_SUBST(HAVE_IS_ZERO_ETHER_ADDR, undef)
271 fi
272
273 AC_MSG_CHECKING([kernel source for nla_put_be16])
274 if test -f $ksourcedir/include/net/netlink.h && \
275 $GREP -q 'nla_put_be16' $ksourcedir/include/net/netlink.h; then
276 AC_MSG_RESULT(yes)
277 AC_SUBST(HAVE_NLA_PUT_BE16, define)
278 else
279 AC_MSG_RESULT(no)
280 AC_SUBST(HAVE_NLA_PUT_BE16, undef)
281 fi
282
283 AC_MSG_CHECKING([kernel source for nla_put_be64])
284 if test -f $ksourcedir/include/net/netlink.h && \
285 $GREP -q 'nla_put_be64' $ksourcedir/include/net/netlink.h; then
286 AC_MSG_RESULT(yes)
287 AC_SUBST(HAVE_NLA_PUT_BE64, define)
288 else
289 AC_MSG_RESULT(no)
290 AC_SUBST(HAVE_NLA_PUT_BE64, undef)
291 fi
292
293 AC_MSG_CHECKING([kernel source for nla_put_64bit])
294 if test -f $ksourcedir/include/net/netlink.h && \
295 $GREP -q 'nla_put_64bit' $ksourcedir/include/net/netlink.h; then
296 AC_MSG_RESULT(yes)
297 AC_SUBST(HAVE_NLA_PUT_64BIT, define)
298 else
299 AC_MSG_RESULT(no)
300 AC_SUBST(HAVE_NLA_PUT_64BIT, undef)
301 fi
302
303 AC_MSG_CHECKING([kernel source for portid in nl_info])
304 if test -f $ksourcedir/include/linux/netlink.h && \
305 $AWK '/^struct netlink_skb_parms /,/^}/' $ksourcedir/include/linux/netlink.h | $GREP -q 'portid;'; then
306 AC_MSG_RESULT(yes)
307 AC_SUBST(HAVE_NL_INFO_PORTID, define)
308 else
309 AC_MSG_RESULT(no)
310 AC_SUBST(HAVE_NL_INFO_PORTID, undef)
311 fi
312
313 AC_MSG_CHECKING([kernel source for netlink_dump_start args])
314 if test -f $ksourcedir/include/linux/netlink.h && \
315 $AWK '/ netlink_dump_start\(/,/\)/' $ksourcedir/include/linux/netlink.h | $GREP -q 'done.*;'; then
316 AC_MSG_RESULT(5 args)
317 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 5)
318 elif test -f $ksourcedir/include/linux/netlink.h && \
319 $AWK '/ netlink_dump_start\(/,/\)/' $ksourcedir/include/linux/netlink.h | $GREP -q 'min_dump_alloc.*;'; then
320 AC_MSG_RESULT(6 args)
321 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 6)
322 elif test -f $ksourcedir/include/linux/netlink.h && \
323 $AWK '/^struct netlink_dump_control {/,/\}/' $ksourcedir/include/linux/netlink.h | $GREP -q '\(\*start\)'; then
324 AC_MSG_RESULT(4 args)
325 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 4)
326 else
327 AC_MSG_RESULT(7 fake args)
328 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 7)
329 fi
330
331 AC_MSG_CHECKING([kernel source for ns_capable])
332 if test -f $ksourcedir/include/linux/capability.h && \
333 $GREP -q 'ns_capable' $ksourcedir/include/linux/capability.h; then
334 AC_MSG_RESULT(yes)
335 AC_SUBST(HAVE_NS_CAPABLE, define)
336 else
337 AC_MSG_RESULT(no)
338 AC_SUBST(HAVE_NS_CAPABLE, undef)
339 fi
340
341 AC_MSG_CHECKING([kernel source for nfnl_lock per subsys])
342 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
343 $GREP -q 'nfnl_lock.* subsys_id' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
344 AC_MSG_RESULT(yes)
345 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, define)
346 else
347 AC_MSG_RESULT(no)
348 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, undef)
349 fi
350
351 AC_MSG_CHECKING([kernel source for export.h])
352 if test -f $ksourcedir/include/linux/export.h; then
353 AC_MSG_RESULT(yes)
354 AC_SUBST(HAVE_EXPORT_H, define)
355 else
356 AC_MSG_RESULT(no)
357 AC_SUBST(HAVE_EXPORT_H, undef)
358 fi
359
360 AC_MSG_CHECKING([kernel source for ipv6_skip_exthdr args])
361 if test -f $ksourcedir/include/net/ipv6.h && \
362 $AWK '/( |\t)ipv6_skip_exthdr\(/,/\)/' $ksourcedir/include/net/ipv6.h | $GREP -q 'frag_offp'; then
363 AC_MSG_RESULT(4 args)
364 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 4)
365 else
366 AC_MSG_RESULT(3 args)
367 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 3)
368 fi
369
370 AC_MSG_CHECKING([kernel source for cond_resched_rcu])
371 if test -f $ksourcedir/include/linux/sched.h && \
372 $AWK '/( |\t)cond_resched_rcu\(/,/\)/' $ksourcedir/include/linux/sched.h | $GREP -q 'cond_resched_rcu'; then
373 AC_MSG_RESULT(yes)
374 AC_SUBST(HAVE_COND_RESCHED_RCU, define)
375 else
376 AC_MSG_RESULT(no)
377 AC_SUBST(HAVE_COND_RESCHED_RCU, undef)
378 fi
379
380 AC_MSG_CHECKING([kernel source for bool checkentry function prototype])
381 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
382 $GREP -q 'bool .\*checkentry.' $ksourcedir/include/linux/netfilter/x_tables.h; then
383 AC_MSG_RESULT(yes)
384 AC_SUBST(HAVE_CHECKENTRY_BOOL, define)
385 else
386 AC_MSG_RESULT(no)
387 AC_SUBST(HAVE_CHECKENTRY_BOOL, undef)
388 fi
389
390 AC_MSG_CHECKING([kernel source for old struct xt_target_param])
391 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
392 $GREP -q '^struct xt_target_param ' $ksourcedir/include/linux/netfilter/x_tables.h; then
393 AC_MSG_RESULT(yes)
394 AC_SUBST(HAVE_XT_TARGET_PARAM, define)
395 else
396 AC_MSG_RESULT(no)
397 AC_SUBST(HAVE_XT_TARGET_PARAM, undef)
398 fi
399
400 AC_MSG_CHECKING([kernel source for id in struct pernet_operations])
401 if test -f $ksourcedir/include/net/net_namespace.h && \
402 $AWK '/^struct pernet_operations /,/^}/' $ksourcedir/include/net/net_namespace.h | $GREP -q 'int \*id;'; then
403 AC_MSG_RESULT(yes)
404 AC_SUBST(HAVE_NET_OPS_ID, define)
405 else
406 AC_MSG_RESULT(no)
407 AC_SUBST(HAVE_NET_OPS_ID, undef)
408 fi
409
410 AC_MSG_CHECKING([kernel source for async in struct pernet_operations])
411 if test -f $ksourcedir/include/net/net_namespace.h && \
412 $AWK '/^struct pernet_operations /,/^}/' $ksourcedir/include/net/net_namespace.h | $GREP -q 'bool async;'; then
413 AC_MSG_RESULT(yes)
414 AC_SUBST(HAVE_NET_OPS_ASYNC, define)
415 else
416 AC_MSG_RESULT(no)
417 AC_SUBST(HAVE_NET_OPS_ASYNC, undef)
418 fi
419
420 AC_MSG_CHECKING([kernel source for user_ns in struct net])
421 if test -f $ksourcedir/include/net/net_namespace.h && \
422 $AWK '/^struct net \{/,/^}/' $ksourcedir/include/net/net_namespace.h | $GREP -q 'user_ns'; then
423 AC_MSG_RESULT(yes)
424 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, define)
425 else
426 AC_MSG_RESULT(no)
427 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, undef)
428 fi
429
430 AC_MSG_CHECKING([kernel source for rbtree_postorder_for_each_entry_safe])
431 if test -f $ksourcedir/include/linux/rbtree.h && \
432 $GREP -q 'rbtree_postorder_for_each_entry_safe' $ksourcedir/include/linux/rbtree.h; then
433 AC_MSG_RESULT(yes)
434 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, define)
435 else
436 AC_MSG_RESULT(no)
437 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, undef)
438 fi
439
440 AC_MSG_CHECKING([kernel source for kvcalloc])
441 if test -f $ksourcedir/include/linux/mm.h && \
442 $GREP -q 'kvcalloc' $ksourcedir/include/linux/mm.h; then
443 AC_MSG_RESULT(yes)
444 AC_SUBST(HAVE_KVCALLOC, define)
445 else
446 AC_MSG_RESULT(no)
447 AC_SUBST(HAVE_KVCALLOC, undef)
448 fi
449
450 AC_MSG_CHECKING([kernel source for kvfree])
451 if test -f $ksourcedir/include/linux/mm.h && \
452 $GREP -q 'kvfree' $ksourcedir/include/linux/mm.h; then
453 AC_MSG_RESULT(yes)
454 AC_SUBST(HAVE_KVFREE, define)
455 else
456 AC_MSG_RESULT(no)
457 AC_SUBST(HAVE_KVFREE, undef)
458 fi
459
460 AC_MSG_CHECKING([kernel source for bitmap_zalloc])
461 if test -f $ksourcedir/include/linux/bitmap.h && \
462 $GREP -q 'bitmap_zalloc' $ksourcedir/include/linux/bitmap.h; then
463 AC_MSG_RESULT(yes)
464 AC_SUBST(HAVE_BITMAP_ZALLOC, define)
465 else
466 AC_MSG_RESULT(no)
467 AC_SUBST(HAVE_BITMAP_ZALLOC, undef)
468 fi
469
470 AC_MSG_CHECKING([kernel source for bitmap_zero])
471 if test -f $ksourcedir/include/linux/bitmap.h && \
472 $GREP -q 'bitmap_zero' $ksourcedir/include/linux/bitmap.h; then
473 AC_MSG_RESULT(yes)
474 AC_SUBST(HAVE_BITMAP_ZERO, define)
475 else
476 AC_MSG_RESULT(no)
477 AC_SUBST(HAVE_BITMAP_ZERO, undef)
478 fi
479
480 AC_MSG_CHECKING([kernel source for struct net in struct xt_mtchk_param])
481 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
482 $AWK '/^struct xt_mtchk_param /,/^}/' $ksourcedir/include/linux/netfilter/x_tables.h | \
483 $GREP -q 'struct net '; then
484 AC_MSG_RESULT(yes)
485 AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, define)
486 else
487 AC_MSG_RESULT(no)
488 AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, undef)
489 fi
490
491 AC_MSG_CHECKING([kernel source for struct net in the change function of tcf_ematch_ops])
492 if test -f $ksourcedir/include/net/pkt_cls.h && \
493 $AWK '/^struct tcf_ematch_ops /,/^}/' $ksourcedir/include/net/pkt_cls.h | \
494 $GREP -q '\*change..struct net \*net'; then
495 AC_MSG_RESULT(yes)
496 AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, define)
497 else
498 AC_MSG_RESULT(no)
499 AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, undef)
500 fi
501
502 AC_MSG_CHECKING([kernel source for struct net in struct tcf_ematch])
503 if test -f $ksourcedir/include/net/pkt_cls.h && \
504 $AWK '/^struct tcf_ematch /,/^}/' $ksourcedir/include/net/pkt_cls.h | \
505 $GREP -q 'struct net'; then
506 AC_MSG_RESULT(yes)
507 AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, define)
508 else
509 AC_MSG_RESULT(no)
510 AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, undef)
511 fi
512
513 AC_MSG_CHECKING([kernel source for list_last_entry])
514 if test -f $ksourcedir/include/linux/list.h && \
515 $GREP -q 'list_last_entry' $ksourcedir/include/linux/list.h; then
516 AC_MSG_RESULT(yes)
517 AC_SUBST(HAVE_LIST_LAST_ENTRY, define)
518 else
519 AC_MSG_RESULT(no)
520 AC_SUBST(HAVE_LIST_LAST_ENTRY, undef)
521 fi
522
523 AC_MSG_CHECKING([kernel source for list_next_entry])
524 if test -f $ksourcedir/include/linux/list.h && \
525 $GREP -q 'list_next_entry' $ksourcedir/include/linux/list.h; then
526 AC_MSG_RESULT(yes)
527 AC_SUBST(HAVE_LIST_NEXT_ENTRY, define)
528 else
529 AC_MSG_RESULT(no)
530 AC_SUBST(HAVE_LIST_NEXT_ENTRY, undef)
531 fi
532
533 AC_MSG_CHECKING([kernel source for ether_addr_copy])
534 if test -f $ksourcedir/include/linux/etherdevice.h && \
535 $GREP -q 'ether_addr_copy' $ksourcedir/include/linux/etherdevice.h; then
536 AC_MSG_RESULT(yes)
537 AC_SUBST(HAVE_ETHER_ADDR_COPY, define)
538 else
539 AC_MSG_RESULT(no)
540 AC_SUBST(HAVE_ETHER_ADDR_COPY, undef)
541 fi
542
543 AC_MSG_CHECKING([kernel source for nf_bridge_get_physindev])
544 if test -f $ksourcedir/include/linux/netfilter_bridge.h && \
545 $GREP -q 'nf_bridge_get_physindev' $ksourcedir/include/linux/netfilter_bridge.h; then
546 AC_MSG_RESULT(yes)
547 AC_SUBST(HAVE_NF_BRIDGE_GET_PHYSDEV, define)
548 else
549 AC_MSG_RESULT(no)
550 AC_SUBST(HAVE_NF_BRIDGE_GET_PHYSDEV, undef)
551 fi
552
553 AC_MSG_CHECKING([kernel source for nla_put_in_addr])
554 if test -f $ksourcedir/include/net/netlink.h && \
555 $GREP -q 'nla_put_in_add' $ksourcedir/include/net/netlink.h; then
556 AC_MSG_RESULT(yes)
557 AC_SUBST(HAVE_NLA_PUT_IN_ADDR, define)
558 else
559 AC_MSG_RESULT(no)
560 AC_SUBST(HAVE_NLA_PUT_IN_ADDR, undef)
561 fi
562
563 AC_MSG_CHECKING([kernel source for struct net in the call() function in struct nfnl_callback])
564 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
565 $AWK '/^struct nfnl_callback /,/\);$/' $ksourcedir/include/linux/netfilter/nfnetlink.h | \
566 $GREP -q 'struct net'; then
567 AC_MSG_RESULT(yes)
568 AC_SUBST(HAVE_NET_IN_NFNL_CALLBACK_FN, define)
569 else
570 AC_MSG_RESULT(no)
571 AC_SUBST(HAVE_NET_IN_NFNL_CALLBACK_FN, undef)
572 fi
573
574 AC_MSG_CHECKING([kernel source for EXPORT_SYMBOL_GPL in module.h])
575 if test -f $ksourcedir/include/linux/module.h && \
576 $GREP -q 'EXPORT_SYMBOL_GPL' $ksourcedir/include/linux/module.h; then
577 AC_MSG_RESULT(yes)
578 AC_SUBST(HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H, define)
579 else
580 AC_MSG_RESULT(no)
581 AC_SUBST(HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H, undef)
582 fi
583
584 AC_MSG_CHECKING([kernel source for tc_skb_protocol in pkt_sched.h])
585 if test -f $ksourcedir/include/net/pkt_sched.h && \
586 $GREP -q 'tc_skb_protocol' $ksourcedir/include/net/pkt_sched.h; then
587 AC_MSG_RESULT(yes)
588 AC_SUBST(HAVE_TC_SKB_PROTOCOL, define)
589 else
590 AC_MSG_RESULT(no)
591 AC_SUBST(HAVE_TC_SKB_PROTOCOL, undef)
592
593 AC_MSG_CHECKING([kernel source for vlan_proto in struct sk_buff])
594 if test -f $ksourcedir/include/linux/skbuff.h && \
595 $AWK '/^struct sk_buff {/,/^};$/' $ksourcedir/include/linux/skbuff.h | \
596 $GREP -q 'vlan_proto'; then
597 AC_MSG_RESULT(yes)
598 AC_SUBST(HAVE_VLAN_PROTO_IN_SK_BUFF, define)
599 else
600 AC_MSG_RESULT(no)
601 AC_SUBST(HAVE_VLAN_PROTO_IN_SK_BUFF, undef)
602 fi
603 fi
604
605 AC_MSG_CHECKING([kernel source for iif to skb_iif rename in struct sk_buff])
606 if test -f $ksourcedir/include/linux/skbuff.h && \
607 $AWK '/^struct sk_buff {/,/^};$/' $ksourcedir/include/linux/skbuff.h | \
608 $GREP -q 'skb_iif'; then
609 AC_MSG_RESULT(yes)
610 AC_SUBST(HAVE_SKB_IIF, define)
611 else
612 AC_MSG_RESULT(no)
613 AC_SUBST(HAVE_SKB_IIF, undef)
614 fi
615
616 AC_MSG_CHECKING([kernel source for struct net in struct xt_action_param])
617 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
618 $AWK '/^struct xt_action_param /,/^}/' $ksourcedir/include/linux/netfilter/x_tables.h | \
619 $GREP -q 'struct net '; then
620 AC_MSG_RESULT(yes)
621 AC_SUBST(HAVE_NET_IN_XT_ACTION_PARAM, define)
622 else
623 AC_MSG_RESULT(no)
624 AC_SUBST(HAVE_NET_IN_XT_ACTION_PARAM, undef)
625 fi
626
627 AC_MSG_CHECKING([kernel source for struct nf_hook_state in struct xt_action_param])
628 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
629 $AWK '/^struct xt_action_param /,/^}/' $ksourcedir/include/linux/netfilter/x_tables.h | \
630 $GREP -q 'struct nf_hook_state '; then
631 AC_MSG_RESULT(yes)
632 AC_SUBST(HAVE_STATE_IN_XT_ACTION_PARAM, define)
633 else
634 AC_MSG_RESULT(no)
635 AC_SUBST(HAVE_STATE_IN_XT_ACTION_PARAM, undef)
636 fi
637
638 AC_MSG_CHECKING([kernel source for xt_family() in x_tables.h])
639 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
640 $GREP -q 'xt_family' $ksourcedir/include/linux/netfilter/x_tables.h; then
641 AC_MSG_RESULT(yes)
642 AC_SUBST(HAVE_XT_FAMILY, define)
643 else
644 AC_MSG_RESULT(no)
645 AC_SUBST(HAVE_XT_FAMILY, undef)
646 fi
647
648 AC_MSG_CHECKING([kernel source for xt_net() in x_tables.h])
649 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
650 $GREP -q 'xt_net' $ksourcedir/include/linux/netfilter/x_tables.h; then
651 AC_MSG_RESULT(yes)
652 AC_SUBST(HAVE_XT_NET, define)
653 else
654 AC_MSG_RESULT(no)
655 AC_SUBST(HAVE_XT_NET, undef)
656 fi
657
658 AC_MSG_CHECKING([kernel source for nfnl_msg_type() in nfnetlink.h])
659 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
660 $GREP -q 'nfnl_msg_type' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
661 AC_MSG_RESULT(yes)
662 AC_SUBST(HAVE_NFNL_MSG_TYPE, define)
663 else
664 AC_MSG_RESULT(no)
665 AC_SUBST(HAVE_NFNL_MSG_TYPE, undef)
666 fi
667
668 AC_MSG_CHECKING([kernel source for netlink extended ACK])
669 if test -f $ksourcedir/include/linux/netlink.h && \
670 $AWK '/void netlink_ack\(/,/\)/' $ksourcedir/include/linux/netlink.h | $GREP -q 'const struct netlink_ext_ack'; then
671 AC_MSG_RESULT(yes)
672 AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, define)
673 else
674 AC_MSG_RESULT(no)
675 AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, undef)
676 fi
677
678 AC_MSG_CHECKING([kernel source for passing extended ACK struct to parsing functions])
679 if test -f $ksourcedir/include/net/netlink.h && \
680 $AWK '/^static inline int nla_parse_nested\(/,/\)/' $ksourcedir/include/net/netlink.h | $GREP -q 'struct netlink_ext_ack'; then
681 AC_MSG_RESULT(yes)
682 AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_PARSERS, define)
683 else
684 AC_MSG_RESULT(no)
685 AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_PARSERS, undef)
686 fi
687
688 AC_MSG_CHECKING([kernel source for passing extended ACK struct to callback functions])
689 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
690 $AWK '/^struct nfnl_callback /,/^}/' $ksourcedir/include/linux/netfilter/nfnetlink.h | $GREP -q 'struct netlink_ext_ack'; then
691 AC_MSG_RESULT(yes)
692 AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_CALLBACKS, define)
693 else
694 AC_MSG_RESULT(no)
695 AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_CALLBACKS, undef)
696 fi
697
698 AC_MSG_CHECKING([kernel source for no typedef sctp_sctphdr_t])
699 if test -f $ksourcedir/include/linux/sctp.h && \
700 $GREP -q '^typedef struct sctphdr' $ksourcedir/include/linux/sctp.h; then
701 AC_MSG_RESULT(yes)
702 AC_SUBST(HAVE_TYPEDEF_SCTP_SCTPHDR_T, define)
703 else
704 AC_MSG_RESULT(no)
705 AC_SUBST(HAVE_TYPEDEF_SCTP_SCTPHDR_T, undef)
706 fi
707
708 AC_MSG_CHECKING([kernel source for timer_setup in timer.h])
709 if test -f $ksourcedir/include/linux/timer.h && \
710 $GREP -q ' timer_setup' $ksourcedir/include/linux/timer.h; then
711 AC_MSG_RESULT(yes)
712 AC_SUBST(HAVE_TIMER_SETUP, define)
713 else
714 AC_MSG_RESULT(no)
715 AC_SUBST(HAVE_TIMER_SETUP, undef)
716 fi
717
718 AC_MSG_CHECKING([kernel source for lockdep_nfnl_is_held() in nfnetlink.h])
719 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
720 $GREP -q ' lockdep_nfnl_is_held' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
721 AC_MSG_RESULT(yes)
722 AC_SUBST(HAVE_LOCKDEP_NFNL_IS_HELD, define)
723 else
724 AC_MSG_RESULT(no)
725 AC_SUBST(HAVE_LOCKDEP_NFNL_IS_HELD, undef)
726 fi
727
728 AC_MSG_CHECKING([kernel source for strscpy() in string.h])
729 if test -f $ksourcedir/include/linux/timer.h && \
730 $GREP -q ' strscpy' $ksourcedir/include/linux/string.h; then
731 AC_MSG_RESULT(yes)
732 AC_SUBST(HAVE_STRSCPY, define)
733 else
734 AC_MSG_RESULT(no)
735 AC_SUBST(HAVE_STRSCPY, undef)
736 fi
737
738 AC_MSG_CHECKING([kernel source for synchronize_rcu_bh() in rcutiny.h and rcupdate.h])
739 if test -f $ksourcedir/include/linux/rcupdate.h && \
740 $GREP -q 'static inline void synchronize_rcu_bh' \
741 $ksourcedir/include/linux/rcutiny.h $ksourcedir/include/linux/rcupdate.h; then
742 AC_MSG_RESULT(yes)
743 AC_SUBST(HAVE_SYNCHRONIZE_RCU_BH, define)
744 else
745 AC_MSG_RESULT(no)
746 AC_SUBST(HAVE_SYNCHRONIZE_RCU_BH, undef)
747 fi
748
749 AC_MSG_CHECKING([kernel source for the fourth arg of list_for_each_entry_rcu() in rculist.h])
750 if test -f $ksourcedir/include/linux/rculist.h && \
751 $GREP -q 'define list_for_each_entry_rcu(pos, head, member, cond' $ksourcedir/include/linux/rculist.h; then
752 AC_MSG_RESULT(yes)
753 AC_SUBST(HAVE_LIST_FOR_EACH_ENTRY_RCU_FOUR_ARGS, define)
754 else
755 AC_MSG_RESULT(no)
756 AC_SUBST(HAVE_LIST_FOR_EACH_ENTRY_RCU_FOUR_ARGS, undef)
757 fi
758
759 AC_MSG_CHECKING([kernel source for struct net_generic])
760 if test -f $ksourcedir/include/net/netns/generic.h && \
761 $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
762 AC_MSG_RESULT(yes)
763 else
764 AC_MSG_RESULT(no)
765 AC_MSG_ERROR([Netns support is required in the Linux kernel tree])
766 fi
767 fi
768
769 dnl Checks for compiler characteristics.
770 dnl Check extra warning flags except
771 dnl -Wconversion -> we need it
772 dnl -Wunreachable-code -> fails with ntoh*
773 dnl -Wpointer-arith -> limbnl uses it
774 dnl -Wsign-conversion -> libmnl
775 if test "x$enable_debug" = "xyes"
776 then
777 AX_CFLAGS_GCC_OPTION(-Waggregate-return)
778 AX_CFLAGS_GCC_OPTION(-Wbad-function-cast)
779 AX_CFLAGS_GCC_OPTION(-Wcast-align)
780 AX_CFLAGS_GCC_OPTION(-Wcast-qual)
781 AX_CFLAGS_GCC_OPTION(-Werror)
782 AX_CFLAGS_GCC_OPTION(-Wextra)
783 AX_CFLAGS_GCC_OPTION(-Wfloat-equal)
784 AX_CFLAGS_GCC_OPTION(-Wformat=2)
785 AX_CFLAGS_GCC_OPTION(-Wjump-misses-init)
786 AX_CFLAGS_GCC_OPTION(-Winit-self)
787 AX_CFLAGS_GCC_OPTION(-Winline)
788 AX_CFLAGS_GCC_OPTION(-Wlogical-op)
789 AX_CFLAGS_GCC_OPTION(-Wmissing-declarations)
790 AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute)
791 AX_CFLAGS_GCC_OPTION(-Wmissing-prototypes)
792 AX_CFLAGS_GCC_OPTION(-Wnested-externs)
793 AX_CFLAGS_GCC_OPTION(-Wno-missing-field-initializers)
794 AX_CFLAGS_GCC_OPTION(-Wold-style-definition)
795 AX_CFLAGS_GCC_OPTION(-Woverlength-strings)
796 AX_CFLAGS_GCC_OPTION(-Wpacked)
797 AX_CFLAGS_GCC_OPTION(-Wredundant-decls)
798 AX_CFLAGS_GCC_OPTION(-Wrwrite-strings)
799 AX_CFLAGS_GCC_OPTION(-Wshadow)
800 AX_CFLAGS_GCC_OPTION(-Wsign-compare)
801 AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes)
802 AX_CFLAGS_GCC_OPTION(-Wswitch-default)
803 AX_CFLAGS_GCC_OPTION(-Wundef)
804 AX_CFLAGS_GCC_OPTION(-Wuninitialized)
805 AX_CFLAGS_GCC_OPTION(-Wunused)
806 AX_CFLAGS_GCC_OPTION(-Wvla)
807 AX_CFLAGS_GCC_OPTION(-Wwrite-strings)
808 fi
809 dnl Checks for library functions.
810
811 dnl Generate output
812 AC_CONFIG_FILES([Makefile include/libipset/Makefile
813 lib/Makefile lib/libipset.pc src/Makefile utils/Makefile
814 kernel/include/linux/netfilter/ipset/ip_set_compat.h])
815 AC_OUTPUT
816
817 dnl Summary
818 AC_MSG_RESULT([])
819 AC_MSG_RESULT([$PACKAGE userspace tool configuration:])
820 if test "x$bashcompdir" != "x"; then
821 AC_MSG_RESULT([ Bash completion directory: ${bashcompdir}])
822 fi
823 if test "x$enable_settype_modules" != "xyes"; then
824 AC_MSG_RESULT([ Dynamic module loading: disabled])
825 else
826 AC_MSG_RESULT([ Dynamic module loading: enabled])
827 fi
828 IPSET_ALL_MODULES="`ls ${srcdir}/lib/ipset_*.c|sed -e 's/^.*lib\///' -e 's/\.c$//'`"
829 AC_MSG_RESULT([ Static modules:])
830 if test "x$SETTYPE_MODLIST" = "x"; then
831 for mod in $IPSET_ALL_MODULES; do
832 AC_MSG_RESULT([ ${mod}])
833 done
834 AC_MSG_RESULT([ Dynamic modules:])
835 elif echo $SETTYPE_MODLIST | grep "all" >/dev/null; then
836 AC_MSG_RESULT([ Dynamic modules:])
837 for mod in $IPSET_ALL_MODULES; do
838 AC_MSG_RESULT([ ${mod}])
839 done
840 else
841 for mod in $IPSET_ALL_MODULES; do
842 if echo $SETTYPE_MODLIST | grep -w "$mod" >/dev/null; then
843 :
844 else
845 AC_MSG_RESULT([ ${mod}])
846 fi
847 done
848 AC_MSG_RESULT([ Dynamic modules:])
849 for mod in $IPSET_ALL_MODULES; do
850 if echo $SETTYPE_MODLIST | grep -w "$mod" >/dev/null; then
851 AC_MSG_RESULT([ ${mod}])
852 fi
853 done
854 fi