| dnl source: configure.ac |
| dnl Copyright Gerhard Rieger and contributors (see file CHANGES) |
| 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) |
| |
| # getprotobynumber_r() is not standardized |
| AC_MSG_CHECKING(for getprotobynumber_r() variant) |
| AC_CACHE_VAL(sc_cv_getprotobynumber_r, |
| [AC_TRY_LINK([#include <stddef.h> |
| #include <netdb.h>],[getprotobynumber_r(1,NULL,NULL,1024,NULL);], |
| [sc_cv_getprotobynumber_r=1; tmp_bynum_variant=Linux], |
| [AC_TRY_LINK([#include <stddef.h> |
| #include <netdb.h>],[getprotobynumber_r(1,NULL,NULL,1024);], |
| [sc_cv_getprotobynumber_r=2; tmp_bynum_variant=Solaris], |
| [AC_TRY_LINK([#include <stddef.h> |
| #include <netdb.h>],[getprotobynumber_r(1,NULL,NULL);], |
| [sc_cv_getprotobynumber_r=3; tmp_bynum_variant=AIX], |
| |
| [sc_cv_getprotobynumber_r=] |
| )])])]) |
| if test "$sc_cv_getprotobynumber_r"; then |
| AC_DEFINE_UNQUOTED(HAVE_GETPROTOBYNUMBER_R, $sc_cv_getprotobynumber_r) |
| fi |
| AC_MSG_RESULT($sc_cv_getprotobynumber_r /* $tmp_bynum_variant */) |
| |
| |
| 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 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 |
| #ifdef HAVE_NETINET_IP_H |
| # include <netinet/ip.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 vsock support) |
| AC_ARG_ENABLE(vsock, [ --disable-vsock disable vsock support], |
| [case "$enableval" in |
| no) AC_MSG_RESULT(no); WITH_VSOCK= ;; |
| *) AC_MSG_RESULT(yes); WITH_VSOCK=1 ;; |
| esac], |
| [AC_MSG_RESULT(yes); WITH_VSOCK=1 ]) |
| if test "$WITH_VSOCK"; then |
| AC_CHECK_HEADER(linux/vm_sockets.h, |
| AC_DEFINE(HAVE_LINUX_VM_SOCKETS_H), |
| [WITH_VSOCK=; |
| AC_MSG_WARN([include file linux/vm_sockets.h not found, disabling vsock])], |
| [AC_INCLUDES_DEFAULT |
| #if HAVE_SYS_SOCKET_H |
| #include <sys/socket.h> |
| #endif |
| ] |
| ) |
| fi |
| if test "$WITH_VSOCK"; then |
| AC_DEFINE(WITH_VSOCK) |
| 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 fs attributes support) |
| AC_ARG_ENABLE(fs, [ --disable-fs disable fs attributes support], |
| [case "$enableval" in |
| no) AC_MSG_RESULT(no);; |
| *) AC_DEFINE(WITH_FS) AC_MSG_RESULT(yes);; |
| esac], |
| [AC_DEFINE(WITH_FS) 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 ]) |
| AC_ARG_ENABLE(openssl_base, [ --enable-openssl-base specify directory with include/ and lib/], |
| [ OPENSSL_BASE="$enableval" ], |
| [ unset OPENSSL_BASE ]) |
| # |
| if test -n "$WITH_OPENSSL"; then |
| if test -n "$OPENSSL_BASE"; then |
| sc_cv_have_openssl_ssl_h=yes; OPENSSL_BASE="$D" |
| else |
| 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_BASE=""; ], |
| [sc_cv_have_openssl_ssl_h=no |
| if [ "$OPENSSL_BASE" ]; then |
| Ds="$OPENSSL_BASE" |
| else |
| Ds="/sw /usr/local /opt/freeware /usr/sfw /usr/local/ssl" |
| fi |
| for D in $Ds; 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_BASE="$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 |
| fi # end checking for openssl/ssl.h |
| # |
| |
| #if test -n "$WITH_OPENSSL"; then |
| # AC_CHECK_FUNCS(OPENSSL_init_ssl, SSL_library_init) |
| #fi |
| |
| 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 and higher requires -lcrypto even on Linux. |
| AC_MSG_CHECKING(for libssl) |
| AC_CACHE_VAL(sc_cv_have_libssl, |
| [ LIBS0="$LIBS" |
| if test -n "$OPENSSL_BASE"; then |
| L="$OPENSSL_BASE/lib"; LIBS="$LIBS -L$L -lssl -lcrypto" |
| else |
| LIBS="$LIBS -lssl -lcrypto" |
| fi |
| AC_TRY_LINK([#include <openssl/ssl.h> |
| #include <openssl/err.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 |
| |
| AC_CHECK_FUNCS(OPENSSL_init_ssl SSL_library_init) |
| |
| #; sc_cv_have_SSL_library_init='yes'; AC_DEFINE(HAVE_SSL_library_init) |
| #if test -n "$WITH_OPENSSL"; then |
| # AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) |
| # FOUND_SSL_LIB="no" |
| # AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"]) |
| # AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"]) |
| # AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL; WITH_OPENSSL=])]) |
| # AS_IF([test "x$FOUND_SSL_LIB" = xyes], [LIBS="$LIBS -L$L -lssl -lcrypto"]) |
| #fi |
| |
| if test -n "$WITH_OPENSSL"; then |
| AC_MSG_CHECKING(whether to include OpenSSL method option) |
| AC_ARG_ENABLE(openssl-method, [ --enable-openssl-method enable OpenSSL method option], |
| [case "$enableval" in |
| no) AC_MSG_RESULT(no);; |
| *) AC_DEFINE(WITH_OPENSSL_METHOD) WITH_OPENSSL_METHOD=1; AC_MSG_RESULT(yes);; |
| esac], |
| [AC_MSG_RESULT(no)]) |
| fi |
| |
| AC_MSG_CHECKING(whether to include deprecated resolver option) |
| AC_ARG_ENABLE(res-deprecated, [ --enable-res-deprecated enable deprecated resolver options], |
| [case "$enableval" in |
| no) AC_MSG_RESULT(no);; |
| *) AC_DEFINE(WITH_RES_DEPRECATED) WITH_RES_DEPRECATED=1; AC_MSG_RESULT(yes);; |
| esac], |
| [AC_MSG_RESULT(no)]) |
| |
| # 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_BASE"; then |
| I="$OPENSSL_BASE/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_BASE"; then |
| L="$OPENSSL_BASE/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 |
| 0|DEBUG|Debug|debug) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);; |
| 1|INFO|Info|info) AC_DEFINE(WITH_MSGLEVEL,1) AC_MSG_RESULT(info);; |
| 2|NOTICE|Notice|notice) AC_DEFINE(WITH_MSGLEVEL,2) AC_MSG_RESULT(notice);; |
| 3|WARN|Warn|warn) AC_DEFINE(WITH_MSGLEVEL,3) AC_MSG_RESULT(warn);; |
| 4|ERROR|Error|error) AC_DEFINE(WITH_MSGLEVEL,4) AC_MSG_RESULT(error);; |
| 5|FATAL|Fatal|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 pselect poll socket strtod strtol) |
| AC_CHECK_FUNCS(strtoul uname getpgid getsid gethostbyname getaddrinfo) |
| AC_CHECK_FUNCS(getprotobynumber) |
| AC_CHECK_FUNCS(setgroups inet_aton) |
| |
| 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 |
| |
| dnl Search for cfsetispeed(),cfgetispeed(),cfsetspeed(),cfgetospeed() functions |
| AC_CHECK_FUNCS(cfsetispeed cfgetispeed cfsetospeed cfgetospeed) |
| |
| ################################### |
| # check for prototype and existence of functions that return a pointer |
| # defines in config.h: HAVE_PROTOTYPE_LIB_$1 |
| AC_CHECK_PROTOTYPE_LIB(posix_memalign) |
| AC_CHECK_PROTOTYPE_LIB(strdup) |
| AC_CHECK_PROTOTYPE_LIB(strerror) |
| AC_CHECK_PROTOTYPE_LIB(strstr) |
| AC_CHECK_PROTOTYPE_LIB(getipnodebyname) |
| AC_CHECK_PROTOTYPE_LIB(strndup) |
| 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 struct termios . c_ispeed) |
| AC_TRY_COMPILE([#include <unistd.h> |
| #if HAVE_TERMIOS_H |
| #include <termios.h> |
| #endif], |
| [struct termios s; s.c_ispeed=0;], |
| [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRUCT_TERMIOS_C_ISPEED)], |
| [AC_MSG_RESULT(no);]) |
| |
| AC_MSG_CHECKING(for struct termios . c_ospeed) |
| AC_TRY_COMPILE([#include <unistd.h> |
| #if HAVE_TERMIOS_H |
| #include <termios.h> |
| #endif], |
| [struct termios s; s.c_ospeed=0;], |
| [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRUCT_TERMIOS_C_OSPEED)], |
| [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) |
| |
| # 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 (for IPv4 header info) |
| AC_MSG_CHECKING(for struct ip) |
| AC_CACHE_VAL(sc_cv_struct_ip, |
| [AC_TRY_COMPILE([#include <netinet/in.h> |
| #include <netinet/ip.h>],[struct ip s;], |
| [sc_cv_struct_ip=yes], |
| [sc_cv_struct_ip=no])]) |
| if test $sc_cv_struct_ip = yes; then |
| AC_DEFINE(HAVE_STRUCT_IP) |
| fi |
| AC_MSG_RESULT($sc_cv_struct_ip) |
| |
| # 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/in.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 ip_mreq_source (for multicasting options) |
| AC_MSG_CHECKING(for struct ip_mreq_source) |
| AC_CACHE_VAL(sc_cv_struct_ip_mreq_source, |
| [AC_TRY_COMPILE([#include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <netinet/ip.h>],[struct ip_mreq_source s;], |
| [sc_cv_struct_ip_mreq_source=yes], |
| [sc_cv_struct_ip_mreq_source=no])]) |
| if test $sc_cv_struct_ip_mreq_source = yes; then |
| AC_DEFINE(HAVE_STRUCT_IP_MREQ_SOURCE) |
| fi |
| AC_MSG_RESULT($sc_cv_struct_ip_mreqn) |
| |
| |
| # 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_PROTOTYPE_LIB(gettimeofday) |
| |
| AC_CHECK_FUNC(clock_gettime, AC_DEFINE(HAVE_CLOCK_GETTIME), 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)) |
| |
| AC_CHECK_FUNC(TLS_client_method, AC_DEFINE(HAVE_TLS_client_method) ac_cv_have_tls_client_method=yes, AC_CHECK_LIB(crypt, TLS_client_method, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(TLS_server_method, AC_DEFINE(HAVE_TLS_server_method) ac_cv_have_tls_server_method=yes, AC_CHECK_LIB(crypt, TLS_server_method, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(DTLS_client_method, AC_DEFINE(HAVE_DTLS_client_method), AC_CHECK_LIB(crypt, DTLS_client_method, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(DTLS_server_method, AC_DEFINE(HAVE_DTLS_server_method), AC_CHECK_LIB(crypt, DTLS_server_method, [LIBS=-lcrypt $LIBS])) |
| if test -n "$WITH_OPENSSL_METHOD" -o -z "$ac_cv_have_tls_client_method" -o -z "$ac_cv_have_tls_server_method" ; then |
| 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(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_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])) |
| AC_CHECK_FUNC(DTLSv1_2_client_method, AC_DEFINE(HAVE_DTLSv1_2_client_method), AC_CHECK_LIB(crypt, DTLSv1_2_client_method, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(DTLSv1_2_server_method, AC_DEFINE(HAVE_DTLSv1_2_server_method), AC_CHECK_LIB(crypt, DTLSv1_2_server_method, [LIBS=-lcrypt $LIBS])) |
| fi # $WITH_OPENSSL_METHOD |
| |
| AC_CHECK_FUNC(SSL_CTX_set_default_verify_paths, AC_DEFINE(HAVE_SSL_CTX_set_default_verify_paths)) |
| AC_CHECK_FUNC(RAND_egd, AC_DEFINE(HAVE_RAND_egd), AC_CHECK_LIB(crypt, RAND_egd, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(DH_set0_pqg, AC_DEFINE(HAVE_DH_set0_pqg), AC_CHECK_LIB(crypt, DH_set0_pqg, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(ASN1_STRING_get0_data, AC_DEFINE(HAVE_ASN1_STRING_get0_data), AC_CHECK_LIB(crypt, ASN1_STRING_get0_data, [LIBS=-lcrypt $LIBS])) |
| AC_CHECK_FUNC(RAND_status, AC_DEFINE(HAVE_RAND_status)) |
| AC_CHECK_FUNC(SSL_CTX_clear_mode, AC_DEFINE(HAVE_SSL_CTX_clear_mode)) |
| AC_CHECK_FUNC(SSL_set_tlsext_host_name, AC_DEFINE(HAVE_SSL_set_tlsext_host_name)) |
| AC_CHECK_FUNC(SSL_library_init, AC_DEFINE(HAVE_SSL_library_init)) |
| AC_CHECK_FUNC(ERR_error_string, AC_DEFINE(HAVE_ERR_error_string)) |
| |
| AC_MSG_CHECKING(for type EC_KEY) |
| AC_CACHE_VAL(sc_cv_type_EC_TYPE, |
| [AC_TRY_COMPILE([#include <openssl/ec.h> |
| ],[EC_KEY *s;], |
| [sc_cv_type_EC_KEY=yes], |
| [sc_cv_type_EC_KEY=no])]) |
| if test $sc_cv_type_EC_KEY = yes; then |
| AC_DEFINE(HAVE_TYPE_EC_KEY) |
| fi |
| AC_MSG_RESULT($sc_cv_type_EC_KEY) |
| |
| |
| 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(void){ |
| 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 <stdint.h>], uint16_t, HAVE_BASIC_UINT16_T, sc_cv_type_uint16_basic) |
| AC_BASIC_TYPE([#include <stdint.h>], uint32_t, HAVE_BASIC_UINT32_T, sc_cv_type_uint32_basic) |
| AC_BASIC_TYPE([#include <stdint.h>], uint64_t, HAVE_BASIC_UINT64_T, sc_cv_type_uint64_basic) |
| AC_BASIC_TYPE([#include <stdint.h>], int16_t, HAVE_BASIC_INT16_T, sc_cv_type_int16_basic) |
| AC_BASIC_TYPE([#include <stdint.h>], int32_t, HAVE_BASIC_INT32_T, sc_cv_type_int32_basic) |
| AC_BASIC_TYPE([#include <stdint.h>], int64_t, HAVE_BASIC_INT64_T, sc_cv_type_int64_basic) |
| 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_BASIC_TYPE([#include <unistd.h> |
| #include <termios.h>], speed_t, HAVE_BASIC_SPEED_T, sc_cv_type_spee_t) |
| |
| 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/time.h>], struct timespec, tv_nsec, HAVE_TYPEOF_STRUCT_TIMESPEC_TV_NSEC, sc_cv_type_struct_timespec_tv_nsec) |
| |
| 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 |
| |
| # On Solaris family, we have to use /proc/$$/path/N |
| AC_MSG_CHECKING(for /proc/*/path) |
| if test -d /proc/$$/path; then |
| AC_DEFINE(HAVE_PROC_DIR_PATH, 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 "$SOURCE_DATE_EPOCH"; then |
| DATE_FMT="%d %b %Y %H:%M:%S" |
| BUILD_DATE=$(LC_ALL=C date -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT") |
| AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"]) |
| elif test "$BUILD_DATE"; then |
| AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"]) |
| else |
| AC_DEFINE(BUILD_DATE, [__DATE__" "__TIME__]) |
| fi |
| |
| AC_OUTPUT(Makefile) |