]> granicus.if.org Git - ipset/blob - configure.ac
Add compatibility to support kvcalloc()
[ipset] / configure.ac
1 dnl Boilerplate
2 AC_INIT([ipset], [6.38], [kadlec@blackhole.kfki.hu])
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 if test "x$enable_bashcompl" = "xyes"; then
68         PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], , bashcompdir="${sysconfdir}/bash_completion.d")
69         AC_SUBST(bashcompdir)
70 fi
71
72 if test "$BUILDKMOD" == "yes"
73 then
74 dnl Sigh: check kernel version dependencies
75 if test "$KBUILDDIR" != ""
76 then
77         kbuilddir="$KBUILDDIR"
78 else
79         kbuilddir="/lib/modules/`uname -r`/build"
80 fi
81
82 if test -n "$KSOURCEDIR"; then
83         ksourcedir="$KSOURCEDIR"
84 elif test -e "$kbuilddir/include/linux/netfilter/nfnetlink.h"; then
85         ksourcedir="$kbuilddir"
86 else
87         ksourcedir="/lib/modules/$(uname -r)/source"
88 fi
89 if test ! -e "$ksourcedir/include/linux/netfilter/nfnetlink.h"
90 then
91         AC_MSG_ERROR([Invalid kernel source directory $ksourcedir])
92 fi
93
94 if test ! -e "$kbuilddir/.config"
95 then
96         AC_MSG_ERROR([The kernel build directory $kbuilddir is not configured])
97 fi
98
99 AC_PROG_GREP
100 AC_PROG_AWK
101
102 if ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/linux/netfilter/nfnetlink.h" && \
103    ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/uapi/linux/netfilter/nfnetlink.h";
104 then
105         AC_MSG_ERROR([The kernel source directory $ksourcedir is not patched with netlink.patch to support ipset])
106 fi
107 fi
108
109 dnl Maximal number of sets supported by the kernel, default 256
110 AC_ARG_WITH([maxsets],
111             AS_HELP_STRING([--with-maxsets=256],
112                            [Maximal numer of sets supported by the kernel]),
113             [MAXSETS="$withval";])
114 AM_CONDITIONAL(WITH_MAXSETS, test "$MAXSETS" != "")
115 AC_SUBST(MAXSETS)
116
117 dnl Verbose compiling
118 AC_ARG_ENABLE([verbose],
119               AS_HELP_STRING([--enable-verbose],
120                              [Enable verbose mode at compiling/linking.]),
121               [case "${enableval}" in
122                yes)     enable_verbose=yes ;;
123                no)      enable_verbose=no ;;
124                *) AC_MSG_ERROR([bad value ${enableval} for --enable-verbose]) ;;
125                esac], [enable_verbose=no])
126               
127 AC_ARG_ENABLE([debug],
128         AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
129         [], [enable_debug=no])
130 AS_IF([test "x$enable_debug" = "xyes"], [
131         AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
132 ])
133 AM_CONDITIONAL([ENABLE_DEBUG], [test "x$enable_debug" = xyes])
134
135 dnl Enable type modules
136 AC_ARG_ENABLE([settype_modules],
137                   AS_HELP_STRING([--enable-settype-modules],
138                   [Enable set type modules support]),
139                   [enable_settype_modules="$enableval"],
140                   [enable_settype_modules="no"])
141
142 AC_ARG_WITH([settype_modules_list],
143                 AS_HELP_STRING([--with-settype-modules-list="mod1 mod2 ..."],
144                                [List of dynamic loading modules, ignored if settype-modules is disabled. It could be "all" to build all available settypes as modules]),
145                                [SETTYPE_MODLIST_RAW="$withval";])
146
147 SETTYPE_MODLIST=
148 if test "x$enable_settype_modules" = "xyes"; then
149         for mod in $SETTYPE_MODLIST_RAW; do
150                 if echo $mod | grep "all"; then
151                         m="${mod}"
152                 else
153                         if echo $mod | grep "ipset_"; then
154                                 m="${mod}.c"
155                         else
156                                 m="ipset_${mod}.c"
157                         fi
158                 fi
159
160                 SETTYPE_MODLIST="${SETTYPE_MODLIST} $m"
161         done
162
163         AC_MSG_RESULT([checking for configuration with dynamic loading modules... $SETTYPE_MODLIST_RAW])
164 fi
165 AC_SUBST(SETTYPE_MODLIST)
166
167 AM_CONDITIONAL([ENABLE_SETTYPE_MODULES], [test "x$enable_settype_modules" = xyes])
168
169 AM_CONDITIONAL([ENABLE_STATIC], [test "x$enable_static" = xyes])
170 AM_CONDITIONAL([ENABLE_SHARED], [test "x$enable_shared" = xyes])
171
172 dnl Checks for programs
173 : ${CFLAGS=""}
174
175 AC_PROG_CC
176 AM_PROG_CC_C_O
177 AC_PROG_LIBTOOL
178 AC_PROG_INSTALL
179 AC_PROG_LN_S
180
181 dnl Checks for libraries
182 PKG_CHECK_MODULES([libmnl], [libmnl >= 1])
183
184 dnl Checks for header files
185
186 dnl Checks for declarations
187 AC_CHECK_DECLS([NLA_F_NESTED, NLA_F_NET_BYTEORDER, NLA_TYPE_MASK],,
188                 [AC_MSG_ERROR([System kernel header files are older than 2.6.24, use CFLAGS for non-default location])],
189                 [#include <sys/socket.h>
190 #include <linux/netlink.h>])
191
192 dnl Checks for typedefs, structures
193 AC_CHECK_TYPES([union nf_inet_addr],,,[#include <linux/types.h>
194 #include <netinet/in.h>
195 #include <linux/netfilter.h>])
196
197 dnl Checks for functions
198 AC_CHECK_FUNCS(gethostbyname2)
199
200 if test "$BUILDKMOD" == "yes"
201 then
202 dnl Check kernel incompatibilities... Ugly like hell
203 AC_MSG_CHECKING([kernel source for struct xt_action_param])
204 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
205    $GREP -q 'struct xt_action_param' $ksourcedir/include/linux/netfilter/x_tables.h; then
206         AC_MSG_RESULT(yes)
207         AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, define)
208 else
209         AC_MSG_RESULT(no)
210         AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, undef)
211 fi
212
213 AC_MSG_CHECKING([kernel source for vzalloc])
214 if test -f $ksourcedir/include/linux/vmalloc.h && \
215    $GREP -q 'vzalloc' $ksourcedir/include/linux/vmalloc.h; then
216         AC_MSG_RESULT(yes)
217         AC_SUBST(HAVE_VZALLOC, define)
218 else
219         AC_MSG_RESULT(no)
220         AC_SUBST(HAVE_VZALLOC, undef)
221 fi
222
223 AC_MSG_CHECKING([kernel source for ether_addr_equal])
224 if test -f $ksourcedir/include/linux/etherdevice.h && \
225    $GREP -q 'ether_addr_equal' $ksourcedir/include/linux/etherdevice.h; then
226         AC_MSG_RESULT(yes)
227         AC_SUBST(HAVE_ETHER_ADDR_EQUAL, define)
228 else
229         AC_MSG_RESULT(no)
230         AC_SUBST(HAVE_ETHER_ADDR_EQUAL, undef)
231 fi
232
233 AC_MSG_CHECKING([kernel source for is_zero_ether_addr])
234 if test -f $ksourcedir/include/linux/etherdevice.h && \
235    $GREP -q 'is_zero_ether_addr' $ksourcedir/include/linux/etherdevice.h; then
236         AC_MSG_RESULT(yes)
237         AC_SUBST(HAVE_IS_ZERO_ETHER_ADDR, define)
238 else
239         AC_MSG_RESULT(no)
240         AC_SUBST(HAVE_IS_ZERO_ETHER_ADDR, undef)
241 fi
242
243 AC_MSG_CHECKING([kernel source for nla_put_be16])
244 if test -f $ksourcedir/include/net/netlink.h && \
245    $GREP -q 'nla_put_be16' $ksourcedir/include/net/netlink.h; then
246         AC_MSG_RESULT(yes)
247         AC_SUBST(HAVE_NLA_PUT_BE16, define)
248 else
249         AC_MSG_RESULT(no)
250         AC_SUBST(HAVE_NLA_PUT_BE16, undef)
251 fi
252
253 AC_MSG_CHECKING([kernel source for nla_put_be64])
254 if test -f $ksourcedir/include/net/netlink.h && \
255    $GREP -q 'nla_put_be64' $ksourcedir/include/net/netlink.h; then
256         AC_MSG_RESULT(yes)
257         AC_SUBST(HAVE_NLA_PUT_BE64, define)
258 else
259         AC_MSG_RESULT(no)
260         AC_SUBST(HAVE_NLA_PUT_BE64, undef)
261 fi
262
263 AC_MSG_CHECKING([kernel source for nla_put_64bit])
264 if test -f $ksourcedir/include/net/netlink.h && \
265    $GREP -q 'nla_put_64bit' $ksourcedir/include/net/netlink.h; then
266         AC_MSG_RESULT(yes)
267         AC_SUBST(HAVE_NLA_PUT_64BIT, define)
268 else
269         AC_MSG_RESULT(no)
270         AC_SUBST(HAVE_NLA_PUT_64BIT, undef)
271 fi
272
273 AC_MSG_CHECKING([kernel source for portid in nl_info])
274 if test -f $ksourcedir/include/linux/netlink.h && \
275    $AWK '/^struct netlink_skb_parms/ {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'portid;'; then
276         AC_MSG_RESULT(yes)
277         AC_SUBST(HAVE_NL_INFO_PORTID, define)
278 else
279         AC_MSG_RESULT(no)
280         AC_SUBST(HAVE_NL_INFO_PORTID, undef)
281 fi
282
283 AC_MSG_CHECKING([kernel source for netlink_dump_start args])
284 if test -f $ksourcedir/include/linux/netlink.h && \
285    $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'done.*;'; then
286         AC_MSG_RESULT(5 args)
287         AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 5)
288 elif test -f $ksourcedir/include/linux/netlink.h && \
289    $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'min_dump_alloc.*;'; then
290         AC_MSG_RESULT(6 args)
291         AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 6)
292 else
293         AC_MSG_RESULT(4 args)
294         AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 4)
295 fi
296
297 AC_MSG_CHECKING([kernel source for ns_capable])
298 if test -f $ksourcedir/include/linux/capability.h && \
299    $GREP -q 'ns_capable' $ksourcedir/include/linux/capability.h; then
300         AC_MSG_RESULT(yes)
301         AC_SUBST(HAVE_NS_CAPABLE, define)
302 else
303         AC_MSG_RESULT(no)
304         AC_SUBST(HAVE_NS_CAPABLE, undef)
305 fi
306
307 AC_MSG_CHECKING([kernel source for nfnl_lock per subsys])
308 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
309    $GREP -q 'nfnl_lock.* subsys_id' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
310         AC_MSG_RESULT(yes)
311         AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, define)
312 else
313         AC_MSG_RESULT(no)
314         AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, undef)
315 fi
316
317 AC_MSG_CHECKING([kernel source for export.h])
318 if test -f $ksourcedir/include/linux/export.h; then
319         AC_MSG_RESULT(yes)
320         AC_SUBST(HAVE_EXPORT_H, define)
321 else
322         AC_MSG_RESULT(no)
323         AC_SUBST(HAVE_EXPORT_H, undef)
324 fi
325
326 AC_MSG_CHECKING([kernel source for ipv6_skip_exthdr args])
327 if test -f $ksourcedir/include/net/ipv6.h && \
328    $AWK '/ipv6_skip_exthdr/ {getline; print}' $ksourcedir/include/net/ipv6.h | $GREP -q 'frag_offp'; then
329         AC_MSG_RESULT(4 args)
330         AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 4)
331 else
332         AC_MSG_RESULT(3 args)
333         AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 3)
334 fi
335
336 AC_MSG_CHECKING([kernel source for bool checkentry function prototype])
337 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
338    $GREP -q 'bool .\*checkentry.' $ksourcedir/include/linux/netfilter/x_tables.h; then
339         AC_MSG_RESULT(yes)
340         AC_SUBST(HAVE_CHECKENTRY_BOOL, define)
341 else
342         AC_MSG_RESULT(no)
343         AC_SUBST(HAVE_CHECKENTRY_BOOL, undef)
344 fi
345
346 AC_MSG_CHECKING([kernel source for old struct xt_target_param])
347 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
348    $GREP -q '^struct xt_target_param ' $ksourcedir/include/linux/netfilter/x_tables.h; then
349         AC_MSG_RESULT(yes)
350         AC_SUBST(HAVE_XT_TARGET_PARAM, define)
351 else
352         AC_MSG_RESULT(no)
353         AC_SUBST(HAVE_XT_TARGET_PARAM, undef)
354 fi
355
356 AC_MSG_CHECKING([kernel source for id in struct pernet_operations])
357 if test -f $ksourcedir/include/net/net_namespace.h && \
358    $AWK '/struct pernet_operations/ {for(i=1; i<=6; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'int \*id;'; then
359         AC_MSG_RESULT(yes)
360         AC_SUBST(HAVE_NET_OPS_ID, define)
361 else
362         AC_MSG_RESULT(no)
363         AC_SUBST(HAVE_NET_OPS_ID, undef)
364 fi
365
366 AC_MSG_CHECKING([kernel source for user_ns in struct net])
367 if test -f $ksourcedir/include/net/net_namespace.h && \
368    $AWK '/^struct net \{/ {for(i=1; i<=20; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'user_ns'; then
369         AC_MSG_RESULT(yes)
370         AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, define)
371 else
372         AC_MSG_RESULT(no)
373         AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, undef)
374 fi
375
376 AC_MSG_CHECKING([kernel source for rbtree_postorder_for_each_entry_safe])
377 if test -f $ksourcedir/include/linux/rbtree.h && \
378    $GREP -q 'rbtree_postorder_for_each_entry_safe' $ksourcedir/include/linux/rbtree.h; then
379         AC_MSG_RESULT(yes)
380         AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, define)
381 else
382         AC_MSG_RESULT(no)
383         AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, undef)
384 fi
385
386 AC_MSG_CHECKING([kernel source for kvcalloc])
387 if test -f $ksourcedir/include/linux/mm.h && \
388    $GREP -q 'kvcalloc' $ksourcedir/include/linux/mm.h; then
389         AC_MSG_RESULT(yes)
390         AC_SUBST(HAVE_KVCALLOC, define)
391 else
392         AC_MSG_RESULT(no)
393         AC_SUBST(HAVE_KVCALLOC, undef)
394 fi
395
396 AC_MSG_CHECKING([kernel source for kvfree])
397 if test -f $ksourcedir/include/linux/mm.h && \
398    $GREP -q 'kvfree' $ksourcedir/include/linux/mm.h; then
399         AC_MSG_RESULT(yes)
400         AC_SUBST(HAVE_KVFREE, define)
401 else
402         AC_MSG_RESULT(no)
403         AC_SUBST(HAVE_KVFREE, undef)
404 fi
405
406 AC_MSG_CHECKING([kernel source for struct net in struct xt_mtchk_param])
407 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
408    $AWK '/^struct xt_mtchk_param / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/x_tables.h | \
409    $GREP -q 'struct net '; then
410         AC_MSG_RESULT(yes)
411         AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, define)
412 else
413         AC_MSG_RESULT(no)
414         AC_SUBST(HAVE_XT_MTCHK_PARAM_STRUCT_NET, undef)
415 fi
416
417 AC_MSG_CHECKING([kernel source for struct net in the change function of tcf_ematch_ops])
418 if test -f $ksourcedir/include/net/pkt_cls.h && \
419    $AWK '/^struct tcf_ematch_ops / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
420    $GREP -q '\*change..struct net \*net'; then
421         AC_MSG_RESULT(yes)
422         AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, define)
423 else
424         AC_MSG_RESULT(no)
425         AC_SUBST(HAVE_TCF_EMATCH_OPS_CHANGE_ARG_NET, undef)
426 fi
427
428 AC_MSG_CHECKING([kernel source for struct net in struct tcf_ematch])
429 if test -f $ksourcedir/include/net/pkt_cls.h && \
430    $AWK '/^struct tcf_ematch / {for(i=1; i<=7; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
431    $GREP -q 'struct net'; then
432         AC_MSG_RESULT(yes)
433         AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, define)
434 else
435         AC_MSG_RESULT(no)
436         AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, undef)
437 fi
438
439 AC_MSG_CHECKING([kernel source for list_last_entry])
440 if test -f $ksourcedir/include/linux/list.h && \
441    $GREP -q 'list_last_entry' $ksourcedir/include/linux/list.h; then
442         AC_MSG_RESULT(yes)
443         AC_SUBST(HAVE_LIST_LAST_ENTRY, define)
444 else
445         AC_MSG_RESULT(no)
446         AC_SUBST(HAVE_LIST_LAST_ENTRY, undef)
447 fi
448
449 AC_MSG_CHECKING([kernel source for list_next_entry])
450 if test -f $ksourcedir/include/linux/list.h && \
451    $GREP -q 'list_next_entry' $ksourcedir/include/linux/list.h; then
452         AC_MSG_RESULT(yes)
453         AC_SUBST(HAVE_LIST_NEXT_ENTRY, define)
454 else
455         AC_MSG_RESULT(no)
456         AC_SUBST(HAVE_LIST_NEXT_ENTRY, undef)
457 fi
458
459 AC_MSG_CHECKING([kernel source for ether_addr_copy])
460 if test -f $ksourcedir/include/linux/etherdevice.h && \
461    $GREP -q 'ether_addr_copy' $ksourcedir/include/linux/etherdevice.h; then
462         AC_MSG_RESULT(yes)
463         AC_SUBST(HAVE_ETHER_ADDR_COPY, define)
464 else
465         AC_MSG_RESULT(no)
466         AC_SUBST(HAVE_ETHER_ADDR_COPY, undef)
467 fi
468
469 AC_MSG_CHECKING([kernel source for nf_bridge_get_physindev])
470 if test -f $ksourcedir/include/linux/netfilter_bridge.h && \
471    $GREP -q 'nf_bridge_get_physindev' $ksourcedir/include/linux/netfilter_bridge.h; then
472         AC_MSG_RESULT(yes)
473         AC_SUBST(HAVE_NF_BRIDGE_GET_PHYSDEV, define)
474 else
475         AC_MSG_RESULT(no)
476         AC_SUBST(HAVE_NF_BRIDGE_GET_PHYSDEV, undef)
477 fi
478
479 AC_MSG_CHECKING([kernel source for nla_put_in_addr])
480 if test -f $ksourcedir/include/net/netlink.h && \
481    $GREP -q 'nla_put_in_add' $ksourcedir/include/net/netlink.h; then
482         AC_MSG_RESULT(yes)
483         AC_SUBST(HAVE_NLA_PUT_IN_ADDR, define)
484 else
485         AC_MSG_RESULT(no)
486         AC_SUBST(HAVE_NLA_PUT_IN_ADDR, undef)
487 fi
488
489 AC_MSG_CHECKING([kernel source for struct net in struct nfnl_callback])
490 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
491    $AWK '/^struct nfnl_callback / {for(i=1; i<=3; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/nfnetlink.h | \
492    $GREP -q 'struct net'; then
493         AC_MSG_RESULT(yes)
494         AC_SUBST(HAVE_NET_IN_NFNL_CALLBACK_FN, define)
495 else
496         AC_MSG_RESULT(no)
497         AC_SUBST(HAVE_NET_IN_NFNL_CALLBACK_FN, undef)
498 fi
499
500 AC_MSG_CHECKING([kernel source for EXPORT_SYMBOL_GPL in module.h])
501 if test -f $ksourcedir/include/linux/module.h && \
502    $GREP -q 'EXPORT_SYMBOL_GPL' $ksourcedir/include/linux/module.h; then
503         AC_MSG_RESULT(yes)
504         AC_SUBST(HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H, define)
505 else
506         AC_MSG_RESULT(no)
507         AC_SUBST(HAVE_EXPORT_SYMBOL_GPL_IN_MODULE_H, undef)
508 fi
509
510 AC_MSG_CHECKING([kernel source for tc_skb_protocol in pkt_sched.h])
511 if test -f $ksourcedir/include/net/pkt_sched.h && \
512    $GREP -q 'tc_skb_protocol' $ksourcedir/include/net/pkt_sched.h; then
513         AC_MSG_RESULT(yes)
514         AC_SUBST(HAVE_TC_SKB_PROTOCOL, define)
515 else
516         AC_MSG_RESULT(no)
517         AC_SUBST(HAVE_TC_SKB_PROTOCOL, undef)
518 fi
519
520 AC_MSG_CHECKING([kernel source for struct net in struct xt_action_param])
521 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
522    $AWK '/^struct xt_action_param / {for(i=1; i<=8; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/x_tables.h | \
523    $GREP -q 'struct net '; then
524         AC_MSG_RESULT(yes)
525         AC_SUBST(HAVE_NET_IN_XT_ACTION_PARAM, define)
526 else
527         AC_MSG_RESULT(no)
528         AC_SUBST(HAVE_NET_IN_XT_ACTION_PARAM, undef)
529 fi
530
531 AC_MSG_CHECKING([kernel source for struct nf_hook_state in struct xt_action_param])
532 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
533    $AWK '/^struct xt_action_param / {for(i=1; i<=10; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/x_tables.h | \
534    $GREP -q 'struct nf_hook_state '; then
535         AC_MSG_RESULT(yes)
536         AC_SUBST(HAVE_STATE_IN_XT_ACTION_PARAM, define)
537 else
538         AC_MSG_RESULT(no)
539         AC_SUBST(HAVE_STATE_IN_XT_ACTION_PARAM, undef)
540 fi
541
542 AC_MSG_CHECKING([kernel source for xt_family() in x_tables.h])
543 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
544    $GREP -q 'xt_family' $ksourcedir/include/linux/netfilter/x_tables.h; then
545         AC_MSG_RESULT(yes)
546         AC_SUBST(HAVE_XT_FAMILY, define)
547 else
548         AC_MSG_RESULT(no)
549         AC_SUBST(HAVE_XT_FAMILY, undef)
550 fi
551
552 AC_MSG_CHECKING([kernel source for xt_net() in x_tables.h])
553 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
554    $GREP -q 'xt_net' $ksourcedir/include/linux/netfilter/x_tables.h; then
555         AC_MSG_RESULT(yes)
556         AC_SUBST(HAVE_XT_NET, define)
557 else
558         AC_MSG_RESULT(no)
559         AC_SUBST(HAVE_XT_NET, undef)
560 fi
561
562 AC_MSG_CHECKING([kernel source for nfnl_msg_type() in nfnetlink.h])
563 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
564    $GREP -q 'nfnl_msg_type' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
565         AC_MSG_RESULT(yes)
566         AC_SUBST(HAVE_NFNL_MSG_TYPE, define)
567 else
568         AC_MSG_RESULT(no)
569         AC_SUBST(HAVE_NFNL_MSG_TYPE, undef)
570 fi
571
572 AC_MSG_CHECKING([kernel source for netlink extended ACK])
573 if test -f $ksourcedir/include/linux/netlink.h && \
574    $AWK '/^extern void netlink_ack/ {for(i=1; i<=2; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'const struct netlink_ext_ack'; then
575         AC_MSG_RESULT(yes)
576         AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, define)
577 else
578         AC_MSG_RESULT(no)
579         AC_SUBST(HAVE_NETLINK_EXTENDED_ACK, undef)
580 fi
581
582 AC_MSG_CHECKING([kernel source for passing extended ACK struct to parsing functions])
583 if test -f $ksourcedir/include/net/netlink.h && \
584    $AWK '/^static inline int nla_parse_nested/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/net/netlink.h | $GREP -q 'struct netlink_ext_ack'; then
585         AC_MSG_RESULT(yes)
586         AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_PARSERS, define)
587 else
588         AC_MSG_RESULT(no)
589         AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_PARSERS, undef)
590 fi
591
592 AC_MSG_CHECKING([kernel source for passing extended ACK struct to callback functions])
593 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
594    $AWK '/^struct nfnl_callback / {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netfilter/nfnetlink.h | $GREP -q 'struct netlink_ext_ack'; then
595         AC_MSG_RESULT(yes)
596         AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_CALLBACKS, define)
597 else
598         AC_MSG_RESULT(no)
599         AC_SUBST(HAVE_PASSING_EXTENDED_ACK_TO_CALLBACKS, undef)
600 fi
601
602 AC_MSG_CHECKING([kernel source for no typedef sctp_sctphdr_t])
603 if test -f $ksourcedir/include/linux/sctp.h && \
604    $GREP -q '^typedef struct sctphdr' $ksourcedir/include/linux/sctp.h; then
605         AC_MSG_RESULT(yes)
606         AC_SUBST(HAVE_TYPEDEF_SCTP_SCTPHDR_T, define)
607 else
608         AC_MSG_RESULT(no)
609         AC_SUBST(HAVE_TYPEDEF_SCTP_SCTPHDR_T, undef)
610 fi
611
612 AC_MSG_CHECKING([kernel source for timer_setup in timer.h])
613 if test -f $ksourcedir/include/linux/timer.h && \
614    $GREP -q ' timer_setup' $ksourcedir/include/linux/timer.h; then
615         AC_MSG_RESULT(yes)
616         AC_SUBST(HAVE_TIMER_SETUP, define)
617 else
618         AC_MSG_RESULT(no)
619         AC_SUBST(HAVE_TIMER_SETUP, undef)
620 fi
621
622 AC_MSG_CHECKING([kernel source for lockdep_nfnl_is_held() in nfnetlink.h])
623 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
624    $GREP -q ' lockdep_nfnl_is_held' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
625         AC_MSG_RESULT(yes)
626         AC_SUBST(HAVE_LOCKDEP_NFNL_IS_HELD, define)
627 else
628         AC_MSG_RESULT(no)
629         AC_SUBST(HAVE_LOCKDEP_NFNL_IS_HELD, undef)
630 fi
631
632 AC_MSG_CHECKING([kernel source for struct net_generic])
633 if test -f $ksourcedir/include/net/netns/generic.h && \
634    $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
635         AC_MSG_RESULT(yes)
636 else
637         AC_MSG_RESULT(no)
638         AC_MSG_ERROR([Netns support is required in the Linux kernel tree])
639 fi
640 fi
641
642 dnl Checks for compiler characteristics.
643 dnl Check extra warning flags except
644 dnl     -Wconversion            -> we need it
645 dnl     -Wunreachable-code      -> fails with ntoh*
646 dnl     -Wpointer-arith         -> limbnl uses it
647 dnl     -Wsign-conversion       -> libmnl
648 if test "x$enable_debug" = "xyes"
649 then
650 AX_CFLAGS_GCC_OPTION(-Waggregate-return)
651 AX_CFLAGS_GCC_OPTION(-Wbad-function-cast)
652 AX_CFLAGS_GCC_OPTION(-Wcast-align)
653 AX_CFLAGS_GCC_OPTION(-Wcast-qual)
654 AX_CFLAGS_GCC_OPTION(-Werror)
655 AX_CFLAGS_GCC_OPTION(-Wextra)
656 AX_CFLAGS_GCC_OPTION(-Wfloat-equal)
657 AX_CFLAGS_GCC_OPTION(-Wformat=2)
658 AX_CFLAGS_GCC_OPTION(-Wjump-misses-init)
659 AX_CFLAGS_GCC_OPTION(-Winit-self)
660 AX_CFLAGS_GCC_OPTION(-Winline)
661 AX_CFLAGS_GCC_OPTION(-Wlogical-op)
662 AX_CFLAGS_GCC_OPTION(-Wmissing-declarations)
663 AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute)
664 AX_CFLAGS_GCC_OPTION(-Wmissing-prototypes)
665 AX_CFLAGS_GCC_OPTION(-Wnested-externs)
666 AX_CFLAGS_GCC_OPTION(-Wno-missing-field-initializers)
667 AX_CFLAGS_GCC_OPTION(-Wold-style-definition)
668 AX_CFLAGS_GCC_OPTION(-Woverlength-strings)
669 AX_CFLAGS_GCC_OPTION(-Wpacked)
670 AX_CFLAGS_GCC_OPTION(-Wredundant-decls)
671 AX_CFLAGS_GCC_OPTION(-Wrwrite-strings)
672 AX_CFLAGS_GCC_OPTION(-Wshadow)
673 AX_CFLAGS_GCC_OPTION(-Wsign-compare)
674 AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes)
675 AX_CFLAGS_GCC_OPTION(-Wswitch-default)
676 AX_CFLAGS_GCC_OPTION(-Wundef)
677 AX_CFLAGS_GCC_OPTION(-Wuninitialized)
678 AX_CFLAGS_GCC_OPTION(-Wunused)
679 AX_CFLAGS_GCC_OPTION(-Wvla)
680 AX_CFLAGS_GCC_OPTION(-Wwrite-strings)
681 fi
682 dnl Checks for library functions.
683
684 dnl Generate output
685 AC_CONFIG_FILES([Makefile include/libipset/Makefile
686         lib/Makefile lib/libipset.pc src/Makefile utils/Makefile
687         kernel/include/linux/netfilter/ipset/ip_set_compat.h])
688 AC_OUTPUT
689
690 dnl Summary
691 AC_MSG_RESULT([])
692 AC_MSG_RESULT([$PACKAGE userspace tool configuration:])
693 if test "x$bashcompdir" != "x"; then
694         AC_MSG_RESULT([    Bash completion directory: ${bashcompdir}])
695 fi
696 if test "x$enable_settype_modules" != "xyes"; then
697         AC_MSG_RESULT([    Dynamic module loading: disabled])
698 else
699         AC_MSG_RESULT([    Dynamic module loading: enabled])
700 fi
701 IPSET_ALL_MODULES="`ls ${srcdir}/lib/ipset_*.c|sed -e 's/^.*lib\///' -e 's/\.c$//'`"
702 AC_MSG_RESULT([    Static modules:])
703 if test "x$SETTYPE_MODLIST" = "x"; then
704         for mod in $IPSET_ALL_MODULES; do
705                 AC_MSG_RESULT([        ${mod}])
706         done
707         AC_MSG_RESULT([    Dynamic modules:])
708 elif echo $SETTYPE_MODLIST | grep "all" >/dev/null; then
709         AC_MSG_RESULT([    Dynamic modules:])
710         for mod in $IPSET_ALL_MODULES; do
711                 AC_MSG_RESULT([        ${mod}])
712         done
713 else
714         for mod in $IPSET_ALL_MODULES; do
715                 if echo $SETTYPE_MODLIST | grep -w "$mod" >/dev/null; then
716                         :
717                 else
718                         AC_MSG_RESULT([        ${mod}])
719                 fi
720         done
721         AC_MSG_RESULT([    Dynamic modules:])
722         for mod in $IPSET_ALL_MODULES; do
723                 if echo $SETTYPE_MODLIST | grep -w "$mod" >/dev/null; then
724                         AC_MSG_RESULT([        ${mod}])
725                 fi
726         done
727 fi