summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac460
1 files changed, 460 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..274bb9c
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,460 @@
+dnl ===================================================================
+dnl configure.ac
+dnl Process this file with autogen.sh to produce configure files
+dnl ===================================================================
+
+
+AC_PREREQ(2.59)
+AC_INIT(Iperf,2.1.9)
+AC_CONFIG_HEADER([config.h])
+AM_INIT_AUTOMAKE()
+
+dnl The end user may not have autotools
+AM_MAINTAINER_MODE([disable])
+
+m4_include([m4/ax_create_stdint_h.m4])
+m4_include([m4/dast.m4])
+m4_include([m4/ax_pthread.m4])
+
+AC_ARG_ENABLE(ipv6, AC_HELP_STRING([--disable-ipv6],
+ [disable ipv6 support (default is autodetect)]),
+ ac_cv_have_ipv6=$enable_ipv6)
+
+AC_ARG_ENABLE(multicast, AC_HELP_STRING([--disable-multicast],
+ [disable multicast support (default is autodetect)]),
+ ac_cv_multicast=$enable_multicast)
+
+AC_ARG_ENABLE(tcpstats, AC_HELP_STRING([--disable-tcpstats],
+ [disable tcpstats support (default is autodetect)]),
+ ac_cv_tcpstats=$enable_tcpstats)
+
+AC_ARG_ENABLE(threads, AC_HELP_STRING([--disable-threads],
+ [disable thread support (default is autodetect)]))
+
+AC_ARG_ENABLE(debuginfo, AC_HELP_STRING([--enable-debuginfo],
+ [enable asserts and debugging info for sockets (default is no)]),
+ enable_debuginfo=$enableval,
+ enable_debuginfo=no)
+
+AC_ARG_ENABLE(web100, AC_HELP_STRING([--disable-web100],
+ [disable web100 support (default is autodetect)]))
+
+AC_ARG_ENABLE(kalman, AC_HELP_STRING([--disable-kalman],
+ [disable kalman delay tuning (default is enable)]))
+
+AC_ARG_ENABLE(role_reversal_id, AC_HELP_STRING([--disable-role-reversal-id],
+ [disable role reversal special characters (default is enable)]))
+
+AC_ARG_ENABLE(default_localonly, AC_HELP_STRING([--enable-default-localonly],
+ [enforce limiting test traffic to local-only network (via socket SO_DONTROUTE) as the default mode]))
+
+AC_ARG_ENABLE(seqno64b, AC_HELP_STRING([--disable-seqno64b],
+ [disable 64 bit sequence numer support (default is enable)]))
+
+AC_ARG_ENABLE(fastsampling, AC_HELP_STRING([--enable-fastsampling],
+ [enable support for 100 microsecond report intervals (default is disable)]))
+AM_CONDITIONAL([FASTSAMPLING], [test "x$enable_fastsampling" = "xyes"])
+
+AC_ARG_ENABLE(discover_defaultlen, AC_HELP_STRING([--enable-discover-defaultlen],
+ [enable support to set the default payload size after device MTU discovery (default is disable)]))
+AM_CONDITIONAL([DISCOVER_DEFAULTLEN], [test "x$enable_discover_defaultlen" = "xyes"])
+
+AC_ARG_ENABLE(thread_debug, AC_HELP_STRING([--enable-thread-debug],
+ [enable support for thread debugging (default is disable)]))
+AM_CONDITIONAL([THREAD_DEBUG], [test "x$enable_thread_debug" = "xyes"])
+
+AC_ARG_ENABLE(packet_debug, AC_HELP_STRING([--enable-packet-debug],
+ [enable support for packet level debugging (default is disable)]))
+AM_CONDITIONAL([PACKET_DEBUG], [test "x$enable_packet_debug" = "xyes"])
+
+AC_ARG_ENABLE(checkprograms, AC_HELP_STRING([--enable-checkprograms],
+ [enable support for building support programs such as checkdelay, checkpdfs, etc. (default is disable)]))
+AM_CONDITIONAL([CHECKPROGRAMS], [test "x$enable_checkprograms" = "xyes"])
+
+AC_ARG_ENABLE([static-bin],
+ AS_HELP_STRING([--enable-static-bin], [link iperf binary statically]),
+ [enable_static_bin=yes],
+ [:])
+AM_CONDITIONAL([ENABLE_STATIC_BIN], [test x$enable_static_bin = xno])
+
+AS_IF([test "x$enable_static_bin" = xyes],
+ [CFLAGS="$CFLAGS --static"; CXXFLAGS="$CXXFLAGS --static"; LDFLAGS="$LDFLAGS --static"]
+ [])
+
+AC_ARG_ENABLE(debug_symbols,
+AS_HELP_STRING([--enable-debug-symbols],
+ [enable debugging with symbols, default: no]),
+[case "${enableval}" in
+ yes) debug_symbols=true ;;
+ no) debug_symbols=false ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug-symbols]) ;;
+esac],
+[debug_symbols=false])
+
+AM_CONDITIONAL(DEBUG_SYMBOLS, test x"$debug_symbols" = x"true")
+
+dnl AF_PACKET support
+AC_ARG_ENABLE(af-packet,
+ AS_HELP_STRING([--enable-af-packet], [Enable AF_PACKET support [default=yes]]),,[enable_af_packet=yes])
+
+AS_IF([test "x$enable_af_packet" = "xyes"], [
+ AC_CHECK_DECL([TPACKET_V2],
+ AC_DEFINE([HAVE_AF_PACKET],[1],[AF_PACKET support is available]),
+ [enable_af_packet="no"],
+ [[#include <sys/socket.h>
+ #include <linux/if_packet.h>]])
+ AM_CONDITIONAL([AF_PACKET], [test "x${enable_af_packet}" = "xyes"])
+])
+
+dnl TUNTAP_TUN support
+AC_ARG_ENABLE(tuntap-tun,
+ AS_HELP_STRING([--enable-tuntap-tun], [Enable TUNTAP_TUN support [default=yes]]),,[enable_tuntap_tun=yes])
+
+AS_IF([test "x$enable_tuntap_tun" = "xyes"], [
+ AC_CHECK_DECLS([IFF_TUN],
+ AC_DEFINE([HAVE_TUNTAP_TUN],[1],[TUNTAP_TUN support is available]),
+ [enable_tuntap_tun="no"],
+ [[#include <linux/if_tun.h>]])
+ AM_CONDITIONAL([TUNTAP_TUN], [test "x${enable_tuntap_tun}" = "xyes"])
+])
+
+dnl TUNTAP_TAP support
+AC_ARG_ENABLE(tuntap-tap,
+ AS_HELP_STRING([--enable-tuntap-tap], [Enable TUNTAP_TAP support [default=yes]]),,[enable_tuntap_tap=yes])
+
+AS_IF([test "x$enable_tuntap_tap" = "xyes"], [
+ AC_CHECK_DECLS([IFF_TAP],
+ AC_DEFINE([HAVE_TUNTAP_TAP],[1],[TUNTAP_TAP support is available]),
+ [enable_tuntap_tap="no"],
+ [[#include <linux/if_tun.h>]])
+ AM_CONDITIONAL([TUNTAP_TAP], [test "x${enable_tuntap_tap}" = "xyes"])
+])
+
+dnl ===================================================================
+dnl Checks for programs
+dnl ===================================================================
+
+AC_PROG_CXX
+AC_PROG_CC
+AC_ISC_POSIX
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AC_LANG(C)
+AC_CANONICAL_HOST
+
+dnl ===================================================================
+dnl Checks for libraries.
+dnl ===================================================================
+AC_CHECK_LIB([rt], [clock_gettime])
+
+dnl check for -lpthread
+
+if test "$enable_threads" != no; then
+ AX_PTHREAD()
+ if test "$ax_pthread_ok" = yes; then
+ AC_DEFINE([HAVE_POSIX_THREAD], 1,)
+ AC_DEFINE([_REENTRANT], 1,)
+ fi
+fi
+
+dnl check for -lnsl, -lsocket
+AC_SEARCH_LIBS([gethostbyname], [nsl])
+AC_SEARCH_LIBS([socket], [socket], [],
+ [AC_CHECK_HEADER([winsock2.h],[
+
+ AC_DEFINE([HAVE_WINSOCK2_H], 1, [Define if winsock2.h exists.])
+ if test "$ax_pthread_ok" != yes; then
+ AC_DEFINE([HAVE_WIN32_THREAD], 1, [Define if using WIN32 threads])
+ fi
+ LIBS="-lws2_32 $LIBS"],
+ [],
+ [#include <windows.h>])])
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([arpa/inet.h libintl.h net/ethernet.h net/if.h sys/ioctl.h sys/sockio.h linux/sockios.h linux/ip.h linux/udp.h linux/if_packet.h linux/filter.h linux/if_tun.h netdb.h netinet/in.h netinet/tcp.h stdlib.h string.h strings.h sys/socket.h sys/time.h syslog.h unistd.h signal.h ifaddrs.h])
+
+dnl ===================================================================
+dnl Checks for typedefs, structures
+dnl ===================================================================
+
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_CHECK_TYPES(ssize_t,,AC_DEFINE_UNQUOTED(ssize_t, int))
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+AC_CHECK_TYPES(int64_t)
+
+AC_CACHE_CHECK(3rd argument of accept, ac_cv_accept_arg, [
+ dnl Try socklen_t (POSIX)
+ DAST_ACCEPT_ARG(socklen_t)
+
+ dnl Try int (original BSD)
+ DAST_ACCEPT_ARG(int)
+
+ dnl Try size_t (older standard; AIX)
+ DAST_ACCEPT_ARG(size_t)
+
+ dnl Try short (shouldn't be)
+ DAST_ACCEPT_ARG(short)
+
+ dnl Try long (shouldn't be)
+ DAST_ACCEPT_ARG(long)
+])
+
+if test -z "$ac_cv_accept_arg" ; then
+ ac_cv_accept_arg=int
+fi
+
+AC_DEFINE_UNQUOTED([Socklen_t], $ac_cv_accept_arg, [Define 3rd arg of accept])
+
+dnl Checks for library functions.
+AC_FUNC_MEMCMP
+AC_FUNC_SELECT_ARGTYPES
+AC_TYPE_SIGNAL
+AC_FUNC_STRFTIME
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([atexit memset select strchr strerror strtol strtoll strtod usleep clock_gettime sched_setscheduler sched_yield mlockall setitimer nanosleep clock_nanosleep freopen])
+AC_REPLACE_FUNCS(snprintf inet_pton inet_ntop gettimeofday)
+AC_CHECK_DECLS([ENOBUFS, EWOULDBLOCK],[],[],[#include <errno.h>])
+AC_CHECK_DECLS([SIOCGIFMTU],[],[],[
+#ifdef HAVE_LINUX_SOCKIOS_H
+#include <linux/sockios.h>
+#endif
+#ifdef HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+])
+AC_CHECK_DECLS([pthread_cancel],[],[],[#include <pthread.h>])
+AC_CHECK_DECLS([CPU_SET],[],[],[
+ #define _GNU_SOURCE
+ #include <sched.h>
+ ])
+AC_CHECK_DECLS([SIGALRM],[],[],[#include <signal.h>])
+
+
+in_h='
+#ifdef HAVE_WINSOCK2_H
+#define _WIN32_WINNT 0x0501 /* use (at least) WinXP API */
+#define WIN32_LEAN_AND_MEAN /* exclude unnecesary headers */
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#endif
+'
+
+AC_CHECK_DECLS([AF_INET6, SO_TIMESTAMP, SO_SNDTIMEO, SO_REUSEPORT, SO_BINDTODEVICE, MSG_DONTWAIT,
+ SO_MAX_PACING_RATE, SO_DONTROUTE, IPV6_TCLASS, IP_MULTICAST_ALL, IP_TOS,
+ MCAST_JOIN_GROUP, MCAST_JOIN_SOURCE_GROUP, IPV6_JOIN_GROUP, IPV6_V6ONLY,
+ IPV6_ADD_MEMBERSHIP, IPV6_MULTICAST_HOPS, MSG_PEEK, MSG_WAITALL,
+ TCP_NODELAY, TCP_INFO, TCP_CONNECTION_INFO, TCP_WINDOW_CLAMP, TCP_QUICKACK,
+ TCP_NOTSENT_LOWAT, TCP_MAXSEG, IP_ADD_MEMBERSHIP, IP_ADD_SOURCE_MEMBERSHIP],
+ [],[],[$in_h])
+
+AC_CHECK_TYPES([struct sockaddr_storage, struct sockaddr_in6,
+ struct group_source_req, struct ip_mreq,
+ struct ipv6_mreq, struct ip_mreq_source],,,[$in_h])
+
+AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len,
+ struct ip_mreq_source.imr_multiaddr.s_addr], [], [],[$in_h])
+
+AC_CHECK_MEMBER([struct tcp_info.tcpi_total_retrans], [], [],[
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+])
+
+AC_CHECK_MEMBERS([struct tcp_info.tcpi_total_retrans], [], [],[
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+])
+
+dnl ===================================================================
+dnl Check for compiler characteristics
+
+AC_HEADER_STDBOOL
+
+AC_C_BIGENDIAN
+
+dnl ===================================================================
+dnl Check for system services
+AC_MSG_CHECKING([for gettid syscall])
+AC_TRY_LINK([#include <unistd.h>
+#include <sys/syscall.h>
+], [syscall(SYS_gettid);], [ok=yes], [ok=no])
+if test "$ok" = "yes"; then
+ AC_DEFINE(HAVE_GETTID_SYSCALL,1,[Define if syscall(SYS_gettid) available.])
+fi
+AC_MSG_RESULT(${ok})
+
+dnl check for multicast
+if test "$ac_cv_multicast" != no; then
+ AC_MSG_CHECKING(for multicast support)
+ ac_cv_multicast=no
+ if test "$ac_cv_have_decl_IP_ADD_MEMBERSHIP" = yes; then
+ if test "$ac_cv_type_struct_ip_mreq" = yes; then
+ ac_cv_multicast=yes
+ fi
+ fi
+ AC_MSG_RESULT($ac_cv_multicast)
+ if test "$ac_cv_multicast" = yes; then
+ AC_DEFINE([HAVE_MULTICAST], 1, [Define to enable multicast support])
+ fi
+ AC_MSG_CHECKING(for multicast ssm support)
+ ac_cv_ssm_multicast=no
+ if test "$ac_cv_have_decl_MCAST_JOIN_SOURCE_GROUP" = yes || test "$ac_cv_have_decl_IP_ADD_SOURCE_MEMBERSHIP" = yes; then
+ if test "$ac_cv_type_struct_group_source_req" = yes; then
+ ac_cv_ssm_multicast=yes
+ fi
+ fi
+ AC_MSG_RESULT($ac_cv_ssm_multicast)
+ if test "$ac_cv_ssm_multicast" = yes; then
+ AC_DEFINE([HAVE_SSM_MULTICAST], 1, [Define to enable ssm multicast support])
+ fi
+fi
+
+dnl check for tcpstats
+if test "$ac_cv_tcpstats" != no; then
+ AC_MSG_CHECKING(for tcpstats support)
+ ac_cv_tcpstats=no
+ if test "$ac_cv_have_decl_TCP_INFO" = yes; then
+ AC_MSG_CHECKING(for TCP_INFO_TCPI_TOTAL_RETRANS support)
+ if test "$ac_cv_member_struct_tcp_info_tcpi_total_retrans" = yes; then
+ ac_cv_tcpstats=yes
+ fi
+ fi
+ if test "$ac_cv_have_decl_TCP_CONNECTION_INFO" = yes; then
+ ac_cv_tcpstats=yes
+ fi
+ AC_MSG_RESULT($ac_cv_tcpstats)
+ if test "$ac_cv_tcpstats" = yes; then
+ AC_DEFINE([HAVE_TCP_STATS], 1, [Define to enable tcp stats support])
+ fi
+fi
+
+dnl check for IPv6
+if test "$ac_cv_have_ipv6" != no; then
+ AC_MSG_CHECKING(for IPv6 headers and structures)
+ ac_cv_have_ipv6=no
+ if test "$ac_cv_type_struct_sockaddr_storage" = yes; then
+ if test "$ac_cv_type_struct_sockaddr_in6" = yes; then
+ if test "$ac_cv_have_decl_AF_INET6" = yes; then
+ AC_DEFINE([HAVE_IPV6], 1, [Define to enable IPv6 support])
+ ac_cv_have_ipv6=yes
+ fi
+ fi
+ fi
+ AC_MSG_RESULT($ac_cv_have_ipv6)
+fi
+
+if test "$ac_cv_have_ipv6" = yes; then
+ if test "$ac_cv_multicast" = yes; then
+ AC_MSG_CHECKING(for IPv6 multicast support)
+ ac_cv_have_ipv6_multicast=no
+ if test "$ac_cv_type_struct_ipv6_mreq" = yes; then
+ if test "$ac_cv_have_decl_IPV6_ADD_MEMBERSHIP" = yes; then
+ if test "$ac_cv_have_decl_IPV6_MULTICAST_HOPS" = yes; then
+ AC_DEFINE([HAVE_IPV6_MULTICAST], 1, [Define to enable IPv6 multicast support])
+ ac_cv_have_ipv6_multicast=yes
+ fi
+ fi
+ fi
+ AC_MSG_RESULT($ac_cv_have_ipv6_multicast)
+ fi
+fi
+
+
+if test "$enable_thread_debug" = yes; then
+ AC_DEFINE([HAVE_THREAD_DEBUG], 1, [Define for thread level debugging of the code])
+else
+ if test "$enable_debuginfo" = yes; then
+ AC_DEFINE([DBG_MJZ], 1, [Define if debugging info is desired])
+ else
+ AC_DEFINE([NDEBUG], [1], [Define to disable asserts])
+ fi
+fi
+
+if test "$enable_web100" != no; then
+if test -e "/proc/web100"; then
+if test -d "/proc/web100"; then
+if test -e "/proc/web100/header"; then
+if test -f "/proc/web100/header"; then
+if test -r "/proc/web100/header"; then
+AM_PATH_WEB100()
+if test "$web100_success" = yes; then
+AC_DEFINE([HAVE_WEB100], 1, [Define if Web100 is desired and available])
+fi fi fi fi fi fi
+fi
+
+if test "$enable_kalman" != no; then
+AC_DEFINE([HAVE_KALMAN], 1, [Define if Kalman tuning is desired and available])
+fi
+
+if test "$enable_role_reversal_id" != no; then
+AC_DEFINE([HAVE_ROLE_REVERSAL_ID], 1, [Define if role reversal ids are desired ])
+fi
+
+if test "$enable_default_localonly" = yes; then
+AC_DEFINE([HAVE_DEFAULT_DONTROUTE_ON], 1, [Define if limiting test traffic to the local-only network (via socket SO_DONTROUTE) should be the default])
+fi
+
+if test "$enable_seqno64b" != no; then
+AC_DEFINE([HAVE_SEQNO64b], 1, [Define if 64 bit sequence numbers are desired and available])
+fi
+
+if test "$enable_isochronous" != no; then
+AC_DEFINE([HAVE_ISOCHRONOUS], 1, [Define if isochronous traffic option is desired and available])
+fi
+
+if test "$enable_fastsampling" = yes; then
+AC_DEFINE([HAVE_FASTSAMPLING], 1, [Define if fast sampling for report intervals is desired])
+fi
+if test "$enable_discover_defaultlen" = yes; then
+AC_DEFINE([DEFAULT_PAYLOAD_LEN_PER_MTU_DISCOVERY], 1, [Define if default UDP payload length is based on device MTU and socket buffer size])
+fi
+
+if test "$enable_packet_debug" = yes; then
+AC_DEFINE([HAVE_PACKET_DEBUG], 1, [Define if packet level debugging is desired])
+fi
+
+case "$ac_cv_host" in
+*-mingw32)
+ dnl Static link on MINGW for standalone DOS executable
+ LIBS="$LIBS -static-libstdc++ -static";;
+*-android)
+ dnl Android requires PIE
+ CFLAGS="$CFLAGS -fPIE"; LDFLAGS="$LDFLAGS -pie";;
+esac
+
+
+dnl GNU make allows us to use the $(strip ...) builtin which eliminates a
+dnl large amount of extra whitespace in compile lines.
+AC_MSG_CHECKING(whether make is GNU make)
+STRIP_BEGIN=
+STRIP_END=
+if $ac_make --version 2> /dev/null | grep '^GNU Make ' > /dev/null ; then
+ STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
+ STRIP_END=')'
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl some Make 3.79 $(strip ) versions are broken and require an empty arg
+STRIP_DUMMY=
+AC_SUBST(STRIP_DUMMY)
+AC_SUBST(STRIP_BEGIN)
+AC_SUBST(STRIP_END)
+
+AC_CONFIG_FILES([Makefile
+ compat/Makefile
+ doc/Makefile
+ include/Makefile
+ src/Makefile
+ man/Makefile])
+AC_OUTPUT