configure.ac revision 1.4 1 dnl -*- mode: m4 -*-
2 dnl Id: configure.ac,v 1.77 2006/07/20 19:19:27 manubsd Exp
3
4 AC_PREREQ(2.52)
5 AC_INIT(ipsec-tools, CVS)
6 AC_CONFIG_SRCDIR([configure.ac])
7 AM_CONFIG_HEADER(config.h)
8
9 AM_INIT_AUTOMAKE(dist-bzip2)
10
11 AC_ENABLE_SHARED(no)
12
13 AC_PROG_CC
14 AM_PROG_CC_STDC
15 AC_HEADER_STDC
16 AC_PROG_LIBTOOL
17 AC_PROG_YACC
18 AM_PROG_LEX
19 AC_SUBST(LEXLIB)
20 AC_PROG_EGREP
21
22 CFLAGS_ADD="$CFLAGS_ADD -Wall -Werror -Wno-unused"
23
24 case $host in
25 *netbsd*)
26 LDFLAGS="-Wl,-R/usr/pkg/lib $LDFLAGS"
27 ;;
28 *linux*)
29 LIBS="$LIBS -lresolv"
30 INSTALL_OPTS="-o bin -g bin"
31 INCLUDE_GLIBC="include-glibc"
32 RPM="rpm"
33 AC_SUBST(INSTALL_OPTS)
34 AC_SUBST(INCLUDE_GLIBC)
35 AC_SUBST(RPM)
36 ;;
37 *darwin*)
38 LIBS="$LIBS -lresolv"
39 ;;
40 esac
41
42 # Look up some IPsec-related headers
43 AC_CHECK_HEADER(net/pfkeyv2.h, [have_net_pfkey=yes], [have_net_pfkey=no])
44 AC_CHECK_HEADER(netinet/ipsec.h, [have_netinet_ipsec=yes], [have_netinet_ipsec=no])
45 AC_CHECK_HEADER(netinet6/ipsec.h, [have_netinet6_ipsec=yes], [have_netinet6_ipsec=no])
46
47 # NetBSD has <netinet6/ipsec.h> but not <netinet/ipsec.h>
48 if test "$have_netinet_ipsec$have_netinet6_ipsec" = noyes; then
49 have_netinet_ipsec=yes
50 AC_DEFINE(HAVE_NETINET6_IPSEC, [], [Use <netinet6/ipsec.h>])
51 fi
52
53 case "$host_os" in
54 *linux*)
55 AC_ARG_WITH(kernel-headers,
56 AC_HELP_STRING([--with-kernel-headers=/lib/modules/<uname>/build/include],
57 [where your Linux Kernel headers are installed]),
58 [ KERNEL_INCLUDE="$with_kernel_headers"
59 CONFIGURE_AMFLAGS="--with-kernel-headers=$with_kernel_headers"
60 AC_SUBST(CONFIGURE_AMFLAGS) ],
61 [ KERNEL_INCLUDE="/lib/modules/`uname -r`/build/include" ])
62
63 AC_CHECK_HEADER($KERNEL_INCLUDE/linux/pfkeyv2.h, ,
64 [ AC_CHECK_HEADER(/usr/src/linux/include/linux/pfkeyv2.h,
65 KERNEL_INCLUDE=/usr/src/linux/include ,
66 [ AC_MSG_ERROR([Unable to find linux-2.6 kernel headers. Aborting.]) ] ) ] )
67 AC_SUBST(KERNEL_INCLUDE)
68 # We need the configure script to run with correct kernel headers.
69 # However we don't want to point to kernel source tree in compile time,
70 # i.e. this will be removed from CPPFLAGS at the end of configure.
71 CPPFLAGS="-I$KERNEL_INCLUDE $CPPFLAGS"
72
73 AC_CHECK_MEMBER(struct sadb_x_policy.sadb_x_policy_priority,
74 [AC_DEFINE(HAVE_PFKEY_POLICY_PRIORITY, [],
75 [Are PF_KEY policy priorities supported?])], [],
76 [#include "$KERNEL_INCLUDE/linux/pfkeyv2.h"])
77
78 GLIBC_BUGS='-include ${top_srcdir}/src/include-glibc/glibc-bugs.h -I${top_srcdir}/src/include-glibc -I${top_builddir}/src/include-glibc'
79 GLIBC_BUGS_LOCAL="-include ${srcdir-.}/src/include-glibc/glibc-bugs.h -I${srcdir-.}/src/include-glibc -I./src/include-glibc"
80 CPPFLAGS="$GLIBC_BUGS_LOCAL $CPPFLAGS"
81 CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
82 AC_SUBST(GLIBC_BUGS)
83 ;;
84 *)
85 if test "$have_net_pfkey$have_netinet_ipsec" != yesyes; then
86 if test "$have_net_pfkey" = yes; then
87 AC_MSG_ERROR([Found net/pfkeyv2.h but not netinet/ipsec.h. Aborting.])
88 else
89 AC_MSG_ERROR([Found netinet/ipsec.h but not net/pfkeyv2.h. Aborting.])
90 fi
91 fi
92 ;;
93 esac
94
95 ### Some basic toolchain checks
96
97 # Checks for header files.
98 AC_HEADER_STDC
99 AC_HEADER_SYS_WAIT
100 AC_CHECK_HEADERS(limits.h sys/time.h unistd.h stdarg.h varargs.h)
101 AC_CHECK_HEADERS(shadow.h)
102
103 # Checks for typedefs, structures, and compiler characteristics.
104 AC_C_CONST
105 AC_TYPE_PID_T
106 AC_TYPE_SIZE_T
107 AC_HEADER_TIME
108 AC_STRUCT_TM
109
110 # Checks for library functions.
111 AC_FUNC_MEMCMP
112 AC_TYPE_SIGNAL
113 AC_FUNC_VPRINTF
114 AC_CHECK_FUNCS(gettimeofday select socket strerror strtol strtoul strlcpy strlcat)
115 AC_REPLACE_FUNCS(strdup)
116 RACOON_CHECK_VA_COPY
117
118 # Check if printf accepts "%z" type modifier for size_t argument
119 AC_MSG_CHECKING(if printf accepts %z)
120 saved_CFLAGS=$CFLAGS
121 CFLAGS="$CFLAGS -Wall -Werror"
122 AC_TRY_COMPILE([
123 #include <stdio.h>
124 ], [
125 printf("%zu\n", (size_t)-1);
126 ],
127 [AC_MSG_RESULT(yes)],
128 [AC_MSG_RESULT(no);
129 CFLAGS_ADD="$CFLAGS_ADD -Wno-format";
130 AC_DEFINE(BROKEN_PRINTF, [], [If printf doesn't support %zu.])
131 ])
132 CFLAGS=$saved_CFLAGS
133
134 # Can we use __func__ macro?
135 AC_MSG_CHECKING(if __func__ is available)
136 AC_TRY_COMPILE(
137 [#include <stdio.h>
138 ], [char *x = __func__;],
139 [AC_DEFINE([HAVE_FUNC_MACRO], [], [Have __func__ macro])
140 AC_MSG_RESULT(yes)],
141 [AC_MSG_RESULT(no)])
142
143 # Check if readline support is requested
144 AC_MSG_CHECKING(if readline support is requested)
145 AC_ARG_WITH(readline,
146 [ --with-readline support readline input (yes by default)],
147 [with_readline="$withval"], [with_readline="yes"])
148 AC_MSG_RESULT($with_readline)
149
150 # Is readline available?
151 if test $with_readline != "no"; then
152 AC_CHECK_HEADER([readline/readline.h],
153 [AC_CHECK_LIB(readline, readline, [
154 AC_DEFINE(HAVE_READLINE, [],
155 [Is readline available?])
156 LIBS="$LIBS -lreadline"
157 ], [])], [])
158 fi
159
160
161 AC_MSG_CHECKING(if --with-flex option is specified)
162 AC_ARG_WITH(flexdir,
163 [AC_HELP_STRING([--with-flex], [use directiory (default: no)])],
164 [flexdir="$withval"])
165 AC_MSG_RESULT(${flexdir-dirdefault})
166
167 if test "x$flexdir" != "x"; then
168 LIBS="$LIBS $flexdir/libfl.a"
169 fi
170
171 AC_MSG_CHECKING(if --with-flexlib option is specified)
172 AC_ARG_WITH(flexlib,
173 [ --with-flexlib=<LIB> specify flex library.],
174 [flexlib="$withval"])
175 AC_MSG_RESULT(${flexlib-default})
176
177 if test "x$flexlib" != "x"; then
178 LIBS="$LIBS $flexlib"
179 fi
180
181 # Check if a different OpenSSL directory was specified
182 AC_MSG_CHECKING(if --with-openssl option is specified)
183 AC_ARG_WITH(openssl, [ --with-openssl=DIR specify OpenSSL directory],
184 [crypto_dir=$withval])
185 AC_MSG_RESULT(${crypto_dir-default})
186
187 if test "x$crypto_dir" != "x"; then
188 LIBS="$LIBS -L${crypto_dir}/lib"
189 CPPFLAGS="-I${crypto_dir}/include $CPPLAGS"
190 fi
191 AC_MSG_CHECKING(openssl version)
192
193 AC_TRY_COMPILE(
194 [#include <openssl/opensslv.h>
195 ],
196 [#if OPENSSL_VERSION_NUMBER < 0x0090602fL
197 #error OpenSSL version is too old ...
198 #endif],
199 [AC_MSG_RESULT([ok])],
200 [AC_MSG_RESULT(too old)
201 AC_MSG_ERROR([OpenSSL version must be 0.9.6 or higher. Aborting.])
202 ])
203
204 AC_CHECK_HEADERS(openssl/engine.h)
205
206 # checking rijndael
207 AC_CHECK_HEADERS([openssl/aes.h], [],
208 [CRYPTOBJS="$CRYPTOBJS rijndael-api-fst.o rijndael-alg-fst.o"])
209
210 # checking sha2
211 AC_MSG_CHECKING(sha2 support)
212 AC_DEFINE([WITH_SHA2], [], [SHA2 support])
213 AC_MSG_RESULT(yes)
214 AC_CHECK_HEADER(openssl/sha2.h, [], [
215 AC_MSG_CHECKING(if sha2 is defined in openssl/sha.h)
216 AC_TRY_COMPILE([
217 #ifdef HAVE_SYS_TYPES_H
218 #include <sys/types.h>
219 #endif
220 #include <openssl/sha.h>
221 ], [
222 SHA256_CTX ctx;
223 ], [
224 AC_MSG_RESULT(yes)
225 AC_DEFINE([HAVE_SHA2_IN_SHA_H], [], [sha2 is defined in sha.h])
226 ], [AC_MSG_RESULT(no)
227 AC_LIBOBJ([sha2])
228 CRYPTOBJS="$CRYPTOBJS sha2.o"
229 ])
230
231 CPPFLAGS_ADD="$CPPFLAGS_ADD -I./\${top_srcdir}/src/racoon/missing"
232 ])
233 AC_SUBST(CRYPTOBJS)
234
235 # checking camellia
236 AC_CHECK_HEADERS([openssl/camellia.h])
237
238
239 # Option --enable-adminport
240 AC_MSG_CHECKING(if --enable-adminport option is specified)
241 AC_ARG_ENABLE(adminport,
242 [ --enable-adminport enable admin port],
243 [], [enable_adminport=no])
244 if test $enable_adminport = "yes"; then
245 AC_DEFINE([ENABLE_ADMINPORT], [], [Enable admin port])
246 fi
247 AC_MSG_RESULT($enable_adminport)
248
249 # Option RC5
250 AC_MSG_CHECKING(if --enable-rc5 option is specified)
251 AC_ARG_ENABLE(rc5,
252 [ --enable-rc5 enable RC5 encryption (patented)],
253 [], [enable_rc5=no])
254 AC_MSG_RESULT($enable_rc5)
255
256 if test $enable_rc5 = "yes"; then
257 AC_CHECK_HEADERS([openssl/rc5.h])
258 AC_CHECK_LIB([crypto_rc5], [RC5_32_encrypt],
259 [EXTRA_CRYPTO="$EXTRA_CRYPTO -lcrypto_rc5"])
260 fi
261
262 # Option IDEA
263 AC_MSG_CHECKING(if --enable-idea option is specified)
264 AC_ARG_ENABLE(idea,
265 [ --enable-idea enable IDEA encryption (patented)],
266 [], [enable_idea=no])
267 AC_MSG_RESULT($enable_idea)
268
269 if test $enable_idea = "yes"; then
270 AC_CHECK_HEADERS([openssl/idea.h])
271 AC_CHECK_LIB([crypto_idea], [idea_encrypt],
272 [EXTRA_CRYPTO="$EXTRA_CRYPTO -lcrypto_idea"])
273 fi
274 AC_SUBST(EXTRA_CRYPTO)
275
276 # For dynamic libradius
277 RACOON_PATH_LIBS([MD5_Init], [crypto])
278
279 # Check if we need -lutil for login(3)
280 RACOON_PATH_LIBS([login], [util])
281
282 # Specify libiconv prefix
283 AC_MSG_CHECKING(if --with-libiconv option is specified)
284 AC_ARG_WITH(libiconv,
285 [ --with-libiconv=DIR specify libiconv path (like/usr/pkg)],
286 [libiconv_dir=$withval],
287 [libiconv_dir=no])
288 AC_MSG_RESULT($libiconv_dir)
289 if test "$libiconv_dir" != "no"; then
290 if test "$libiconv_dir" = "yes" ; then
291 libiconv_dir="";
292 fi;
293 if test "x$libiconv_dir" = "x"; then
294 RACOON_PATH_LIBS([iconv_open], [iconv])
295 else
296 if test -d "$libiconv_dir/lib" -a \
297 -d "$libiconv_dir/include" ; then
298 RACOON_PATH_LIBS([iconv_open], [iconv], ["$libiconv_dir/lib"])
299 CPPFLAGS_ADD="$CPPFLAGS_ADD -I$libiconv_dir/include"
300 else
301 AC_MSG_ERROR([ICONV libs or includes not found. Aborting.])
302 fi
303 fi
304 LIBS="$LIBS -L$libiconv_dir/lib -R$libiconv_dir/lib -liconv"
305 AC_CHECK_FUNCS(iconv_open)
306 fi
307
308 AC_MSG_CHECKING([if --enable-hybrid option is specified])
309 AC_ARG_ENABLE(hybrid,
310 [ --enable-hybrid enable hybrid, both mode-cfg and xauth support],
311 [], [enable_hybrid=no])
312 AC_MSG_RESULT($enable_hybrid)
313
314 if test "x$enable_hybrid" = "xyes"; then
315 case $host in
316 *darwin*)
317 ;;
318 *)
319 LIBS="$LIBS -lcrypt";
320 ;;
321 esac
322 HYBRID_OBJS="isakmp_xauth.o isakmp_cfg.o isakmp_unity.o throttle.o"
323 AC_SUBST(HYBRID_OBJS)
324 AC_DEFINE([ENABLE_HYBRID], [], [Hybrid authentication support])
325 fi
326
327 AC_MSG_CHECKING([if --enable-frag option is specified])
328 AC_ARG_ENABLE(frag,
329 [ --enable-frag enable IKE fragmentation payload support],
330 [], [enable_frag=no])
331 AC_MSG_RESULT($enable_frag)
332
333 if test "x$enable_frag" = "xyes"; then
334 case $host in
335 *darwin*)
336 ;;
337 *)
338 LIBS="$LIBS -lcrypt";
339 ;;
340 esac
341 FRAG_OBJS="isakmp_frag.o"
342 AC_SUBST(FRAG_OBJS)
343 AC_DEFINE([ENABLE_FRAG], [], [IKE fragmentation support])
344 fi
345
346 AC_MSG_CHECKING(if --with-libradius option is specified)
347 AC_ARG_WITH(libradius,
348 [ --with-libradius=DIR specify libradius path (like/usr/pkg)],
349 [libradius_dir=$withval],
350 [libradius_dir=no])
351 AC_MSG_RESULT($libradius_dir)
352 if test "$libradius_dir" != "no"; then
353 if test "$libradius_dir" = "yes" ; then
354 libradius_dir="";
355 fi;
356 if test "x$libradius_dir" = "x"; then
357 RACOON_PATH_LIBS([rad_create_request], [radius])
358 else
359 if test -d "$libradius_dir/lib" -a \
360 -d "$libradius_dir/include" ; then
361 RACOON_PATH_LIBS([rad_create_request], [radius], ["$libradius_dir/lib"])
362 CPPFLAGS_ADD="$CPPFLAGS_ADD -I$libradius_dir/include"
363 else
364 AC_MSG_ERROR([RADIUS libs or includes not found. Aborting.])
365 fi
366 fi
367 AC_DEFINE([HAVE_LIBRADIUS], [], [Hybrid authentication uses RADIUS])
368 LIBS="$LIBS -L$libradius_dir/lib -R$libradius_dir/lib -lradius"
369 AC_CHECK_FUNCS(rad_create_request)
370 fi
371
372 AC_MSG_CHECKING(if --with-libpam option is specified)
373 AC_ARG_WITH(libpam,
374 [ --with-libpam=DIR specify libpam path (like/usr/pkg)],
375 [libpam_dir=$withval],
376 [libpam_dir=no])
377 AC_MSG_RESULT($libpam_dir)
378 if test "$libpam_dir" != "no"; then
379 if test "$libpam_dir" = "yes" ; then
380 libpam_dir="";
381 fi;
382 if test "x$libpam_dir" = "x"; then
383 RACOON_PATH_LIBS([pam_start], [pam])
384 else
385 if test -d "$libpam_dir/lib" -a \
386 -d "$libpam_dir/include" ; then
387 RACOON_PATH_LIBS([pam_start], [pam], ["$libpam_dir/lib"])
388 CPPFLAGS_ADD="$CPPFLAGS_ADD -I$libpam_dir/include"
389 else
390 AC_MSG_ERROR([PAM libs or includes not found. Aborting.])
391 fi
392 fi
393 AC_DEFINE([HAVE_LIBPAM], [], [Hybrid authentication uses PAM])
394 LIBS="$LIBS -L$libpam_dir/lib -R$libpam_dir/lib -lpam"
395 AC_CHECK_FUNCS(pam_start)
396 fi
397
398 AC_MSG_CHECKING(if --with-libldap option is specified)
399 AC_ARG_WITH(libldap,
400 [ --with-libldap=DIR specify libldap path (like/usr/pkg)],
401 [libldap_dir=$withval],
402 [libldap_dir=no])
403 AC_MSG_RESULT($libldap_dir)
404 if test "$libldap_dir" != "no"; then
405 if test "$libldap_dir" = "yes" ; then
406 libldap_dir="";
407 fi;
408 if test "x$libldap_dir" = "x"; then
409 RACOON_PATH_LIBS([ldap_init], [ldap])
410 else
411 if test -d "$libldap_dir/lib" -a \
412 -d "$libldap_dir/include" ; then
413 RACOON_PATH_LIBS([ldap_init], [ldap], ["$libldap_dir/lib"])
414 CPPFLAGS_ADD="$CPPFLAGS_ADD -I$libldap_dir/include"
415 else
416 AC_MSG_ERROR([LDAP libs or includes not found. Aborting.])
417 fi
418 fi
419 AC_DEFINE([HAVE_LIBLDAP], [], [Hybrid authentication uses LDAP])
420 LIBS="$LIBS -L$libldap_dir/lib -R$libldap_dir/lib -lldap"
421
422 saved_CFLAGS=$CFLAGS
423 CFLAGS="$CFLAGS -Wall -Werror"
424 saved_CPPFLAGS=$CPPFLAGS
425 CPPFLAGS="$CPPFLAGS $CPPFLAGS_ADD"
426 AC_TRY_COMPILE(
427 [#include <ldap.h>],
428 [
429 #if LDAP_API_VERSION < 2004
430 #error OpenLDAP version is too old ...
431 #endif
432 ],
433 [AC_MSG_RESULT([ok])],
434 [
435 AC_MSG_RESULT(too old)
436 AC_MSG_ERROR([OpenLDAP version must be 2.0 or higher. Aborting.])
437 ])
438 CFLAGS=$saved_CFLAGS
439 CPPFLAGS=$saved_CPPFLAGS
440 fi
441
442 # Check for Kerberos5 support
443 # XXX This must come after all --with-* tests, else the
444 # -liconv checks will not work
445 AC_MSG_CHECKING(if --enable-gssapi option is specified)
446 AC_ARG_ENABLE(gssapi,
447 [ --enable-gssapi enable GSS-API authentication],
448 [], [enable_gssapi=no])
449 AC_MSG_RESULT($enable_gssapi)
450 AC_PATH_PROG(KRB5_CONFIG,krb5-config,no)
451 if test "x$enable_gssapi" = "xyes"; then
452 if test "$KRB5_CONFIG" != "no"; then
453 krb5_incdir="`$KRB5_CONFIG --cflags gssapi`"
454 krb5_libs="`$KRB5_CONFIG --libs gssapi`"
455 else
456 # No krb5-config; let's make some assumptions based on
457 # the OS.
458 case $host_os in
459 netbsd*)
460 krb5_incdir="-I/usr/include/krb5"
461 krb5_libs="-lgssapi -lkrb5 -lcom_err -lroken -lasn1"
462 ;;
463 *)
464 AC_MSG_ERROR([krb5-config not found, but needed for GSSAPI support. Aborting.])
465 ;;
466 esac
467 fi
468 LIBS="$LIBS $krb5_libs"
469 CPPFLAGS_ADD="$krb5_incdir $CPPFLAGS_ADD"
470 AC_DEFINE([HAVE_GSSAPI], [], [Enable GSS API])
471
472 # Check if iconv 2nd argument needs const
473 saved_CFLAGS=$CFLAGS
474 CFLAGS="$CFLAGS -Wall -Werror"
475 saved_CPPFLAGS=$CPPFLAGS
476 CPPFLAGS="$CPPFLAGS $CPPFLAGS_ADD"
477 AC_CHECK_HEADER([iconv.h], [], [AC_MSG_ERROR([iconv.h not found, but needed for GSSAPI support. Aborting.])])
478 AC_MSG_CHECKING([if iconv second argument needs const])
479 AC_TRY_COMPILE([
480 #include <iconv.h>
481 #include <stdio.h>
482 ], [
483 iconv_t cd = NULL;
484 const char **src = NULL;
485 size_t *srcleft = NULL;
486 char **dst = NULL;
487 size_t *dstleft = NULL;
488
489 (void)iconv(cd, src, srcleft, dst, dstleft);
490 ], [AC_MSG_RESULT(yes)
491 AC_DEFINE([HAVE_ICONV_2ND_CONST], [], [Have iconv using const])
492 ], [AC_MSG_RESULT(no)])
493 CFLAGS=$saved_CFLAGS
494 CPPFLAGS=$saved_CPPFLAGS
495
496 # libiconv is often integrated into libc. If a with-* option
497 # caused a non libc-based iconv.h to be catched instead of
498 # the libc-based iconv.h, then we need to link with -liconv
499 AC_MSG_CHECKING(if -liconv is required)
500 saved_CPPFLAGS=$CPPFLAGS
501 saved_LIBS=$LIBS
502 CPPFLAGS="$CPPFLAGS $CPPFLAGS_ADD"
503 AC_TRY_LINK([
504 #include <iconv.h>
505 ], [
506 (void)iconv_open("ascii", "ascii");
507 ],
508 [AC_MSG_RESULT(no)],
509 [
510 LIBS="$LIBS -liconv"
511 AC_TRY_LINK([
512 #include <iconv.h>
513 ], [
514 (void)iconv_open("ascii", "ascii");
515 ],
516 [
517 AC_MSG_RESULT(yes)
518 saved_LIBS=$LIBS
519 ], [
520 AC_MSG_ERROR([cannot use iconv])
521 ])
522 ])
523 CPPFLAGS=$saved_CPPFLAGS
524 LIBS=$saved_LIBS
525 fi
526
527 AC_MSG_CHECKING(if --enable-stats option is specified)
528 AC_ARG_ENABLE(stats,
529 [ --enable-stats enable statistics logging function],
530 [], [enable_stats=no])
531 if test "x$enable_stats" = "xyes"; then
532 AC_DEFINE([ENABLE_STATS], [], [Enable statictics])
533 fi
534 AC_MSG_RESULT($enable_stats)
535
536 AC_MSG_CHECKING(if --enable-dpd option is specified)
537 AC_ARG_ENABLE(dpd,
538 [ --enable-dpd enable dead peer detection],
539 [], [enable_dpd=no])
540 if test "x$enable_dpd" = "xyes"; then
541 AC_DEFINE([ENABLE_DPD], [], [Enable dead peer detection])
542 fi
543 AC_MSG_RESULT($enable_dpd)
544
545 AC_MSG_CHECKING(if --enable-fastquit option is specified)
546 AC_ARG_ENABLE(fastquit,
547 [ --enable-fastquit enable new faster code to flush SAs when stopping racoon],
548 [], [enable_fastquit=no])
549 if test "x$enable_fastquit" = "xyes"; then
550 AC_DEFINE([ENABLE_FASTQUIT], [], [Enable fast SA flush code])
551 fi
552 AC_MSG_RESULT($enable_fastquit)
553
554
555 AC_MSG_CHECKING(if --enable-samode-unspec option is specified)
556 AC_ARG_ENABLE(samode-unspec,
557 [ --enable-samode-unspec enable to use unspecified a mode of SA],
558 [], [enable_samode_unspec=no])
559 if test "x$enable_samode_unspec" = "xyes"; then
560 case $host_os in
561 *linux*)
562 cat << EOC
563
564 ERROR: --enable-samode-unspec is not supported under linux
565 because linux kernel do not support it. This option is disabled
566 to prevent mysterious problems.
567
568 If you REALLY know what your are doing, remove this check.
569 EOC
570 exit 1;
571 ;;
572 esac
573 AC_DEFINE([ENABLE_SAMODE_UNSPECIFIED], [], [Enable samode-unspec])
574 fi
575 AC_MSG_RESULT($enable_samode_unspec)
576
577 # Checks if IPv6 is requested
578 AC_MSG_CHECKING([whether to enable ipv6])
579 AC_ARG_ENABLE(ipv6,
580 [ --disable-ipv6 disable ipv6 support],
581 [ case "$enableval" in
582 no)
583 AC_MSG_RESULT(no)
584 ipv6=no
585 ;;
586 *) AC_MSG_RESULT(yes)
587 ipv6=yes
588 ;;
589 esac ],
590
591 AC_TRY_RUN([ /* AF_INET6 avalable check */
592 #include <sys/types.h>
593 #include <sys/socket.h>
594 main()
595 {
596 exit(0);
597 if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
598 exit(1);
599 else
600 exit(0);
601 }
602 ],
603 AC_MSG_RESULT(yes)
604 AC_DEFINE([INET6], [], [Support IPv6])
605 ipv6=yes,
606 AC_MSG_RESULT(no)
607 ipv6=no,
608 AC_MSG_RESULT(no)
609 ipv6=no
610 ))
611
612 if test "$ipv6" = "yes"; then
613 AC_DEFINE([INET6], [], [Support IPv6])
614 AC_MSG_CHECKING(for advanced API support)
615 AC_TRY_COMPILE([#ifndef INET6
616 #define INET6
617 #endif
618 #include <sys/types.h>
619 #include <netinet/in.h>],
620 [struct in6_pktinfo a;],
621 [AC_MSG_RESULT(yes)
622 AC_DEFINE([INET6_ADVAPI], [], [Use advanced IPv6 API])],
623 [AC_MSG_RESULT(no)])
624 fi
625
626 RACOON_CHECK_BUGGY_GETADDRINFO
627 if test "$buggygetaddrinfo" = "yes"; then
628 AC_MSG_ERROR([Broken getaddrinfo() is no longer supported. Aborting.])
629 fi
630
631 # Check if kernel support is available for NAT-T, defaults to no.
632 kernel_natt="no"
633
634 AC_MSG_CHECKING(kernel NAT-Traversal support)
635 case $host_os in
636 linux*)
637 # Linux kernel NAT-T check
638 AC_EGREP_CPP(yes,
639 [#include <linux/pfkeyv2.h>
640 #ifdef SADB_X_EXT_NAT_T_TYPE
641 yes
642 #endif
643 ], [kernel_natt="yes"])
644 ;;
645 freebsd*|netbsd*)
646 # NetBSD case
647 # Same check for FreeBSD
648 AC_CHECK_MEMBER(struct sadb_x_nat_t_type.sadb_x_nat_t_type_len,
649 [kernel_natt="yes"],, [
650 #define _KERNEL
651 #include <sys/types.h>
652 #include <net/pfkeyv2.h>
653 ])
654 ;;
655 esac
656 AC_MSG_RESULT($kernel_natt)
657
658 AC_MSG_CHECKING(whether to support NAT-T)
659 AC_ARG_ENABLE(natt,
660 [ --enable-natt enable NAT-Traversal (yes/no/kernel)],
661 [ if test "$enable_natt" = "kernel"; then enable_natt=$kernel_natt; fi ],
662 [ enable_natt=no ])
663 AC_MSG_RESULT($enable_natt)
664
665 if test "$enable_natt" = "yes"; then
666 if test "$kernel_natt" = "no" ; then
667 AC_MSG_ERROR([NAT-T requested, but no kernel support! Aborting.])
668 else
669 AC_DEFINE([ENABLE_NATT], [], [Enable NAT-Traversal])
670 NATT_OBJS="nattraversal.o"
671 AC_SUBST(NATT_OBJS)
672 fi
673 fi
674
675 # Set up defines for supported NAT-T versions.
676 natt_versions_default="00,02,rfc"
677 AC_MSG_CHECKING(which NAT-T versions to support)
678 AC_ARG_ENABLE(natt_versions,
679 [ --enable-natt-versions=list list of supported NAT-T versions delimited by coma.],
680 [ test "$enable_natt_versions" = "yes" && enable_natt_versions=$natt_versions_default ],
681 [ enable_natt_versions=$natt_versions_default ])
682 if test "$enable_natt" = "yes"; then
683 AC_MSG_RESULT($enable_natt_versions)
684 for i in `echo $enable_natt_versions | tr ',cfr' ' CFR'`; do
685 case $i in
686 0|00) AC_DEFINE([ENABLE_NATT_00], [], [Enable NAT-Traversal draft 00]) ;;
687 1|01) AC_DEFINE([ENABLE_NATT_01], [], [Enable NAT-Traversal draft 01]) ;;
688 2|02) AC_DEFINE([ENABLE_NATT_02], [], [Enable NAT-Traversal draft 02]) ;;
689 3|03) AC_DEFINE([ENABLE_NATT_03], [], [Enable NAT-Traversal draft 03]) ;;
690 4|04) AC_DEFINE([ENABLE_NATT_04], [], [Enable NAT-Traversal draft 04]) ;;
691 5|05) AC_DEFINE([ENABLE_NATT_05], [], [Enable NAT-Traversal draft 05]) ;;
692 6|06) AC_DEFINE([ENABLE_NATT_06], [], [Enable NAT-Traversal draft 06]) ;;
693 7|07) AC_DEFINE([ENABLE_NATT_07], [], [Enable NAT-Traversal draft 07]) ;;
694 8|08) AC_DEFINE([ENABLE_NATT_08], [], [Enable NAT-Traversal draft 08]) ;;
695 RFC) AC_DEFINE([ENABLE_NATT_RFC], [], [Enable NAT-Traversal RFC version]) ;;
696 *) AC_MSG_ERROR([Unknown NAT-T version. Aborting.]) ;;
697 esac
698 done
699 unset i
700 else
701 AC_MSG_RESULT([none])
702 fi
703
704 AC_MSG_CHECKING(if --enable-broken-natt option is specified)
705 AC_ARG_ENABLE(broken-natt,
706 [ --enable-broken-natt broken in-kernel NAT-T],
707 [], [enable_broken_natt=no])
708 if test "x$enable_broken_natt" = "xyes"; then
709 AC_DEFINE([BROKEN_NATT], [], [in-kernel NAT-T is broken])
710 fi
711 AC_MSG_RESULT($enable_broken_natt)
712
713 AC_MSG_CHECKING(whether we support FWD policy)
714 case $host in
715 *linux*)
716 AC_TRY_COMPILE([
717 #include <inttypes.h>
718 #include <linux/ipsec.h>
719 ], [
720 int fwd = IPSEC_DIR_FWD;
721 ],
722 [AC_MSG_RESULT(yes)
723 AC_DEFINE([HAVE_POLICY_FWD], [], [Have forward policy])],
724 [AC_MSG_RESULT(no)])
725 ;;
726 *)
727 AC_MSG_RESULT(no)
728 ;;
729 esac
730
731 AC_CHECK_TYPE([ipsec_policy_t],
732 [AC_DEFINE([HAVE_IPSEC_POLICY_T], [], [Have ipsec_policy_t])],
733 [],
734 [
735 #include <sys/types.h>
736 #include <netinet6/ipsec.h>
737 ])
738
739 # Check if kernel support is available for Security Context, defaults to no.
740 kernel_secctx="no"
741
742 AC_MSG_CHECKING(kernel Security Context support)
743 case $host_os in
744 linux*)
745 # Linux kernel Security Context check
746 AC_EGREP_CPP(yes,
747 [#include <linux/pfkeyv2.h>
748 #ifdef SADB_X_EXT_SEC_CTX
749 yes
750 #endif
751 ], [kernel_secctx="yes"])
752 ;;
753 esac
754 AC_MSG_RESULT($kernel_secctx)
755
756 AC_MSG_CHECKING(whether to support Security Context)
757 AC_ARG_ENABLE(security-context,
758 [ --enable-security-context enable Security Context(yes/no/kernel)],
759 [if test "$enable_security_context" = "kernel"; then
760 enable_security_context=$kernel_secctx; fi],
761 [enable_security_context=$kernel_secctx])
762 AC_MSG_RESULT($enable_security_context)
763
764 if test "$enable_security_context" = "yes"; then
765 if test "$kernel_secctx" = "no" ; then
766 AC_MSG_ERROR([Security Context requested, but no kernel support! Aborting.])
767 else
768 AC_DEFINE([HAVE_SECCTX], [], [Enable Security Context])
769 SECCTX_OBJS="security.o"
770 AC_SUBST(SECCTX_OBJS)
771 LIBS="$LIBS -lselinux"
772 fi
773 fi
774
775 CFLAGS="$CFLAGS $CFLAGS_ADD"
776 CPPFLAGS="$CPPFLAGS $CPPFLAGS_ADD"
777
778 case $host in
779 *linux*)
780 # Remove KERNEL_INCLUDE from CPPFLAGS. It will
781 # be symlinked to src/include-glibc/linux in
782 # compile time.
783 CPPFLAGS=`echo $CPPFLAGS | sed "s,-I$KERNEL_INCLUDE,,"`
784 ;;
785 esac
786
787 include_racoondir=${includedir}/racoon
788 AC_SUBST(include_racoondir)
789
790 AC_CONFIG_FILES([
791 Makefile
792 package_version.h
793 src/Makefile
794 src/include-glibc/Makefile
795 src/libipsec/Makefile
796 src/setkey/Makefile
797 src/racoon/Makefile
798 src/racoon/samples/psk.txt
799 src/racoon/samples/racoon.conf
800 rpm/Makefile
801 rpm/suse/Makefile
802 rpm/suse/ipsec-tools.spec
803 ])
804 AC_OUTPUT
805