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