]> git.ipfire.org Git - thirdparty/ipset.git/blob - configure.ac
ipset 6.21.1 released
[thirdparty/ipset.git] / configure.ac
1 dnl Boilerplate
2 AC_INIT([ipset], [6.21.1], [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 dnl Shortcut: Linux supported alone
16 case "$host" in
17 *-*-linux* | *-*-uclinux*) ;;
18 *) AC_MSG_ERROR([Linux systems supported exclusively!]);;
19 esac
20
21 dnl Optionnally disable building the kernel module
22 AC_ARG_WITH([kmod],
23 AS_HELP_STRING([--with-kmod=yes/no],
24 [Build the kernel module (default: yes)]),
25 [BUILDKMOD="$withval";],
26 [BUILDKMOD="yes";])
27 AM_CONDITIONAL(WITH_KMOD, test "$BUILDKMOD" == "yes")
28
29 dnl Additional arguments
30 dnl Kernel build directory or source tree
31 AC_ARG_WITH([kbuild],
32 AS_HELP_STRING([--with-kbuild=PATH],
33 [Path to kernel build directory]),
34 [KBUILDDIR="$withval";])
35 AC_ARG_WITH([ksource],
36 AS_HELP_STRING([--with-ksource=PATH],
37 [Path to kernel source directory, if not the same as the kernel build directory]),
38 [KSOURCEDIR="$withval";])
39 AM_CONDITIONAL(WITH_KBUILDDIR, test "$KBUILDDIR" != "")
40 AC_SUBST(KBUILDDIR)
41
42 if test "$BUILDKMOD" == "yes"
43 then
44 dnl Sigh: check kernel version dependencies
45 if test "$KBUILDDIR" != ""
46 then
47 kbuilddir="$KBUILDDIR"
48 else
49 kbuilddir="/lib/modules/`uname -r`/build"
50 fi
51
52 if test -n "$KSOURCEDIR"; then
53 ksourcedir="$KSOURCEDIR"
54 elif test -e "$kbuilddir/include/linux/netfilter/nfnetlink.h"; then
55 ksourcedir="$kbuilddir"
56 else
57 ksourcedir="/lib/modules/$(uname -r)/source"
58 fi
59 if test ! -e "$ksourcedir/include/linux/netfilter/nfnetlink.h"
60 then
61 AC_MSG_ERROR([Invalid kernel source directory $ksourcedir])
62 fi
63
64 if test ! -e "$kbuilddir/.config"
65 then
66 AC_MSG_ERROR([The kernel build directory $kbuilddir is not configured])
67 fi
68
69 AC_PROG_GREP
70 AC_PROG_AWK
71
72 if ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/linux/netfilter/nfnetlink.h" && \
73 ! $GREP -q "NFNL_SUBSYS_IPSET" "$ksourcedir/include/uapi/linux/netfilter/nfnetlink.h";
74 then
75 AC_MSG_ERROR([The kernel source directory $ksourcedir is not patched with netlink.patch to support ipset])
76 fi
77 fi
78
79 dnl Maximal number of sets supported by the kernel, default 256
80 AC_ARG_WITH([maxsets],
81 AS_HELP_STRING([--with-maxsets=256],
82 [Maximal numer of sets supported by the kernel]),
83 [MAXSETS="$withval";])
84 AM_CONDITIONAL(WITH_MAXSETS, test "$MAXSETS" != "")
85 AC_SUBST(MAXSETS)
86
87 dnl Verbose compiling
88 AC_ARG_ENABLE([verbose],
89 AS_HELP_STRING([--enable-verbose],
90 [Enable verbose mode at compiling/linking.]),
91 [case "${enableval}" in
92 yes) enable_verbose=yes ;;
93 no) enable_verbose=no ;;
94 *) AC_MSG_ERROR([bad value ${enableval} for --enable-verbose]) ;;
95 esac], [enable_verbose=no])
96
97 AC_ARG_ENABLE([debug],
98 AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
99 [], [enable_debug=no])
100 AS_IF([test "x$enable_debug" = "xyes"], [
101 AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
102 ])
103 AM_CONDITIONAL([ENABLE_DEBUG], [test "x$enable_debug" = xyes])
104
105 dnl Enable type modules
106 AC_ARG_ENABLE([settype_modules],
107 AS_HELP_STRING([--enable-settype-modules],
108 [Enable set type modules support]),
109 [enable_settype_modules="$enableval"],
110 [enable_settype_modules="no"])
111
112 AC_ARG_WITH([settype_modules_list],
113 AS_HELP_STRING([--with-settype-modules-list="mod1 mod2 ..."],
114 [List of dynamic loading modules, ignored if settype-modules is disabled. It could be "all" to build all available settypes as modules]),
115 [SETTYPE_MODLIST_RAW="$withval";])
116
117 SETTYPE_MODLIST=
118 if test "x$enable_settype_modules" = "xyes"; then
119 for mod in $SETTYPE_MODLIST_RAW; do
120 if echo $mod | grep "all"; then
121 m="${mod}"
122 else
123 if echo $mod | grep "ipset_"; then
124 m="${mod}.c"
125 else
126 m="ipset_${mod}.c"
127 fi
128 fi
129
130 SETTYPE_MODLIST="${SETTYPE_MODLIST} $m"
131 done
132
133 AC_MSG_RESULT([checking for configuration with dynamic loading modules... $SETTYPE_MODLIST_RAW])
134 fi
135 AC_SUBST(SETTYPE_MODLIST)
136
137 AM_CONDITIONAL([ENABLE_SETTYPE_MODULES], [test "x$enable_settype_modules" = xyes])
138
139 AM_CONDITIONAL([ENABLE_STATIC], [test "x$enable_static" = xyes])
140 AM_CONDITIONAL([ENABLE_SHARED], [test "x$enable_shared" = xyes])
141
142 dnl Checks for programs
143 : ${CFLAGS=""}
144
145 AC_PROG_CC
146 AM_PROG_CC_C_O
147 AC_PROG_LIBTOOL
148 AC_PROG_INSTALL
149 AC_PROG_LN_S
150
151 dnl Checks for libraries
152 PKG_CHECK_MODULES([libmnl], [libmnl >= 1])
153
154 dnl Checks for header files
155
156 dnl Checks for declarations
157 AC_CHECK_DECLS([NLA_F_NESTED, NLA_F_NET_BYTEORDER, NLA_TYPE_MASK],,
158 [AC_MSG_ERROR([System kernel header files are older than 2.6.24, use CFLAGS for non-default location])],
159 [#include <sys/socket.h>
160 #include <linux/netlink.h>])
161
162 dnl Checks for typedefs, structures
163 AC_CHECK_TYPES([union nf_inet_addr],,,[#include <linux/types.h>
164 #include <netinet/in.h>
165 #include <linux/netfilter.h>])
166
167 dnl Checks for functions
168 AC_CHECK_FUNCS(gethostbyname2)
169
170 if test "$BUILDKMOD" == "yes"
171 then
172 dnl Check kernel incompatibilities... Ugly like hell
173 AC_MSG_CHECKING([kernel source for struct xt_action_param])
174 if test -f $ksourcedir/include/linux/netfilter/x_tables.h && \
175 $GREP -q 'struct xt_action_param' $ksourcedir/include/linux/netfilter/x_tables.h; then
176 AC_MSG_RESULT(yes)
177 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, define)
178 else
179 AC_MSG_RESULT(no)
180 AC_SUBST(HAVE_STRUCT_XT_ACTION_PARAM, undef)
181 fi
182
183 AC_MSG_CHECKING([kernel source for vzalloc])
184 if test -f $ksourcedir/include/linux/vmalloc.h && \
185 $GREP -q 'vzalloc' $ksourcedir/include/linux/vmalloc.h; then
186 AC_MSG_RESULT(yes)
187 AC_SUBST(HAVE_VZALLOC, define)
188 else
189 AC_MSG_RESULT(no)
190 AC_SUBST(HAVE_VZALLOC, undef)
191 fi
192
193 AC_MSG_CHECKING([kernel source for ether_addr_equal])
194 if test -f $ksourcedir/include/linux/etherdevice.h && \
195 $GREP -q 'ether_addr_equal' $ksourcedir/include/linux/etherdevice.h; then
196 AC_MSG_RESULT(yes)
197 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, define)
198 else
199 AC_MSG_RESULT(no)
200 AC_SUBST(HAVE_ETHER_ADDR_EQUAL, undef)
201 fi
202
203 AC_MSG_CHECKING([kernel source for nla_put_be64])
204 if test -f $ksourcedir/include/net/netlink.h && \
205 $GREP -q 'nla_put_be64' $ksourcedir/include/net/netlink.h; then
206 AC_MSG_RESULT(yes)
207 AC_SUBST(HAVE_NLA_PUT_BE64, define)
208 else
209 AC_MSG_RESULT(no)
210 AC_SUBST(HAVE_NLA_PUT_BE64, undef)
211 fi
212
213 AC_MSG_CHECKING([kernel source for portid in nl_info])
214 if test -f $ksourcedir/include/linux/netlink.h && \
215 $AWK '/^struct netlink_skb_parms/ {for(i=1; i<=5; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'portid;'; then
216 AC_MSG_RESULT(yes)
217 AC_SUBST(HAVE_NL_INFO_PORTID, define)
218 else
219 AC_MSG_RESULT(no)
220 AC_SUBST(HAVE_NL_INFO_PORTID, undef)
221 fi
222
223 AC_MSG_CHECKING([kernel source for netlink_dump_start args])
224 if test -f $ksourcedir/include/linux/netlink.h && \
225 $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'done.*;'; then
226 AC_MSG_RESULT(5 args)
227 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 5)
228 elif test -f $ksourcedir/include/linux/netlink.h && \
229 $AWK '/netlink_dump_start/ {for(i=1; i<=4; i++) {getline; print}}' $ksourcedir/include/linux/netlink.h | $GREP -q 'min_dump_alloc.*;'; then
230 AC_MSG_RESULT(6 args)
231 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 6)
232 else
233 AC_MSG_RESULT(4 args)
234 AC_SUBST(HAVE_NETLINK_DUMP_START_ARGS, 4)
235 fi
236
237 AC_MSG_CHECKING([kernel source for ns_capable])
238 if test -f $ksourcedir/include/linux/capability.h && \
239 $GREP -q 'ns_capable' $ksourcedir/include/linux/capability.h; then
240 AC_MSG_RESULT(yes)
241 AC_SUBST(HAVE_NS_CAPABLE, define)
242 else
243 AC_MSG_RESULT(no)
244 AC_SUBST(HAVE_NS_CAPABLE, undef)
245 fi
246
247 AC_MSG_CHECKING([kernel source for nfnl_lock per subsys])
248 if test -f $ksourcedir/include/linux/netfilter/nfnetlink.h && \
249 $GREP -q 'nfnl_lock.* subsys_id' $ksourcedir/include/linux/netfilter/nfnetlink.h; then
250 AC_MSG_RESULT(yes)
251 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, define)
252 else
253 AC_MSG_RESULT(no)
254 AC_SUBST(HAVE_NFNL_LOCK_SUBSYS, undef)
255 fi
256
257 AC_MSG_CHECKING([kernel source for export.h])
258 if test -f $ksourcedir/include/linux/export.h; then
259 AC_MSG_RESULT(yes)
260 AC_SUBST(HAVE_EXPORT_H, define)
261 else
262 AC_MSG_RESULT(no)
263 AC_SUBST(HAVE_EXPORT_H, undef)
264 fi
265
266 AC_MSG_CHECKING([kernel source for ipv6_skip_exthdr args])
267 if test -f $ksourcedir/include/net/ipv6.h && \
268 $AWK '/ipv6_skip_exthdr/ {getline; print}' $ksourcedir/include/net/ipv6.h | $GREP -q 'frag_offp'; then
269 AC_MSG_RESULT(4 args)
270 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 4)
271 else
272 AC_MSG_RESULT(3 args)
273 AC_SUBST(HAVE_IPV6_SKIP_EXTHDR_ARGS, 3)
274 fi
275
276 AC_MSG_CHECKING([kernel source for bool checkentry function prototype])
277 if test -f $ksourcedir/net/netfilter/xt_state.c && \
278 $GREP -q 'bool state_mt_check' $ksourcedir/net/netfilter/xt_state.c; then
279 AC_MSG_RESULT(yes)
280 AC_SUBST(HAVE_CHECKENTRY_BOOL, define)
281 else
282 AC_MSG_RESULT(no)
283 AC_SUBST(HAVE_CHECKENTRY_BOOL, undef)
284 fi
285
286 AC_MSG_CHECKING([kernel source for old struct xt_target_param])
287 if test -f $ksourcedir/net/netfilter/xt_TCPMSS.c && \
288 $GREP -q 'const struct xt_target_param' $ksourcedir/net/netfilter/xt_TCPMSS.c; then
289 AC_MSG_RESULT(yes)
290 AC_SUBST(HAVE_XT_TARGET_PARAM, define)
291 else
292 AC_MSG_RESULT(no)
293 AC_SUBST(HAVE_XT_TARGET_PARAM, undef)
294 fi
295
296 AC_MSG_CHECKING([kernel source for id in struct pernet_operations])
297 if test -f $ksourcedir/include/net/net_namespace.h && \
298 $AWK '/struct pernet_operations/ {for(i=1; i<=6; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'int \*id;'; then
299 AC_MSG_RESULT(yes)
300 AC_SUBST(HAVE_NET_OPS_ID, define)
301 else
302 AC_MSG_RESULT(no)
303 AC_SUBST(HAVE_NET_OPS_ID, undef)
304 fi
305
306 AC_MSG_CHECKING([kernel source for user_ns in struct net])
307 if test -f $ksourcedir/include/net/net_namespace.h && \
308 $AWK '/^struct net \{/ {for(i=1; i<=20; i++) {getline; print}}' $ksourcedir/include/net/net_namespace.h | $GREP -q 'user_ns'; then
309 AC_MSG_RESULT(yes)
310 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, define)
311 else
312 AC_MSG_RESULT(no)
313 AC_SUBST(HAVE_USER_NS_IN_STRUCT_NET, undef)
314 fi
315
316 AC_MSG_CHECKING([kernel source for rbtree_postorder_for_each_entry_safe])
317 if test -f $ksourcedir/include/linux/rbtree.h && \
318 $GREP -q 'rbtree_postorder_for_each_entry_safe' $ksourcedir/include/linux/rbtree.h; then
319 AC_MSG_RESULT(yes)
320 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, define)
321 else
322 AC_MSG_RESULT(no)
323 AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, undef)
324 fi
325
326 AC_MSG_CHECKING([kernel source for struct net_generic])
327 if test -f $ksourcedir/include/net/netns/generic.h && \
328 $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then
329 AC_MSG_RESULT(yes)
330 else
331 AC_MSG_RESULT(no)
332 AC_MSG_ERROR([Netns support is required in the Linux kernel tree])
333 fi
334 fi
335
336 dnl Checks for compiler characteristics.
337 dnl Check extra warning flags except
338 dnl -Wconversion -> we need it
339 dnl -Wunreachable-code -> fails with ntoh*
340 dnl -Wpointer-arith -> limbnl uses it
341 dnl -Wsign-conversion -> libmnl
342 if test "x$enable_debug" = "xyes"
343 then
344 AX_CFLAGS_GCC_OPTION(-Waggregate-return)
345 AX_CFLAGS_GCC_OPTION(-Wbad-function-cast)
346 AX_CFLAGS_GCC_OPTION(-Wcast-align)
347 AX_CFLAGS_GCC_OPTION(-Wcast-qual)
348 AX_CFLAGS_GCC_OPTION(-Werror)
349 AX_CFLAGS_GCC_OPTION(-Wextra)
350 AX_CFLAGS_GCC_OPTION(-Wfloat-equal)
351 AX_CFLAGS_GCC_OPTION(-Wformat=2)
352 AX_CFLAGS_GCC_OPTION(-Wjump-misses-init)
353 AX_CFLAGS_GCC_OPTION(-Winit-self)
354 AX_CFLAGS_GCC_OPTION(-Winline)
355 AX_CFLAGS_GCC_OPTION(-Wlogical-op)
356 AX_CFLAGS_GCC_OPTION(-Wmissing-declarations)
357 AX_CFLAGS_GCC_OPTION(-Wmissing-format-attribute)
358 AX_CFLAGS_GCC_OPTION(-Wmissing-prototypes)
359 AX_CFLAGS_GCC_OPTION(-Wnested-externs)
360 AX_CFLAGS_GCC_OPTION(-Wno-missing-field-initializers)
361 AX_CFLAGS_GCC_OPTION(-Wold-style-definition)
362 AX_CFLAGS_GCC_OPTION(-Woverlength-strings)
363 AX_CFLAGS_GCC_OPTION(-Wpacked)
364 AX_CFLAGS_GCC_OPTION(-Wredundant-decls)
365 AX_CFLAGS_GCC_OPTION(-Wrwrite-strings)
366 AX_CFLAGS_GCC_OPTION(-Wshadow)
367 AX_CFLAGS_GCC_OPTION(-Wsign-compare)
368 AX_CFLAGS_GCC_OPTION(-Wstrict-prototypes)
369 AX_CFLAGS_GCC_OPTION(-Wswitch-default)
370 AX_CFLAGS_GCC_OPTION(-Wundef)
371 AX_CFLAGS_GCC_OPTION(-Wuninitialized)
372 AX_CFLAGS_GCC_OPTION(-Wunused)
373 AX_CFLAGS_GCC_OPTION(-Wvla)
374 AX_CFLAGS_GCC_OPTION(-Wwrite-strings)
375 fi
376 dnl Checks for library functions.
377
378 dnl Generate output
379 AC_CONFIG_FILES([Makefile include/libipset/Makefile
380 lib/Makefile lib/libipset.pc src/Makefile
381 kernel/include/linux/netfilter/ipset/ip_set_compat.h])
382 AC_OUTPUT
383
384 dnl Summary
385 AC_MSG_RESULT([])
386 AC_MSG_RESULT([$PACKAGE userspace tool configuration:])
387 if test "x$enable_settype_modules" != "xyes"; then
388 AC_MSG_RESULT([ Dynamic module loading: disabled])
389 else
390 AC_MSG_RESULT([ Dynamic module loading: enabled])
391 fi
392 IPSET_ALL_MODULES="`ls ${srcdir}/lib/ipset_*.c|sed -e 's/^.*lib\///' -e 's/\.c$//'`"
393 AC_MSG_RESULT([ Static modules:])
394 if test "x$SETTYPE_MODLIST" = "x"; then
395 for mod in $IPSET_ALL_MODULES; do
396 AC_MSG_RESULT([ ${mod}])
397 done
398 AC_MSG_RESULT([ Dynamic modules:])
399 elif echo $SETTYPE_MODLIST | grep "all" >/dev/null; then
400 AC_MSG_RESULT([ Dynamic modules:])
401 for mod in $IPSET_ALL_MODULES; do
402 AC_MSG_RESULT([ ${mod}])
403 done
404 else
405 for mod in $IPSET_ALL_MODULES; do
406 if echo $SETTYPE_MODLIST | grep $mod >/dev/null; then
407 :
408 else
409 AC_MSG_RESULT([ ${mod}])
410 fi
411 done
412 AC_MSG_RESULT([ Dynamic modules:])
413 for mod in $IPSET_ALL_MODULES; do
414 if echo $SETTYPE_MODLIST | grep $mod >/dev/null; then
415 AC_MSG_RESULT([ ${mod}])
416 fi
417 done
418 fi