dnl source: configure.in dnl Copyright Gerhard Rieger dnl Published under the GNU General Public License V.2, see file COPYING dnl Process this file with autoconf to produce a configure script. AC_INIT(socat.c) AC_CONFIG_HEADER(config.h) if test -f /usr/xpg4/bin/fgrep; then FGREP=/usr/xpg4/bin/fgrep # Solaris else FGREP=fgrep fi # find out which defines gcc passes to cpp, so makedepend does not run into # (harmless) "error architecture not supported" AC_MSG_CHECKING(which defines needed for makedepend) __cpp_defs=`gcc -v -E - </dev/null 2>&1 |$FGREP -e '/cpp ' -e '/cc1 '` SYSDEFS=`aa=; for a in $__cpp_defs do case "$a" in -D*) aa="$aa $a";; esac; done; echo "$aa"` AC_SUBST(SYSDEFS) AC_MSG_RESULT($SYSDEFS) # this must come before AC_PROG_CC if test -z "$CFLAGS"; then # if CFLAGS is not set, we preset it to -O # with this setting, we prevent autoconf from defaulting to "-g -O2" export CFLAGS=-O fi dnl Checks for programs. AC_PROG_INSTALL(install) AC_PROG_CC AC_PROG_RANLIB AC_SUBST(AR) AC_CHECK_PROG(AR, ar, ar, gar) # # we need to explicitely call this here; otherwise, with --disable-libwrap we # fail AC_LANG_COMPILER_REQUIRE() if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -D_GNU_SOURCE -Wall -Wno-parentheses" ERRONWARN="-Werror -O0" elif test "$CC" = "clang"; then CFLAGS="$CFLAGS -D_GNU_SOURCE -Wall -Wno-parentheses" ERRONWARN="-Werror -O0" #elif Sun Studio # ERRONWARN="-errwarn" else ERRONWARN= fi export CFLAGS dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(stdbool.h) AC_CHECK_HEADERS(inttypes.h) AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h limits.h strings.h sys/param.h sys/ioctl.h sys/time.h syslog.h unistd.h) AC_CHECK_HEADERS(pwd.h grp.h stdint.h sys/types.h poll.h sys/poll.h sys/socket.h sys/uio.h sys/stat.h netdb.h sys/un.h) AC_CHECK_HEADERS(pty.h) AC_CHECK_HEADERS(netinet/in.h netinet/in_systm.h) AC_CHECK_HEADERS(netinet/ip.h, [], [], [AC_INCLUDES_DEFAULT #if HAVE_NETINET_IN_H && HAVE_NETINET_IN_SYSTM_H #include <netinet/in.h> #include <netinet/in_systm.h> #endif]) # Solaris prerequisites for netinet/ip.h AC_CHECK_HEADERS(netinet/tcp.h) AC_CHECK_HEADER(net/if.h, AC_DEFINE(HAVE_NET_IF_H), [], [AC_INCLUDES_DEFAULT #if HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif]) # Mac OS X requires including sys/socket.h AC_CHECK_HEADERS(arpa/nameser.h) AC_HEADER_RESOLV() AC_CHECK_HEADERS(termios.h linux/if_tun.h) AC_CHECK_HEADERS(net/if_dl.h) AC_CHECK_HEADERS(linux/types.h) AC_CHECK_HEADER(linux/errqueue.h, AC_DEFINE(HAVE_LINUX_ERRQUEUE_H), [], [#include <sys/time.h> #include <linux/types.h>]) AC_CHECK_HEADERS(sys/utsname.h sys/select.h sys/file.h) AC_CHECK_HEADERS(util.h bsd/libutil.h libutil.h sys/stropts.h regex.h) AC_CHECK_HEADERS(linux/fs.h linux/ext2_fs.h) dnl Checks for setgrent, getgrent and endgrent. AC_CHECK_FUNCS(setgrent getgrent endgrent) dnl Checks for getgrouplist() /* BSD */ AC_CHECK_FUNCS(getgrouplist) AC_CHECK_FUNCS(cfmakeraw) dnl Link libresolv if necessary (for Mac OS X) AC_SEARCH_LIBS([res_9_init], [resolv]) dnl Check for extra socket library (for Solaris) AC_CHECK_FUNC(hstrerror, , AC_CHECK_LIB(resolv, hstrerror, [LIBS="$LIBS -lresolv"; AC_DEFINE(HAVE_HSTRERROR)])) AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent)) AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt)) dnl Check for function prototype and in lib dnl arg1: function name dnl arg2: required include files beyond sysincludes.h define(AC_CHECK_PROTOTYPE_LIB,[ AC_MSG_CHECKING(for $1 prototype) AC_CACHE_VAL(sc_cv_have_prototype_lib_$1, [CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN -Wall $CFLAGS1"; AC_TRY_LINK([#include "sysincludes.h" $2],[return(&$1==(void *)&$1);], [sc_cv_have_prototype_lib_$1=yes], [sc_cv_have_prototype_lib_$1=no]); CFLAGS="$CFLAGS1"]) if test $sc_cv_have_prototype_lib_$1 = yes; then AC_DEFINE(HAVE_PROTOTYPE_LIB_$1) fi AC_MSG_RESULT($sc_cv_have_prototype_lib_$1) ]) dnl Check for hstrerror prototype AC_MSG_CHECKING(for hstrerror prototype) AC_CACHE_VAL(sc_cv_have_prototype_hstrerror, [CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')"; AC_TRY_COMPILE([#include <netdb.h>],[hstrerror();], [sc_cv_have_prototype_hstrerror=no], [sc_cv_have_prototype_hstrerror=yes]); CFLAGS="$CFLAGS1"]) if test $sc_cv_have_prototype_hstrerror = yes; then AC_DEFINE(HAVE_PROTOTYPE_HSTRERROR) fi AC_MSG_RESULT($sc_cv_have_prototype_hstrerror) AC_MSG_CHECKING(whether to include help) AC_ARG_ENABLE(help, [ --disable-help disable help], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_HELP) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_HELP) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include nop address support) AC_ARG_ENABLE(nop, [ --disable-nop disable nop support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_NOP) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_NOP) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include test address support) AC_ARG_ENABLE(test, [ --disable-test disable test support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_TEST) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_TEST) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include STDIO support) AC_ARG_ENABLE(stdio, [ --disable-stdio disable STDIO support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_STDIO) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_STDIO) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include FD-number support) AC_ARG_ENABLE(fdnum, [ --disable-fdnum disable FD-number support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_FDNUM) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_FDNUM) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include direct file support) AC_ARG_ENABLE(file, [ --disable-file disable direct file support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_FILE) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_FILE) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include direct create support) AC_ARG_ENABLE(creat, [ --disable-creat disable direct create support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_CREAT) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_CREAT) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include gopen support) AC_ARG_ENABLE(gopen, [ --disable-gopen disable open for UNIX socket support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_GOPEN) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_GOPEN) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include explicit pipe support) AC_ARG_ENABLE(pipe, [ --disable-pipe disable pipe support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_PIPE) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_PIPE) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include explicit termios support) AC_ARG_ENABLE(termios, [ --disable-termios disable termios support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_TERMIOS) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_TERMIOS) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include UNIX socket support) AC_ARG_ENABLE(unix, [ --disable-unix disable UNIX domain socket support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_UNIX) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_UNIX) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include abstract UNIX socket support) AC_ARG_ENABLE(abstract_unixsocket, [ --disable-abstract-unixsocket disable abstract UNIX domain socket support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET) AC_MSG_RESULT(yes);; esac], [ case "`uname`" in Linux) AC_DEFINE(WITH_ABSTRACT_UNIXSOCKET) AC_MSG_RESULT(yes);; *) AC_MSG_RESULT(no);; esac]) AC_MSG_CHECKING(whether to include IPv4 support) AC_ARG_ENABLE(ip4, [ --disable-ip4 disable IPv4 support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_IP4) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_IP4) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include IPv6 support) AC_ARG_ENABLE(ip6, [ --disable-ip6 disable IPv6 support], [case "$enableval" in no) AC_MSG_RESULT(no); WITH_IP6= ;; *) AC_MSG_RESULT(yes); WITH_IP6=1 ;; esac], [ AC_MSG_RESULT(yes); WITH_IP6=1 ]) if test "$WITH_IP6"; then AC_CHECK_HEADERS([netinet/ip6.h], [AC_DEFINE(HAVE_NETINET_IP6_H) AC_DEFINE(WITH_IP6)], [AC_MSG_WARN([include file netinet/ip6.h not found, disabling IP6])], [AC_INCLUDES_DEFAULT #ifdef HAVE_NETINET_IN_H # include <netinet/in.h> #endif]) AC_CHECK_HEADERS(netinet6/in6.h) # found on OpenBSD and Lion, used for IPV6_* AC_MSG_CHECKING(if __APPLE_USE_RFC_2292 is helpful) AC_CACHE_VAL(ac_cv_apple_use_rfc_2292, [AC_TRY_COMPILE(,[#ifndef IPV6_HOPOPTS murks; #endif], [ac_cv_apple_use_rfc_2292=no], [AC_TRY_COMPILE([#define __APPLE_USE_RFC_2292], [#ifndef IPV6_HOPOPTS murks; #endif], [ac_cv_apple_use_rfc_2292=yes], [ac_cv_apple_use_rfc_2292=no] )] )]) if test "$ac_cv_apple_use_rfc_2292" = yes; then AC_DEFINE(__APPLE_USE_RFC_2292) fi AC_MSG_RESULT($ac_cv_apple_use_rfc_2292) fi AC_MSG_CHECKING(whether to include raw IP support) AC_ARG_ENABLE(rawip, [ --disable-rawip disable raw IP support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_RAWIP) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_RAWIP) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include generic socket support) AC_ARG_ENABLE(genericsocket, [ --disable-genericsocket disable generic socket support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_GENERICSOCKET) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_GENERICSOCKET) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include generic network interface support) AC_ARG_ENABLE(interface, [ --disable-interface disable network interface support], [case "$enableval" in no) AC_MSG_RESULT(no); WITH_INTERFACE= ;; *) AC_MSG_RESULT(yes); WITH_INTERFACE=1 ;; esac], [AC_MSG_RESULT(yes); WITH_INTERFACE=1 ]) if test "$WITH_INTERFACE"; then AC_CHECK_HEADER(netpacket/packet.h, AC_DEFINE(HAVE_NETPACKET_PACKET_H), [WITH_INTERFACE=; AC_MSG_WARN([include file netpacket/packet.h not found, disabling interface])]) fi if test "$WITH_INTERFACE"; then AC_CHECK_HEADER(netinet/if_ether.h, AC_DEFINE(HAVE_NETINET_IF_ETHER_H), [WITH_INTERFACE=; AC_MSG_WARN([include file netinet/if_ether.h not found, disabling interface])], [AC_INCLUDES_DEFAULT #if HAVE_NET_IF_H && HAVE_NETINET_IN_H #include <net/if.h> #include <netinet/in.h> #endif]) fi if test "$WITH_INTERFACE"; then AC_DEFINE(WITH_INTERFACE) fi AC_MSG_CHECKING(whether to include TCP support) AC_ARG_ENABLE(tcp, [ --disable-tcp disable TCP support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_TCP) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_TCP) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include UDP support) AC_ARG_ENABLE(udp, [ --disable-udp disable UDP support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_UDP) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_UDP) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include SCTP support) AC_ARG_ENABLE(sctp, [ --disable-sctp disable SCTP support], [case "$enableval" in no) AC_MSG_RESULT(no); WITH_SCTP= ;; *) AC_MSG_RESULT(yes); WITH_SCTP=1 ;; esac], [AC_MSG_RESULT(yes); WITH_SCTP=1 ]) if test -n "$WITH_SCTP"; then AC_MSG_CHECKING(for IPPROTO_SCTP) AC_CACHE_VAL(sc_cv_define_ipproto_sctp, [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [IPPROTO_SCTP;], [sc_cv_define_ipproto_sctp=yes], [sc_cv_define_ipproto_sctp=no])]) AC_MSG_RESULT($sc_cv_define_ipproto_sctp) if test $sc_cv_define_ipproto_sctp = yes; then AC_DEFINE(WITH_SCTP) else AC_MSG_WARN([IPPROTO_SCTP undefined, disabling SCTP support]) fi fi AC_MSG_CHECKING(whether to include listen support) AC_ARG_ENABLE(listen, [ --disable-listen disable listen support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_LISTEN) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_LISTEN) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include socks4 support) AC_ARG_ENABLE(socks4, [ --disable-socks4 disable socks4 support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_SOCKS4) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_SOCKS4) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include socks4a support) AC_ARG_ENABLE(socks4a, [ --disable-socks4a disable socks4a support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_SOCKS4A) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_SOCKS4A) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include proxy connect support) AC_ARG_ENABLE(proxy, [ --disable-proxy disable proxy connect support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_PROXY) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_PROXY) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include exec support) AC_ARG_ENABLE(exec, [ --disable-exec disable exec support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_EXEC) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_EXEC) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING([whether to include system (shell) support]) AC_ARG_ENABLE(system, [ --disable-system disable system (shell) support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_SYSTEM) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_SYSTEM) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include pty address support) AC_ARG_ENABLE(pty, [ --disable-pty disable pty support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_PTY) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_PTY) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include ext2 fs attributes support) AC_ARG_ENABLE(ext2, [ --disable-ext2 disable ext2 fs attributes support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_EXT2) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_EXT2) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(whether to include readline support) AC_ARG_ENABLE(readline, [ --disable-readline disable readline support], [case "$enableval" in no) AC_MSG_RESULT(no); WITH_READLINE= ;; *) AC_MSG_RESULT(yes); WITH_READLINE=1 ;; esac], [AC_MSG_RESULT(yes); WITH_READLINE=1 ]) if test -n "$WITH_READLINE"; then CPPFLAGS_ORIG=$CPPFLAGS CFLAGS_ORIG=$CFLAGS LIBS_ORIG=$LIBS sc_usable_readline_found= for D in "" "/usr/local" "/opt/local" "/sw" "/opt/freeware" "/usr/sfw"; do if test -n "$D" ; then CPPFLAGS="$CPPFLAGS -I$D/include" CFLAGS="$CFLAGS -L$D/lib" DLOC="in location $D" else DLOC="in default location" fi AC_MSG_CHECKING(for usable readline $DLOC) # Some systems require -lcurses, some require -lncurses. # Mac OS X 10.4 (and others) ships with libedit masquerading as readline, # but it doesn't work well with socat. It can be recognized by the absence # of append_history. for L in "" "-lcurses" "-lncurses"; do LIBS="$LIBS_ORIG -lreadline $L" AC_TRY_LINK( [ #include <stdio.h> #include <readline/readline.h> #include <readline/history.h>], [ readline(NULL); append_history(0, NULL); ], [ sc_usable_readline_found=1 break ]) done if test -n "$sc_usable_readline_found"; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_READLINE_READLINE_H,1) AC_DEFINE(HAVE_READLINE_HISTORY_H,1) AC_DEFINE(HAVE_LIBREADLINE,1) AC_DEFINE(WITH_READLINE,1) break else AC_MSG_RESULT(no) CPPFLAGS=$CPPFLAGS_ORIG CFLAGS=$CFLAGS_ORIG LIBS=$LIBS_ORIG fi done if test -z "$sc_usable_readline_found"; then AC_MSG_WARN([no suitable version of readline found; perhaps you need to install a newer version]) fi fi AC_MSG_CHECKING(whether to include openssl support) AC_ARG_ENABLE(openssl, [ --disable-openssl disable OpenSSL support], [ case "$enableval" in no) AC_MSG_RESULT(no); WITH_OPENSSL= ;; *) AC_MSG_RESULT(yes); WITH_OPENSSL=1 ;; esac], [ AC_MSG_RESULT(yes); WITH_OPENSSL=1 ]) # if test -n "$WITH_OPENSSL"; then AC_MSG_NOTICE(checking for components of OpenSSL) # first, we need to find the include file <openssl/ssl.h> AC_CACHE_VAL(sc_cv_have_openssl_ssl_h, [AC_TRY_COMPILE([#include <openssl/ssl.h>],[;], [sc_cv_have_openssl_ssl_h=yes; OPENSSL_ROOT=""; ], [sc_cv_have_openssl_ssl_h=no for D in "/sw" "/usr/local" "/opt/freeware" "/usr/sfw" "/usr/local/ssl"; do I="$D/include" i="$I/openssl/ssl.h" if test -r "$i"; then #V_INCL="$V_INCL -I$I" CPPFLAGS="$CPPFLAGS -I$I" AC_MSG_NOTICE(found $i) sc_cv_have_openssl_ssl_h=yes; OPENSSL_ROOT="$D" break; fi done]) ]) if test "$sc_cv_have_openssl_ssl_h" = "yes"; then AC_DEFINE(HAVE_OPENSSL_SSL_H) fi AC_MSG_NOTICE(checked for openssl/ssl.h... $sc_cv_have_openssl_ssl_h) fi # end checking for openssl/ssl.h # if test -n "$WITH_OPENSSL" -a "$sc_cv_have_openssl_ssl_h" = 'yes'; then # next, we search for the openssl library (libssl.*) # interesting: Linux only requires -lssl, FreeBSD requires -lssl -lcrypto # Note, version OpenSSL 0.9.7j requires -lcrypto even on Linux. AC_MSG_CHECKING(for libssl) AC_CACHE_VAL(sc_cv_have_libssl, [ LIBS0="$LIBS" if test -n "$OPENSSL_ROOT"; then L="$OPENSSL_ROOT/lib"; LIBS="$LIBS -L$L -lssl" else LIBS="$LIBS -lssl" fi AC_TRY_LINK([#include <openssl/ssl.h>], [SSL_library_init();ERR_error_string()], [sc_cv_have_libssl='yes'], [ LIBS="$LIBS -lcrypto" AC_TRY_LINK([#include <openssl/ssl.h>], [SSL_library_init()], [sc_cv_have_libssl='yes'], [sc_cv_have_libssl='no']) ]) if test "$sc_cv_have_libssl" != 'yes'; then LIBS="$LIBS0" fi ] ) if test "$sc_cv_have_libssl" = 'yes'; then AC_DEFINE(HAVE_LIBSSL) fi AC_MSG_RESULT($sc_cv_have_libssl) fi # # # a possible location for openssl (on Sourceforge/Solaris) # AC_CHECK_FILE(/usr/local/ssl/lib, LIBS="$LIBS -L/usr/local/ssl/lib/") # # sometimes on Solaris: # AC_CHECK_FILE(/pkgs/lib, LIBS="$LIBS -L/pkgs/lib/") # # for AIX 5.1 with Linux toolbox: # AC_CHECK_FILE(/opt/freeware/lib, LIBS="$LIBS -L/opt/freeware/lib/") # # AC_CHECK_LIB(crypto, main) # AC_CHECK_LIB(ssl, main) # # # MacOSX has openssl includes in another directory # if test -d /sw/include/; then # V_INCL="$V_INCL -I/sw/include" # # and Solaris at sourceforge here: # elif test -d /usr/local/ssl/include/; then # V_INCL="$V_INCL -I/usr/local/ssl/include" # # and AIX 5.1 with Linux toolbox: # elif test -d /opt/freeware/include; then # V_INCL="$V_INCL -I/opt/freeware/include" # fi #fi if test -n "$WITH_OPENSSL"; then if test "$sc_cv_have_openssl_ssl_h" = "yes" -a "$sc_cv_have_libssl" = "yes"; then AC_DEFINE(WITH_OPENSSL) else AC_MSG_WARN([not all components of OpenSSL found, disabling it]); fi fi # check for fips support AC_MSG_CHECKING(whether to include openssl fips support) AC_ARG_ENABLE(fips, [ --enable-fips enable OpenSSL FIPS support], [ case "$enableval" in yes) AC_MSG_RESULT(yes); WITH_FIPS=1 ;; *) AC_MSG_RESULT(no); WITH_FIPS= ;; esac], [ AC_MSG_RESULT(no); WITH_FIPS= ]) if test -n "$WITH_FIPS"; then if test -n "$WITH_OPENSSL"; then AC_CHECK_PROG(HAVE_FIPSLD, fipsld, 1) if test "$sc_cv_have_openssl_ssl_h" != "yes" -o "$sc_cv_have_libssl" != "yes" -o ! "$HAVE_FIPSLD"; then AC_MSG_WARN([not all components of OpenSSL found, disabling FIPS]); WITH_FIPS= fi else AC_MSG_WARN([must enable OpenSSL to enable FIPS; use --enable-openssl]); fi fi if test -n "$WITH_FIPS"; then AC_MSG_CHECKING(for components of OpenSSL FIPS) # first, we need to find the include file <openssl/fips.h> AC_CACHE_VAL(sc_cv_have_openssl_fips_h, [AC_TRY_COMPILE([#define OPENSSL_FIPS #include <stddef.h> #include <openssl/fips.h>],[;], [sc_cv_have_openssl_fips_h=yes; ], [sv_cv_have_openssl_fips_h=no if test -n "$OPENSSL_ROOT"; then I="$OPENSSL_ROOT/include" i="$I/openssl/fips.h" if test -r "$i"; then AC_MSG_NOTICE(found $i) sc_cv_have_openssl_fips_h=yes; fi fi ] )] ) if test "$sv_cv_have_openssl_fips_h" = "yes"; then AC_DEFINE(HAVE_OPENSSL_FIPS_H) fi AC_MSG_NOTICE(checked for openssl/fips.h... $sc_cv_have_openssl_ssl_h) fi if test -n "$WITH_FIPS" -a "$sc_cv_have_openssl_fips_h" = 'yes'; then # check for the libcrypto library with fips support AC_MSG_CHECKING(for libcrypto with FIPS support) AC_CACHE_VAL(sc_cv_have_libcrypto, [ LIBS0="$LIBS" echo $LIBS | grep -q "\-lcrypto" if test $? -ne 0; then if test -n "$OPENSSL_ROOT"; then L="$OPENSSL_ROOT/lib"; LIBS="$LIBS -L$L -lcrypto" else LIBS="$LIBS -lcrypto" fi fi AC_TRY_LINK([#define OPENSSL_FIPS #include <openssl/ssl.h> #include <openssl/fips.h>], [int res = FIPS_mode_set(1);], [sc_cv_have_libcrypto='yes'], [sc_cv_have_libcrypto='no'] ) if test "$sc_cv_have_libcrypto" != 'yes'; then LIBS="$LIBS0" fi ] ) if test "$sc_cv_have_libcrypto" = 'yes'; then AC_DEFINE(HAVE_LIBCRYPTO) fi AC_MSG_RESULT($sc_cv_have_libcrypto) fi if test -n "$WITH_FIPS"; then if test "$sc_cv_have_openssl_fips_h" = 'yes' -a "$sc_cv_have_libcrypto" = 'yes'; then AC_DEFINE(WITH_FIPS) AC_DEFINE(OPENSSL_FIPS) else AC_MSG_WARN([not all components of OpenSSL FIPS found, disabling it]); fi fi AC_MSG_CHECKING(whether to include tun/tap address support) AC_ARG_ENABLE(tun, [ --disable-tun disable TUN/TAP support], [case "$enableval" in no) AC_MSG_RESULT(no); WITH_TUN= ;; *) AC_MSG_RESULT(yes); WITH_TUN=1 ;; esac], [AC_MSG_RESULT(yes); WITH_TUN=1 ]) # if ! test "$ac_cv_header_linux_if_tun_h" = 'yes'; then AC_MSG_WARN(include file linux/if_tun.h not found, disabling TUN) WITH_TUN= fi # if test -n "$WITH_TUN"; then AC_DEFINE(WITH_TUN) fi AC_MSG_CHECKING(whether to include system call tracing) AC_ARG_ENABLE(sycls, [ --disable-sycls disable system call tracing], [case "$enableval" in no) SYCLS=""; SSLCLS=""; AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_SYCLS) SYCLS="sycls.c"; SSLCLS="sslcls.c"; AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_SYCLS) SYCLS="sycls.c"; SSLCLS="sslcls.c"; AC_MSG_RESULT(yes)]) AC_SUBST(SYCLS) AC_SUBST(SSLCLS) AC_MSG_CHECKING(whether to include file descriptor analyzer) AC_ARG_ENABLE(filan, [ --disable-filan disable file descriptor analyzer], [case "$enableval" in no) FILAN=""; AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_FILAN) FILAN="filan.c"; AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_FILAN) FILAN="filan.c"; AC_MSG_RESULT(yes)]) AC_SUBST(FILAN) AC_MSG_CHECKING(whether to include retry support) AC_ARG_ENABLE(retry, [ --disable-retry disable retry support], [case "$enableval" in no) AC_MSG_RESULT(no);; *) AC_DEFINE(WITH_RETRY) AC_MSG_RESULT(yes);; esac], [AC_DEFINE(WITH_RETRY) AC_MSG_RESULT(yes)]) AC_MSG_CHECKING(included message level) AC_ARG_ENABLE(msglevel, [ --enable-msglevel=N set max verbosity to debug,info,notice,warn,error,fatal], [case "$enableval" in debug) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);; info) AC_DEFINE(WITH_MSGLEVEL,1) AC_MSG_RESULT(info);; notice) AC_DEFINE(WITH_MSGLEVEL,2) AC_MSG_RESULT(notice);; warn) AC_DEFINE(WITH_MSGLEVEL,3) AC_MSG_RESULT(warn);; error) AC_DEFINE(WITH_MSGLEVEL,4) AC_MSG_RESULT(error);; fatal) AC_DEFINE(WITH_MSGLEVEL,5) AC_MSG_RESULT(fatal);; *) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);; esac], [AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug)]) #AC_SUBST(V_INCL) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_UID_T AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_STRUCT_ST_BLKSIZE AC_STRUCT_ST_BLOCKS AC_STRUCT_ST_RDEV AC_HEADER_TIME dnl Check for extra realtime library (for Solaris) AC_CHECK_FUNC(nanosleep, AC_DEFINE(HAVE_NANOSLEEP), AC_CHECK_LIB(rt, nanosleep, [LIBS="-lrt $LIBS"; AC_DEFINE(HAVE_NANOSLEEP)])) #AC_CHECK_FUNC(nanosleep, , AC_CHECK_LIB(rt, nanosleep)) dnl Checks for library functions. AC_PROG_GCC_TRADITIONAL AC_FUNC_MEMCMP AC_TYPE_SIGNAL AC_FUNC_STRFTIME AC_CHECK_FUNCS(putenv select poll socket strtod strtol) AC_CHECK_FUNCS(strtoul uname getpgid getsid getaddrinfo) AC_CHECK_FUNCS(setgroups inet_aton) AC_CHECK_FUNCS() AC_CHECK_FUNCS(grantpt unlockpt) # GR AC_CHECK_FUNCS only checks linking, not prototype. This may lead to implicit # function declarations and to SIGSEGV on systems with 32bit int and 64bit pointer ################################### # check for prototype and existence of functions that return a pointer # defines in config.h: HAVE_PROTOTYPE_LIB_$1 AC_CHECK_PROTOTYPE_LIB(strdup) AC_CHECK_PROTOTYPE_LIB(strerror) AC_CHECK_PROTOTYPE_LIB(strstr) AC_CHECK_PROTOTYPE_LIB(getipnodebyname) AC_CHECK_PROTOTYPE_LIB(memrchr) AC_CHECK_PROTOTYPE_LIB(if_indextoname) AC_CHECK_PROTOTYPE_LIB(ptsname) AC_MSG_CHECKING(for long long) AC_CACHE_VAL(sc_cv_type_longlong, [AC_TRY_COMPILE([],[long long s;], [sc_cv_type_longlong=yes], [sc_cv_type_longlong=no])]) if test $sc_cv_type_longlong = yes; then AC_DEFINE(HAVE_TYPE_LONGLONG) fi AC_MSG_RESULT($sc_cv_type_longlong) AC_CHECK_TYPE(sig_atomic_t,AC_DEFINE(HAVE_TYPE_SIG_ATOMIC_T),,[#include "sysincludes.h"]) AC_MSG_CHECKING(for bool) AC_CACHE_VAL(sc_cv_type_bool, [AC_TRY_COMPILE([#ifdef HAVE_STDBOOL_H #include <stdbool.h> #endif], [bool b;], [sc_cv_type_bool=yes], [sc_cv_type_bool=no])]) if test $sc_cv_type_bool = yes; then AC_DEFINE(HAVE_TYPE_BOOL) fi AC_MSG_RESULT($sc_cv_type_bool) # following builtin macro does not check unistd.h and sys/socket.h where # socklen_t might be defined #AC_CHECK_TYPE(socklen_t, int) # AC_MSG_CHECKING(for socklen_t) AC_CACHE_VAL(sc_cv_type_socklen, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <unistd.h>],[socklen_t s;], [sc_cv_type_socklen=yes], [sc_cv_type_socklen=no])]) if test $sc_cv_type_socklen = yes; then AC_DEFINE(HAVE_TYPE_SOCKLEN) fi AC_MSG_RESULT($sc_cv_type_socklen) AC_MSG_CHECKING(for struct stat64) AC_CACHE_VAL(sc_cv_type_stat64, [AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 s;], [sc_cv_type_stat64=yes], [sc_cv_type_stat64=no])]) if test $sc_cv_type_stat64 = yes; then AC_DEFINE(HAVE_TYPE_STAT64) fi AC_MSG_RESULT($sc_cv_type_stat64) AC_MSG_CHECKING(for off64_t) AC_CACHE_VAL(sc_cv_type_off64, [AC_TRY_COMPILE([#include <unistd.h>],[off64_t s;], [sc_cv_type_off64=yes], [sc_cv_type_off64=no])]) if test $sc_cv_type_off64 = yes; then AC_DEFINE(HAVE_TYPE_OFF64) fi AC_MSG_RESULT($sc_cv_type_off64) AC_MSG_CHECKING(for sighandler_t) AC_CACHE_VAL(sc_cv_type_sighandler, [AC_TRY_COMPILE([#include <signal.h>],[sighandler_t s;], [sc_cv_type_sighandler=yes], [sc_cv_type_sighandler=no])]) if test $sc_cv_type_sighandler = yes; then AC_DEFINE(HAVE_TYPE_SIGHANDLER) fi AC_MSG_RESULT($sc_cv_type_socklen) AC_MSG_CHECKING(for uint8_t) AC_CACHE_VAL(sc_cv_type_uint8, [AC_TRY_COMPILE([#include <sys/types.h> #if HAVE_STDINT_H #include <stdint.h> #endif /* Tru64 has uint8_t etc from netdb.h */ #if HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h>],[uint8_t s;], [sc_cv_type_uint8=yes], [sc_cv_type_uint8=no])]) if test $sc_cv_type_uint8 = yes; then AC_DEFINE(HAVE_TYPE_UINT8) fi AC_MSG_RESULT($sc_cv_type_uint8) AC_MSG_CHECKING(for uint16_t) AC_CACHE_VAL(sc_cv_type_uint16, [AC_TRY_COMPILE([#include <sys/types.h> #if HAVE_STDINT_H #include <stdint.h> #endif /* Tru64 has uint16_t etc from netdb.h */ #if HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h>],[uint16_t s;], [sc_cv_type_uint16=yes], [sc_cv_type_uint16=no])]) if test $sc_cv_type_uint16 = yes; then AC_DEFINE(HAVE_TYPE_UINT16) fi AC_MSG_RESULT($sc_cv_type_uint16) AC_MSG_CHECKING(for uint32_t) AC_CACHE_VAL(sc_cv_type_uint32, [AC_TRY_COMPILE([#include <sys/types.h> #if HAVE_STDINT_H #include <stdint.h> #endif /* Tru64 has uint32_t etc from netdb.h */ #if HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h>],[uint32_t s;], [sc_cv_type_uint32=yes], [sc_cv_type_uint32=no])]) if test $sc_cv_type_uint32 = yes; then AC_DEFINE(HAVE_TYPE_UINT32) fi AC_MSG_RESULT($sc_cv_type_uint32) AC_MSG_CHECKING(for uint64_t) AC_CACHE_VAL(sc_cv_type_uint64, [AC_TRY_COMPILE([#include <sys/types.h> #if HAVE_STDINT_H #include <stdint.h> #endif /* Tru64 has uint32_t etc from netdb.h */ #if HAVE_NETDB_H #include <netdb.h> #endif #include <unistd.h>],[uint64_t s;], [sc_cv_type_uint64=yes], [sc_cv_type_uint64=no])]) if test $sc_cv_type_uint64 = yes; then AC_DEFINE(HAVE_TYPE_UINT64) fi AC_MSG_RESULT($sc_cv_type_uint64) ### AIX 4.1 needs _XOPEN_EXTENDED_SOURCE for syslog headers, # but then gets problems with 3rd arg of getsockaddr... #AC_MSG_CHECKING(for _XOPEN_EXTENDED_SOURCE requirement) #CFLAGS="-Werror -Wall" #AC_TRY_COMPILE([#include <sys/syslog.h>], #[syslog(0," ");], #[AC_MSG_RESULT(no)], #[AC_MSG_RESULT(required); AC_DEFINE(_XOPEN_EXTENDED_SOURCE)]) ### fds_bits AC_MSG_CHECKING(for fdset->fds_bits) AC_TRY_COMPILE([#include <sys/types.h> #if HAVE_SYS_SELECT_H #include <sys/select.h> #endif], [fd_set s; s.fds_bits[0]=0;], [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FDS_BITS)], [AC_MSG_RESULT(no);]) AC_MSG_CHECKING(for sa_family_t) AC_CACHE_VAL(sc_cv_type_sa_family_t, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>],[sa_family_t s;], [sc_cv_type_sa_family_t=yes], [sc_cv_type_sa_family_t=no])]) if test $sc_cv_type_sa_family_t = yes; then AC_DEFINE(HAVE_TYPE_SA_FAMILY_T) fi AC_MSG_RESULT($sc_cv_type_sa_family_t) AC_MSG_CHECKING(for struct sock_extended_err) AC_CACHE_VAL(sc_cv_struct_sock_extended_err, [AC_TRY_COMPILE([#include <linux/types.h> #if TIME_WITH_SYS_TIME #include <sys/time.h> #endif #if HAVE_LINUX_ERRQUEUE_H #include <linux/errqueue.h> #endif],[struct sock_extended_err s;], [sc_cv_struct_sock_extended_err=yes], [sc_cv_struct_sock_extended_err=no])]) if test $sc_cv_struct_sock_extended_err = yes; then AC_DEFINE(HAVE_STRUCT_SOCK_EXTENDED_ERR) fi AC_MSG_RESULT($sc_cv_struct_sock_extended_err) AC_MSG_CHECKING(for struct sigaction.sa_sigaction) AC_CACHE_VAL(sc_cv_struct_sigaction_sa_sigaction, [AC_TRY_COMPILE([#include <signal.h>],[struct sigaction s;s.sa_sigaction=0;], [sc_cv_struct_sigaction_sa_sigaction=yes], [sc_cv_struct_sigaction_sa_sigaction=no])]) if test $sc_cv_struct_sigaction_sa_sigaction = yes; then AC_DEFINE(HAVE_STRUCT_SIGACTION_SA_SIGACTION) fi AC_MSG_RESULT($sc_cv_struct_sigaction_sa_sigaction) ### struct termios .c_ispeed AC_MSG_CHECKING(for termios.c_ispeed) AC_CACHE_VAL(sc_cv_termios_ispeed, [AC_TRY_COMPILE([#include <termios.h>], [struct termios t; t.c_ispeed=0;], [sc_cv_termios_ispeed=yes], [sc_cv_termios_ispeed=no])]) if test $sc_cv_termios_ispeed = yes; then AC_DEFINE(HAVE_TERMIOS_ISPEED) fi AC_MSG_RESULT($sc_cv_termios_ispeed) if test $sc_cv_termios_ispeed = yes; then AC_MSG_CHECKING(for offset of c_ispeed in struct termios) LIBS1="$LIBS"; LIBS="" # avoid libwrap allow_severity undefined AC_CACHE_VAL(ac_cv_ispeed_offset, [conftestspeedoff="conftestspeedoff.out" AC_TRY_RUN([ #include <errno.h> #include <stdlib.h> #include <stdio.h> #include <termios.h> #include <string.h> int main(){ struct termios t; FILE *f; if ((f=fopen("$conftestspeedoff","w"))==NULL){ fprintf(stderr,"\\"$conftestspeedoff\\": %s\n",strerror(errno)); exit(-1); } fprintf(f, "%d", ((char*)&t.c_ispeed-(char*)&t)/sizeof(speed_t)); exit(0); } ], [ac_cv_ispeed_offset=`cat $conftestspeedoff`], [ac_cv_ispeed_offset=-1], [ac_cv_ispeed_offset=-1] #! )]) LIBS="$LIBS1" AC_MSG_RESULT($ac_cv_ispeed_offset) if test $ac_cv_ispeed_offset -ge 0; then AC_DEFINE_UNQUOTED(ISPEED_OFFSET, $ac_cv_ispeed_offset) fi fi # there is another issue with termios: OSR requires "#define _SVID3 ..." # for reasonable termios support. We check this situation using IMAXBEL AC_MSG_CHECKING(if _SVID3 is helpful) AC_CACHE_VAL(ac_cv_svid3, [AC_TRY_COMPILE([#include <termios.h>], [int i=IMAXBEL], [ac_cv_svid3=no], [AC_TRY_COMPILE([#define _SVID3 1 #include <termios.h>], [int i=IMAXBEL], [ac_cv_svid3=yes], [ac_cv_svid3=no] )] )]) if test $ac_cv_svid3 = yes; then AC_DEFINE(_SVID3) fi AC_MSG_RESULT($ac_cv_svid3) # Openindiana needs _XPG4_2 for CMSG stuff AC_MSG_CHECKING(if _XPG4_2 is helpful) AC_CACHE_VAL(ac_cv_xpg4_2, [AC_TRY_LINK([#include <sys/socket.h>], [int i=CMSG_DATA(0)], [ac_cv_xpg4_2=no], [AC_TRY_LINK([#define _XPG4_2 1 #include <sys/socket.h>], [int i=CMSG_DATA(0)], [ac_cv_xpg4_2=yes], [ac_cv_xpg4_2=no] )] )]) if test $ac_cv_xpg4_2 = yes; then AC_DEFINE(_XPG4_2) fi AC_MSG_RESULT($ac_cv_xpg4_2) # When on Openindiana _XPG4_2 is defined (see above) # we also need to define __EXTENSIONS__ for basic stuff. # Note that <sys/procset.h> is important on Openindiana # but does not exist on Linux if test "$ac_cv_xpg4_2" = yes; then AC_MSG_CHECKING(if __EXTENSIONS__ is helpful) AC_CACHE_VAL(ac_cv___extensions__, [AC_TRY_COMPILE([#include <sys/procset.h>], [procset_t *s=0;], [ac_cv___extensions__=no], [AC_TRY_COMPILE([#define __EXTENSIONS__ 1 #include <sys/procset.h>], [procset_t *s=0;], [ac_cv___extensions__=yes], [ac_cv___extensions__=no] )] )]) if test $ac_cv___extensions__ = yes; then AC_DEFINE(__EXTENSIONS__) fi AC_MSG_RESULT($ac_cv___extensions__) fi # When on Openindiana __EXTENSIONS__ is defined (see above) # _POSIX_PTHREAD_SEMANTICS must be defined for standard ctime_r() if test "$ac_cv___extensions__" = yes; then AC_MSG_CHECKING(if _POSIX_PTHREAD_SEMANTICS is helpful) AC_CACHE_VAL(ac_cv__posix_pthread_semantics, [AC_TRY_COMPILE([#include <time.h>], [char *s = ctime_r(0,0);], [ac_cv__posix_pthread_semantics=no], [AC_TRY_COMPILE([#define _POSIX_PTHREAD_SEMANTICS 1 #include <time.h>], [char *s = ctime_r(0,0);], [ac_cv__posix_pthread_semantics=yes], [ac_cv__posix_pthread_semantics=no] )] )]) if test $ac_cv__posix_pthread_semantics = yes; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) fi AC_MSG_RESULT($ac_cv__posix_pthread_semantics) fi # struct timespec AC_MSG_CHECKING(for struct timespec) AC_CACHE_VAL(sc_cv_struct_timespec, [AC_TRY_COMPILE([#include <time.h> #if HAVE_SYS_TIME_H #include <sys/time.h> #endif],[struct timespec s;], [sc_cv_struct_timespec=yes], [sc_cv_struct_timespec=no])]) if test $sc_cv_struct_timespec = yes; then AC_DEFINE(HAVE_STRUCT_TIMESPEC) fi AC_MSG_RESULT($sc_cv_struct_timespec) # struct linger; FreeBSD requires sys/types.h for sys/socket.h AC_MSG_CHECKING(for struct linger) AC_CACHE_VAL(sc_cv_struct_linger, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h>],[struct linger s;], [sc_cv_struct_linger=yes], [sc_cv_struct_linger=no])]) if test $sc_cv_struct_linger = yes; then AC_DEFINE(HAVE_STRUCT_LINGER) fi AC_MSG_RESULT($sc_cv_struct_linger) # struct ip_mreq (for multicasting options) AC_MSG_CHECKING(for struct ip_mreq) AC_CACHE_VAL(sc_cv_struct_ip_mreq, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>],[struct ip_mreq s;], [sc_cv_struct_ip_mreq=yes], [sc_cv_struct_ip_mreq=no])]) if test $sc_cv_struct_ip_mreq = yes; then AC_DEFINE(HAVE_STRUCT_IP_MREQ) fi AC_MSG_RESULT($sc_cv_struct_ip_mreq) # struct ip_mreqn (for multicasting options) AC_MSG_CHECKING(for struct ip_mreqn) AC_CACHE_VAL(sc_cv_struct_ip_mreqn, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/ip.h>],[struct ip_mreqn s;], [sc_cv_struct_ip_mreqn=yes], [sc_cv_struct_ip_mreqn=no])]) if test $sc_cv_struct_ip_mreqn = yes; then AC_DEFINE(HAVE_STRUCT_IP_MREQN) fi AC_MSG_RESULT($sc_cv_struct_ip_mreqn) # struct ipv6_mreq (for multicasting options) AC_MSG_CHECKING(for struct ipv6_mreq) AC_CACHE_VAL(sc_cv_struct_ipv6_mreq, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>],[struct ipv6_mreq s;], [sc_cv_struct_ipv6_mreq=yes], [sc_cv_struct_ipv6_mreq=no])]) if test $sc_cv_struct_ipv6_mreq = yes; then AC_DEFINE(HAVE_STRUCT_IPV6_MREQ) fi AC_MSG_RESULT($sc_cv_struct_ipv6_mreq) # struct ifreq (for network interfaces) AC_MSG_CHECKING(for struct ifreq) AC_CACHE_VAL(sc_cv_struct_ifreq, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <net/if.h>],[struct ifreq s;], [sc_cv_struct_ifreq=yes], [sc_cv_struct_ifreq=no])]) if test $sc_cv_struct_ifreq = yes; then AC_DEFINE(HAVE_STRUCT_IFREQ) fi AC_MSG_RESULT($sc_cv_struct_ifreq) # struct ifreq.ifr_index # on most systems that have struct ifreq AC_MSG_CHECKING(for struct ifreq.ifr_index) AC_CACHE_VAL(sc_cv_struct_ifreq_ifr_index, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <net/if.h>], [struct ifreq ir;ir.ifr_index=0;], [sc_cv_struct_ifreq_ifr_index=yes], [sc_cv_struct_ifreq_ifr_index=no])]) if test $sc_cv_struct_ifreq_ifr_index = yes; then AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_INDEX) fi AC_MSG_RESULT($sc_cv_struct_ifreq_ifr_index) # struct ifreq.ifr_ifindex # Linux has ifr_ifindex instead of ifr_index AC_MSG_CHECKING(for struct ifreq.ifr_ifindex) AC_CACHE_VAL(sc_cv_struct_ifreq_ifr_ifindex, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <net/if.h>], [struct ifreq ir;ir.ifr_ifindex=0;], [sc_cv_struct_ifreq_ifr_ifindex=yes], [sc_cv_struct_ifreq_ifr_ifindex=no])]) if test $sc_cv_struct_ifreq_ifr_ifindex = yes; then AC_DEFINE(HAVE_STRUCT_IFREQ_IFR_IFINDEX) fi AC_MSG_RESULT($sc_cv_struct_ifreq_ifr_ifindex) # some systems have a sa_len field in struct sockaddr and we need to support it # so we can compare sockaddrs simply with memcmp AC_MSG_CHECKING(for struct sockaddr.sa_len) AC_CACHE_VAL(sc_cv_struct_sockaddr_salen, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h>], [struct sockaddr sa;sa.sa_len=0;], [sc_cv_struct_sockaddr_salen=yes], [sc_cv_struct_sockaddr_salen=no])]) if test $sc_cv_struct_sockaddr_salen = yes; then AC_DEFINE(HAVE_STRUCT_SOCKADDR_SALEN) fi AC_MSG_RESULT($sc_cv_struct_sockaddr_salen) ### IP6 sockaddr_in6 AC_MSG_CHECKING(for component names of sockaddr_in6) AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr.s6_addr[0]=0;], [AC_MSG_RESULT(s6_addr); AC_DEFINE(HAVE_IP6_SOCKADDR, 0)], [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr.u6_addr.u6_addr16[0]=0;], [AC_MSG_RESULT(u6_addr.u6_addr16); AC_DEFINE(HAVE_IP6_SOCKADDR, 1)], [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr.u6_addr16[0]=0;], [AC_MSG_RESULT(u6_addr16); AC_DEFINE(HAVE_IP6_SOCKADDR, 2)], [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr.in6_u.u6_addr16[0]=0;], [AC_MSG_RESULT(in6_u.u6_addr16); AC_DEFINE(HAVE_IP6_SOCKADDR, 3)], [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr._S6_un._S6_u32[0]=0;], [AC_MSG_RESULT(_S6_un._S6_u32); AC_DEFINE(HAVE_IP6_SOCKADDR, 4)], [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in.h>], [struct sockaddr_in6 sa6;sa6.sin6_addr.__u6_addr.__u6_addr32[0]=0;], [AC_MSG_RESULT(__u6_addr.__u6_addr32); AC_DEFINE(HAVE_IP6_SOCKADDR, 5)], [AC_MSG_RESULT([none or unknown])] )])])])])]) dnl Check for struct iovec AC_MSG_CHECKING(for struct iovec) AC_CACHE_VAL(sc_cv_struct_iovec, [AC_TRY_COMPILE([#include <sys/uio.h>],[struct iovec s;], [sc_cv_struct_iovec=yes], [sc_cv_struct_iovec=no])]) if test $sc_cv_struct_iovec = yes; then AC_DEFINE(HAVE_STRUCT_IOVEC) fi AC_MSG_RESULT($sc_cv_struct_iovec) dnl check for msg_control in struct msghdr AC_MSG_CHECKING(for struct msghdr.msg_control) AC_CACHE_VAL(sc_cv_struct_msghdr_msgcontrol, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h>], [struct msghdr s;s.msg_control=0;], [sc_cv_struct_msghdr_msgcontrol=yes], [sc_cv_struct_msghdr_msgcontrol=no])]) if test $sc_cv_struct_msghdr_msgcontrol = yes; then AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROL) fi AC_MSG_RESULT($sc_cv_struct_msghdr_msgcontrol) dnl check for msg_controllen in struct msghdr AC_MSG_CHECKING(for struct msghdr.msg_controllen) AC_CACHE_VAL(sc_cv_struct_msghdr_msgcontrollen, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h>], [struct msghdr s;s.msg_controllen=0;], [sc_cv_struct_msghdr_msgcontrollen=yes], [sc_cv_struct_msghdr_msgcontrollen=no])]) if test $sc_cv_struct_msghdr_msgcontrollen = yes; then AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGCONTROLLEN) fi AC_MSG_RESULT($sc_cv_struct_msghdr_msgcontrollen) dnl check for msg_flags in struct msghdr AC_MSG_CHECKING(for struct msghdr.msgflags) AC_CACHE_VAL(sc_cv_struct_msghdr_msgflags, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h>], [struct msghdr s;s.msg_flags=0;], [sc_cv_struct_msghdr_msgflags=yes], [sc_cv_struct_msghdr_msgflags=no])]) if test $sc_cv_struct_msghdr_msgflags = yes; then AC_DEFINE(HAVE_STRUCT_MSGHDR_MSGFLAGS) fi AC_MSG_RESULT($sc_cv_struct_msghdr_msgflags) dnl check for struct cmsghdr AC_MSG_CHECKING(for struct cmsghdr) AC_CACHE_VAL(sc_cv_struct_cmsghdr, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <net/if.h>],[struct cmsghdr s;], [sc_cv_struct_cmsghdr=yes], [sc_cv_struct_cmsghdr=no])]) if test $sc_cv_struct_cmsghdr = yes; then AC_DEFINE(HAVE_STRUCT_CMSGHDR) fi AC_MSG_RESULT($sc_cv_struct_cmsghdr) dnl check for struct in_pktinfo AC_MSG_CHECKING(for struct in_pktinfo) AC_CACHE_VAL(sc_cv_struct_in_pktinfo, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>],[struct in_pktinfo s;], [sc_cv_struct_in_pktinfo=yes], [sc_cv_struct_in_pktinfo=no])]) if test $sc_cv_struct_in_pktinfo = yes; then AC_DEFINE(HAVE_STRUCT_IN_PKTINFO) fi AC_MSG_RESULT($sc_cv_struct_in_pktinfo) if test $sc_cv_struct_in_pktinfo = 'yes'; then dnl check for component ipi_spec_dst in struct in_pktinfo AC_MSG_CHECKING(for ipi_spec_dst in struct in_pktinfo) AC_CACHE_VAL(sc_cv_pktinfo_ipi_spec_dst, [AC_TRY_COMPILE([#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>],[struct in_pktinfo s; s.ipi_spec_dst], [sc_cv_pktinfo_ipi_spec_dst=yes], [sc_cv_pktinfo_ipi_spec_dst=no])]) if test $sc_cv_pktinfo_ipi_spec_dst = yes; then AC_DEFINE(HAVE_PKTINFO_IPI_SPEC_DST) fi AC_MSG_RESULT($sc_cv_pktinfo_ipi_spec_dst) fi dnl check for struct in6_pktinfo AC_MSG_CHECKING(for struct in6_pktinfo) AC_CACHE_VAL(sc_cv_struct_in6_pktinfo, [AC_TRY_COMPILE([#include "sysincludes.h"], [struct in6_pktinfo s;], [sc_cv_struct_in6_pktinfo=yes], [sc_cv_struct_in6_pktinfo=no])]) if test $sc_cv_struct_in6_pktinfo = yes; then AC_DEFINE(HAVE_STRUCT_IN6_PKTINFO) fi AC_MSG_RESULT($sc_cv_struct_in6_pktinfo) dnl check for ip_hl in struct ip AC_MSG_CHECKING(for struct ip.ip_hl) AC_CACHE_VAL(sc_cv_struct_ip_ip_hl, [AC_TRY_COMPILE([#include <sys/types.h> #include <netinet/in_systm.h> #include <netinet/in.h> #include <netinet/ip.h>], [struct ip s;s.ip_hl=0;], [sc_cv_struct_ip_ip_hl=yes], [sc_cv_struct_ip_ip_hl=no])]) if test $sc_cv_struct_ip_ip_hl = yes; then AC_DEFINE(HAVE_STRUCT_IP_IP_HL) fi AC_MSG_RESULT($sc_cv_struct_ip_ip_hl) dnl Library function checks dnl Check sigaction() AC_CHECK_FUNC(sigaction, AC_DEFINE(HAVE_SIGACTION)) dnl Check for 64bit versions of system calls AC_CHECK_FUNC(stat64, AC_DEFINE(HAVE_STAT64)) AC_CHECK_FUNC(fstat64, AC_DEFINE(HAVE_FSTAT64)) AC_CHECK_FUNC(lstat64, AC_DEFINE(HAVE_LSTAT64)) AC_CHECK_FUNC(lseek64, AC_DEFINE(HAVE_LSEEK64)) AC_CHECK_FUNC(truncate64, AC_DEFINE(HAVE_TRUNCATE64)) AC_CHECK_FUNC(ftruncate64, AC_DEFINE(HAVE_FTRUNCATE64)) AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL)) AC_CHECK_FUNC(hstrerror, AC_DEFINE(HAVE_HSTRERROR)) AC_CHECK_FUNC(inet_ntop, AC_DEFINE(HAVE_INET_NTOP)) #if test "$ac_cv_func_hstrerror" = "yes"; then # AC_MSG_CHECKING(if _XOPEN_SOURCE_EXTENDED is helpful) # AC_CACHE_VAL(ac_cv_xopen_source_extended, # [AC_TRY_COMPILE([#include <netdb.h>], # [hstrerror()], # [ac_cv_xopen_source_extended=no], # [AC_TRY_COMPILE([#define _XOPEN_SOURCE_EXTENDED 1 ## include <netdb.h>], # [hstrerror()], # [ac_cv_xopen_source_extended=yes], # [ac_cv_xopen_source_extended=no] # )] # )]) # if test $ac_cv_xopen_source_extended = yes; then # AC_DEFINE(_XOPEN_SOURCE_EXTENDED) # fi # AC_MSG_RESULT($ac_cv_xopen_source_extended) #fi dnl Search for openpty() # MacOS AC_CHECK_FUNC(openpty, AC_DEFINE(HAVE_OPENPTY)) # AIX AC_CHECK_LIB(bsd, openpty, [LIBS="-lbsd $LIBS"; AC_DEFINE(HAVE_OPENPTY)]) # Linux 2.4 AC_CHECK_LIB(util, openpty, [LIBS="-lutil $LIBS"; AC_DEFINE(HAVE_OPENPTY)]) AC_CHECK_LIB(rt, clock_gettime, [LIBS="-lrt $LIBS"; AC_DEFINE(HAVE_CLOCK_GETTIME)]) dnl Search for flock() # with Linux it's in libc, with AIX in libbsd AC_CHECK_FUNC(flock, AC_DEFINE(HAVE_FLOCK), AC_CHECK_LIB(bsd, flock, [LIBS="-lbsd $LIBS"])) dnl Search for setenv() AC_CHECK_FUNC(setenv, AC_DEFINE(HAVE_SETENV), AC_CHECK_LIB(isode, setenv, [LIBS="-lisode $LIBS"])) dnl Search for unsetenv() AC_CHECK_FUNC(unsetenv, AC_DEFINE(HAVE_UNSETENV)) dnl Search for SSLv2_client_method, SSLv2_server_method AC_CHECK_FUNC(SSLv2_client_method, AC_DEFINE(HAVE_SSLv2_client_method), AC_CHECK_LIB(crypt, SSLv2_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv2_server_method, AC_DEFINE(HAVE_SSLv2_server_method), AC_CHECK_LIB(crypt, SSLv2_server_method, [LIBS=-lcrypt $LIBS])) dnl AC_CHECK_FUNC(SSL_CTX_set_default_verify_paths, AC_DEFINE(HAVE_SSL_CTX_set_default_verify_paths)) AC_CHECK_FUNC(SSLv3_client_method, AC_DEFINE(HAVE_SSLv3_client_method), AC_CHECK_LIB(crypt, SSLv3_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv3_server_method, AC_DEFINE(HAVE_SSLv3_server_method), AC_CHECK_LIB(crypt, SSLv3_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv23_client_method, AC_DEFINE(HAVE_SSLv23_client_method), AC_CHECK_LIB(crypt, SSLv23_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv23_server_method, AC_DEFINE(HAVE_SSLv23_server_method), AC_CHECK_LIB(crypt, SSLv23_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_client_method, AC_DEFINE(HAVE_TLSv1_client_method), AC_CHECK_LIB(crypt, TLSv1_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_server_method, AC_DEFINE(HAVE_TLSv1_server_method), AC_CHECK_LIB(crypt, TLSv1_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_1_client_method, AC_DEFINE(HAVE_TLSv1_1_client_method), AC_CHECK_LIB(crypt, TLSv1_1_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_1_client_method, AC_DEFINE(HAVE_TLSv1_1_client_method), AC_CHECK_LIB(crypt, TLSv1_1_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_1_server_method, AC_DEFINE(HAVE_TLSv1_1_server_method), AC_CHECK_LIB(crypt, TLSv1_1_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_2_client_method, AC_DEFINE(HAVE_TLSv1_2_client_method), AC_CHECK_LIB(crypt, TLSv1_2_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(TLSv1_2_server_method, AC_DEFINE(HAVE_TLSv1_2_server_method), AC_CHECK_LIB(crypt, TLSv1_2_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(DTLSv1_client_method, AC_DEFINE(HAVE_DTLSv1_client_method), AC_CHECK_LIB(crypt, DTLSv1_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(DTLSv1_server_method, AC_DEFINE(HAVE_DTLSv1_server_method), AC_CHECK_LIB(crypt, DTLSv1_server_method, [LIBS=-lcrypt $LIBS])) dnl Run time checks AC_MSG_CHECKING(if snprintf conforms to C99) AC_CACHE_VAL(ac_cv_have_c99_snprintf, [AC_TRY_RUN([ #include <stdio.h> #include <stdlib.h> int main(void){ char s[2]; exit(snprintf(s,2,"ab")!=2); }], [ac_cv_have_c99_snprintf=yes], [ac_cv_have_c99_snprintf=no], [ac_cv_have_c99_snprintf=no])]) if test $ac_cv_have_c99_snprintf = yes; then AC_DEFINE(HAVE_C99_SNPRINTF) fi AC_MSG_RESULT($ac_cv_have_c99_snprintf) AC_MSG_CHECKING(if printf has Z modifier) AC_CACHE_VAL(ac_cv_have_z_modifier, if test "$cc" = gcc; then [AC_TRY_RUN([ #include <stdlib.h> #include <stdio.h> int main(){ char s[16]; sprintf(s,"%Zu",1); exit(strcmp(s,"1")); }], [ac_cv_have_z_modifier=yes], [ac_cv_have_z_modifier=no], [ac_cv_have_z_modifier=no])] else ac_cv_have_z_modifier=no fi ) if test $ac_cv_have_z_modifier = yes; then AC_DEFINE(HAVE_FORMAT_Z) fi AC_MSG_RESULT($ac_cv_have_z_modifier) dnl find the number of bits we must shift a value to match the given mask dnl (e.g., mask 0x00f0 requires shifting with 4) ## NOTE: some platforms only need one '\' to escape '"' in string constant define(AC_SHIFT_OFFSET,[ AC_CACHE_CHECK(shift offset of $1, $2, [LIBS1="$LIBS"; LIBS="" # avoid libwrap allow_severity undefined conftestoffset="conftestoffset.out" AC_TRY_RUN([ #include <errno.h> #include <stdlib.h> #include <stdio.h> #include <termios.h> #include <string.h> int main(){ unsigned int i,n=$1; FILE *f; if ((f=fopen("$conftestoffset","w"))==NULL){ fprintf(stderr,"\\"$conftestoffset\\": %s\n",strerror(errno)); exit(-1); } if (n==0) {fprintf(stderr,"$1 is 0 (impossible!)\n"); exit(1);} i=0; while (!(n&1)) { n>>=1; ++i; } if (3<<i == $1) { fprintf(f, "%u", i); } else { fprintf(f, "-1"); /* anticipate result of xioinitialize assert */ } exit(0); } ], [$2=`cat $conftestoffset`], [$2=-1], [$2=-1] ) LIBS="$LIBS1"]) AC_DEFINE_UNQUOTED($1_SHIFT, ${$2}) if test "$2" = -1; then AC_MSG_WARN(please determine $1_SHIFT manually) fi ]) AC_SHIFT_OFFSET(CRDLY, sc_cv_sys_crdly_shift) AC_SHIFT_OFFSET(TABDLY, sc_cv_sys_tabdly_shift) AC_SHIFT_OFFSET(CSIZE, sc_cv_sys_csize_shift) dnl Find what physical type (basic C type) is equivalent to the given type. dnl If possible we try to compile simple test code and get no warning only with dnl the matching type. dnl If this method does not seem to work we run test programs that print the dnl length and signedness of the type. dnl do we have a -Werror option? dnl Does the test code compile with -Werror when types fit? CHANCE_TO_TYPECHECK=1 CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')" AC_TRY_COMPILE([#include <stdlib.h>],[int u; int v; exit(&u==&v);],,CHANCE_TO_TYPECHECK=0) CFLAGS="$CFLAGS1" dnl Does the test code compile without -Werror when types do not fit? if test "$CHANCE_TO_TYPECHECK" -ne 0; then AC_TRY_COMPILE([#include <stdlib.h>],[int u; unsigned int v; exit(&u==&v);],,CHANCE_TO_TYPECHECK=0) fi dnl Does the test code fail to compile with -Werror when types do not fit? if test "$CHANCE_TO_TYPECHECK" -ne 0; then CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')" AC_TRY_COMPILE([#include <stdlib.h>],[int u; unsigned int v; exit(&u==&v);],CHANCE_TO_TYPECHECK=0,) CFLAGS="$CFLAGS1" fi if test "$CHANCE_TO_TYPECHECK" -ne 0; then AC_MSG_NOTICE(using compile -Werror method to find basic types) else AC_MSG_NOTICE(using code run method to find basic types) fi dnl see AC_BASIC_TYPE define(AC_BASIC_TYPE_GCC,[ AC_CACHE_CHECK(for equivalent simple type of $2, $4, [CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')" dnl echo "echo: trying short for $2" >&2 AC_TRY_COMPILE([$1],[$2 u; short v; return(&u==&v);], [$4="1 /* short */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned short v; return(&u==&v);], [$4="2 /* unsigned short */"], [AC_TRY_COMPILE([$1],[$2 u; int v; return(&u==&v);], [$4="3 /* int */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned int v; return(&u==&v);], [$4="4 /* unsigned int */"], [AC_TRY_COMPILE([$1],[$2 u; long v; return(&u==&v);], [$4="5 /* long */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned long v; return(&u==&v);], [$4="6 /* unsigned long */"], [AC_TRY_COMPILE([$1],[$2 u; long long v; return(&u==&v);], [$4="7 /* long long */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned long long v; return(&u==&v);], [$4="8 /* unsigned long long */"], [$4="0 /* unknown, taking default */" ]) ]) ]) ]) ]) ]) ]) ]) CFLAGS="$CFLAGS1" ]) AC_DEFINE_UNQUOTED($3, ${$4}) ]) dnl see AC_BASIC_TYPE define(AC_BASIC_TYPE_OTHER,[ AC_CACHE_CHECK(for equivalent simple type of $2, $4, [AC_TRY_RUN([ $1 int main() { return!(sizeof($2)==sizeof(short));}], # same length as short AC_TRY_RUN([ $1 int main() { $2 x=-1; return !(x<0);}], [$4="1 /* short */"], [$4="2 /* unsigned short */"]), # length differs from short, try others AC_TRY_RUN([ $1 int main() { return!(sizeof($2)==sizeof(int));}], # same length as int AC_TRY_RUN([ $1 int main() { $2 x=-1; return !(x<0);}], [$4="3 /* int */"], [$4="4 /* unsigned int */"]), # length differs from int, try others AC_TRY_RUN([ $1 int main() { return !(sizeof($2)==sizeof(long));}], # same length as long AC_TRY_RUN([ $1 int main() { $2 x=-1; return !(x<0);}], [$4="5 /* long */"], [$4="6 /* unsigned long */"] ), # length differs from long, try others AC_TRY_RUN([ $1 int main() { return !(sizeof($2)==sizeof(long long));}], # same length as long long AC_TRY_RUN([ $1 int main() { $2 x=-1; return !(x<0);}], [$4="7 /* long long */"], [$4="8 /* unsigned long long */"] ), [$4="0 /* unknown */"] ) ) ) ) ]) AC_DEFINE_UNQUOTED($3, ${$4}) ]) dnl find what physical type (basic C type) is equivalent to the given type. dnl arg1: include file(s) dnl arg2: type name dnl arg3: output variable dnl arg4: cache variable (might be constructed automatically) dnl output values: 1..short, 2..unsigned short, 3..int, 4..u-int, dnl 5..long, 6..u-long; others not yet supported define(AC_BASIC_TYPE,[ if test "$CHANCE_TO_TYPECHECK" -ne 0; then AC_BASIC_TYPE_GCC([$1],[$2],[$3],[$4]) else AC_BASIC_TYPE_OTHER([$1],[$2],[$3],[$4]) fi ]) dnl See AC_TYPEOF_COMPONENT dnl This version is for compilers with -Werror or so: gcc, clang, Sun Studio? define(AC_TYPEOF_COMPONENT_GCC,[ AC_CACHE_CHECK(for basic type of $2.$3, $5, [CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')" AC_TRY_COMPILE([$1],[$2 u;short v; return(&u.$3==&v);], [$5="1 /* short */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned short v; return(&u.$3==&v);], [$5="2 /* unsigned short */"], [AC_TRY_COMPILE([$1],[$2 u; int v; return(&u.$3==&v);], [$5="3 /* int */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned int v; return(&u.$3==&v);], [$5="4 /* unsigned int */"], [AC_TRY_COMPILE([$1],[$2 u; long v; return(&u.$3==&v);], [$5="5 /* long */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned long v; return(&u.$3==&v);], [$5="6 /* unsigned long */"], [AC_TRY_COMPILE([$1],[$2 u; long long v; return(&u.$3==&v);], [$5="7 /* long long */"], [AC_TRY_COMPILE([$1],[$2 u; unsigned long long v; return(&u.$3==&v);], [$5="8 /* unsigned long long */"], [$5="0 /* unknown, taking default */" ]) ]) ]) ]) ]) ]) ]) ]) CFLAGS="$CFLAGS1" ]) AC_DEFINE_UNQUOTED($4, ${$5}) ]) dnl See AC_TYPEOF_COMPONENT dnl This version is for compilers with no -Werror or so define(AC_TYPEOF_COMPONENT_OTHER,[ AC_CACHE_CHECK(for basic type of $2.$3, $5, [AC_TRY_RUN([ $1 int main() { $2 x; return!(sizeof(x.$3)==sizeof(short));}], # same length as short AC_TRY_RUN([ $1 int main() { $2 x; x.$3=-1; return !(x.$3<0);}], [$5="1 /* short */"], [$5="2 /* unsigned short */"]), # length differs from short, try others AC_TRY_RUN([ $1 int main() { $2 x; return!(sizeof(x.$3)==sizeof(int));}], # same length as int AC_TRY_RUN([ $1 int main() { $2 x; x.$3=-1; return !(x.$3<0);}], [$5="3 /* int */"], [$5="4 /* unsigned int */"]), # length differs from int, try others AC_TRY_RUN([ $1 int main() { $2 x; return !(sizeof(x.$3)==sizeof(long));}], # same length as long AC_TRY_RUN([ $1 int main() { $2 x; x.$3=-1; return !(x.$3<0);}], [$5="5 /* long */"], [$5="6 /* unsigned long */"] ), # length differs from long, try others AC_TRY_RUN([ $1 int main() { $2 x; return !(sizeof(x.$3)==sizeof(long long));}], # same length as long long AC_TRY_RUN([ $1 int main() { x $2; x.$3=-1; return !(x.$3<0);}], [$5="7 /* long long */"], [$5="8 /* unsigned long long */"] ), [$5="0 /* unknown */"] ) ) ) ) ]) AC_DEFINE_UNQUOTED($4, ${$5}) ]) dnl find what physical type (basic C type) describes the given struct or union dnl component. dnl arg1: include file(s); must declare the structure type dnl arg2: struct name (e.g., "struct stat") dnl arg3: variable or component (e.g., "st_ino") dnl arg4: output variable, values see AC_BASIC_TYPE dnl arg5: cache variable (might be constructed automatically) define(AC_TYPEOF_COMPONENT,[ if test "$CHANCE_TO_TYPECHECK" -ne 0; then AC_TYPEOF_COMPONENT_GCC([$1],[$2],[$3],[$4],[$5]) else AC_TYPEOF_COMPONENT_OTHER([$1],[$2],[$3],[$4],[$5]) fi ]) AC_BASIC_TYPE([#include <stdlib.h>], size_t, HAVE_BASIC_SIZE_T, sc_cv_type_sizet_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <sys/stat.h> #include <unistd.h>], mode_t, HAVE_BASIC_MODE_T, sc_cv_type_modet_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <unistd.h>], pid_t, HAVE_BASIC_PID_T, sc_cv_type_pidt_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <unistd.h>], uid_t, HAVE_BASIC_UID_T, sc_cv_type_uidt_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <unistd.h>], gid_t, HAVE_BASIC_GID_T, sc_cv_type_gidt_basic) AC_BASIC_TYPE([#include <time.h>], time_t, HAVE_BASIC_TIME_T, sc_cv_type_timet_basic) # this is questionable, might fail on some systems AC_BASIC_TYPE([#include <sys/types.h> #include <sys/socket.h> #include <unistd.h>], socklen_t, HAVE_BASIC_SOCKLEN_T, sc_cv_type_socklent_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <unistd.h>], off_t, HAVE_BASIC_OFF_T, sc_cv_type_off_basic) AC_BASIC_TYPE([#include <sys/types.h> #include <unistd.h>], off64_t, HAVE_BASIC_OFF64_T, sc_cv_type_off64_basic) # oh god, __dev_t in Linux 2.4 is struct{int[2];}, not handled here yet. AC_BASIC_TYPE([#include <sys/stat.h>], dev_t, HAVE_BASIC_DEV_T, sc_cv_type_dev_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat, st_ino, HAVE_TYPEOF_ST_INO, sc_cv_type_stat_stino_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat, st_nlink, HAVE_TYPEOF_ST_NLINK, sc_cv_type_stat_stnlink_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat, st_size, HAVE_TYPEOF_ST_SIZE, sc_cv_type_stat_stsize_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat, st_blksize, HAVE_TYPEOF_ST_BLKSIZE, sc_cv_type_stat_stblksize_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat, st_blocks, HAVE_TYPEOF_ST_BLOCKS, sc_cv_type_stat_stblocks_basic) # if test "$ac_cv_func_stat64" = yes; then AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_dev, HAVE_TYPEOF_ST64_DEV, sc_cv_type_stat64_stdev_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_ino, HAVE_TYPEOF_ST64_INO, sc_cv_type_stat64_stino_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_nlink, HAVE_TYPEOF_ST64_NLINK, sc_cv_type_stat64_stnlink_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_size, HAVE_TYPEOF_ST64_SIZE, sc_cv_type_stat64_stsize_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_blksize, HAVE_TYPEOF_ST64_BLKSIZE, sc_cv_type_stat64_stblksize_basic) AC_TYPEOF_COMPONENT([#include <sys/stat.h>], struct stat64, st_blocks, HAVE_TYPEOF_ST64_BLOCKS, sc_cv_type_stat64_stblocks_basic) fi AC_TYPEOF_COMPONENT([#include <sys/time.h>], struct timeval, tv_usec, HAVE_TYPEOF_STRUCT_TIMEVAL_TV_USEC, sc_cv_type_struct_timeval_tv_usec) AC_TYPEOF_COMPONENT([#include <sys/types.h> #include <sys/time.h> #include <sys/resource.h>], struct rlimit, rlim_max, HAVE_TYPEOF_RLIM_MAX, sc_cv_type_rlimit_rlimmax_basic) # Fedora-19 doc says it is socklen_t which is equivalent to unsigned int, but it is equivalent to size_t (x86_64) AC_TYPEOF_COMPONENT([#include "sysincludes.h"], struct cmsghdr, cmsg_len, HAVE_TYPEOF_STRUCT_CMSGHDR_CMSG_LEN, sc_cv_typeof_struct_cmsghdr_cmsg_len) ### snprintf, vsnprintf AC_MSG_CHECKING(for /dev/ptmx) if test -c /dev/ptmx; then AC_DEFINE(HAVE_DEV_PTMX, 1) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_CHECKING(for /dev/ptc) if test -c /dev/ptc; then AC_DEFINE(HAVE_DEV_PTC) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi fi AC_MSG_CHECKING(for /proc) if test -d /proc; then AC_DEFINE(HAVE_PROC_DIR, 1) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(for /proc/*/fd) if test -d /proc/$$/fd; then AC_DEFINE(HAVE_PROC_DIR_FD, 1) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi dnl "tcpd" "tcpwrappers" # on some platforms, raw linking with libwrap fails because allow_severity and # deny_severity are not explicitely defined. Thus we put the libwrap part to # the end AC_MSG_CHECKING(whether to include libwrap support) AC_ARG_ENABLE(libwrap, [ --disable-libwrap disable libwrap support], [ case "$enableval" in no) AC_MSG_RESULT(no); WITH_LIBWRAP= ;; *) AC_MSG_RESULT(yes); WITH_LIBWRAP=1 ;; esac], [ AC_MSG_RESULT(yes); WITH_LIBWRAP=1 ]) # # check if we find the components of libwrap ("tcpd" "tcpwrappers") if test -n "$WITH_LIBWRAP"; then AC_MSG_CHECKING(for components of libwrap) # first, we need to find the include file <tcpd.h> AC_CACHE_VAL(sc_cv_have_tcpd_h, [AC_TRY_COMPILE([#include <sys/types.h> #include <tcpd.h>],[;], [sc_cv_have_tcpd_h=yes; LIBWRAP_ROOT=""], [sc_cv_have_tcpd_h=no for D in "/sw" "/usr/local" "/opt/freeware" "/usr/sfw"; do I="$D/include" i="$I/tcpd.h" if test -r "$i"; then #V_INCL="$V_INCL -I$I" CPPFLAGS="$CPPFLAGS -I$I" AC_MSG_NOTICE(found $i) sc_cv_have_tcpd_h=yes; LIBWRAP_ROOT="$D" break; fi done]) ]) if test "$sc_cv_have_tcpd_h" = "yes"; then AC_DEFINE(HAVE_TCPD_H) fi AC_MSG_NOTICE(checked for tcpd.h... $sc_cv_have_tcpd_h) fi # end checking for tcpd.h if test -n "$WITH_LIBWRAP" -a "$sc_cv_have_tcpd_h" = yes; then # next, we search for the wrap library (libwrap.*) AC_MSG_CHECKING(for libwrap) AC_CACHE_VAL(sc_cv_have_libwrap, [ LIBS0="$LIBS" if test -n "$LIBWRAP_ROOT"; then L="$LIBWRAP_ROOT/lib"; LIBS="-L$L -lwrap $LIBS" else LIBS="-lwrap $LIBS" fi AC_TRY_LINK([#include <sys/types.h> #include <tcpd.h> int allow_severity,deny_severity;],[hosts_access(0)], [sc_cv_have_libwrap='yes'], [sc_cv_have_libwrap='no' LIBS="$LIBS -lnsl" # RedHat73 AC_TRY_LINK([#include <sys/types.h> #include <tcpd.h> int allow_severity,deny_severity;],[hosts_access(0)], [sc_cv_have_libwrap='yes'], [sc_cv_have_libwrap='no']) ] ) if test "$sc_cv_have_libwrap" != 'yes'; then LIBS="$LIBS0" fi ] ) if test "$sc_cv_have_libwrap" = 'yes'; then AC_DEFINE(HAVE_LIBWRAP) fi AC_MSG_RESULT($sc_cv_have_libwrap) fi # if test -n "$WITH_LIBWRAP"; then if test "$sc_cv_have_tcpd_h" = "yes" -a "$sc_cv_have_libwrap" = "yes"; then AC_DEFINE(WITH_LIBWRAP) else AC_MSG_WARN([not all components of tcp wrappers found, disabling it]); fi fi # check of hosts_allow_table if test -n "$WITH_LIBWRAP"; then AC_MSG_CHECKING(for hosts_allow_table) AC_CACHE_VAL(sc_cv_have_hosts_allow_table, [AC_TRY_COMPILE([#include <sys/types.h> #include <tcpd.h>],[hosts_allow_table="";], [sc_cv_have_hosts_allow_table=yes], [sc_cv_have_hosts_allow_table=no])]) if test $sc_cv_have_hosts_allow_table = yes; then AC_DEFINE(HAVE_HOSTS_ALLOW_TABLE) fi AC_MSG_RESULT($sc_cv_have_hosts_allow_table) fi # test -n "$WITH_LIBWRAP" if test "$GCC" = yes; then CFLAGS="$CFLAGS" fi # FIPS support requires compiling with fipsld. # fipsld requires the FIPSLD_CC variable to be set to the original CC. # This check must be done after all other checks that require compiling # so that fipsld is not used by the configure script itself. if test -n "$WITH_FIPS"; then if test "$sc_cv_have_openssl_fips_h" = 'yes' -a "$sc_cv_have_libcrypto" = 'yes'; then FIPSLD_CC=$CC if test "${FIPSLD+set}" != set ; then FIPSLD=fipsld fi CC="FIPSLD_CC=$CC $FIPSLD" fi fi AC_SUBST(FIPSLD_CC) # autoconf does not seem to provide AC_CHECK_VAR or so # thus we have to check by foot AC_MSG_CHECKING(for declaration of environ) AC_CACHE_VAL(sc_cv_decl_environ, [AC_TRY_COMPILE([#include <unistd.h>],[char **s = environ;], [sc_cv_decl_environ=yes], [sc_cv_decl_environ=no])]) if test $sc_cv_decl_environ = yes; then AC_DEFINE(HAVE_DECL_ENVIRON) fi AC_MSG_RESULT($sc_cv_decl_environ) # on some systems environ exists but not the declaration AC_MSG_CHECKING(for var environ) AC_CACHE_VAL(sc_cv_var_environ, [AC_TRY_COMPILE([],[extern char **environ; char **s = environ;], [sc_cv_var_environ=yes], [sc_cv_var_environ=no])]) if test $sc_cv_var_environ = yes; then AC_DEFINE(HAVE_VAR_ENVIRON) fi AC_MSG_RESULT($sc_cv_var_environ) # allow BUILD_DATE to be externally set for build reproducibility if test "$BUILD_DATE"; then AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"]) else AC_DEFINE(BUILD_DATE, [__DATE__" "__TIME__]) fi AC_OUTPUT(Makefile)