mirror of
https://repo.or.cz/socat.git
synced 2024-12-22 23:42:34 +00:00
2041 lines
67 KiB
Text
2041 lines
67 KiB
Text
dnl source: configure.in
|
|
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)
|
|
|
|
|
|
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])
|
|
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 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
|
|
s="$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" -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"
|
|
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
|
|
|
|
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) AC_DEFINE(WITH_MSGLEVEL,0) AC_MSG_RESULT(debug);;
|
|
1|info) AC_DEFINE(WITH_MSGLEVEL,1) AC_MSG_RESULT(info);;
|
|
2|notice) AC_DEFINE(WITH_MSGLEVEL,2) AC_MSG_RESULT(notice);;
|
|
3|warn) AC_DEFINE(WITH_MSGLEVEL,3) AC_MSG_RESULT(warn);;
|
|
4|error) AC_DEFINE(WITH_MSGLEVEL,4) AC_MSG_RESULT(error);;
|
|
5|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(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
|
|
|
|
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/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/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))
|
|
|
|
AC_CHECK_FUNC(SSL_CTX_set_min_proto_version, AC_DEFINE(HAVE_SSL_CTX_set_min_proto_version))
|
|
AC_CHECK_FUNC(SSL_CTX_set_max_proto_version, AC_DEFINE(HAVE_SSL_CTX_set_max_proto_version))
|
|
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]))
|
|
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]))
|
|
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_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 <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
|
|
|
|
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)
|