version 1.1, 2016/10/18 13:28:17
|
version 1.1.1.3, 2023/09/27 11:14:54
|
Line 1
|
Line 1
|
# iperf, Copyright (c) 2014, 2015, 2016, The Regents of the University of | # iperf, Copyright (c) 2014-2022, The Regents of the University of |
# California, through Lawrence Berkeley National Laboratory (subject |
# California, through Lawrence Berkeley National Laboratory (subject |
# to receipt of any required approvals from the U.S. Dept. of |
# to receipt of any required approvals from the U.S. Dept. of |
# Energy). All rights reserved. |
# Energy). All rights reserved. |
Line 24
|
Line 24
|
# file for complete information. |
# file for complete information. |
|
|
# Initialize the autoconf system for the specified tool, version and mailing list |
# Initialize the autoconf system for the specified tool, version and mailing list |
AC_INIT(iperf, 3.1.3, https://github.com/esnet/iperf, iperf, http://software.es.net/iperf/) | AC_PREREQ([2.71]) |
| AC_INIT([iperf],[3.15],[https://github.com/esnet/iperf],[iperf],[https://software.es.net/iperf/]) |
| m4_include([config/ax_check_openssl.m4]) |
| m4_include([config/iperf_config_static_bin.m4]) |
AC_LANG(C) |
AC_LANG(C) |
|
|
# Specify where the auxiliary files created by configure should go. The config |
# Specify where the auxiliary files created by configure should go. The config |
Line 33 AC_CONFIG_AUX_DIR(config)
|
Line 36 AC_CONFIG_AUX_DIR(config)
|
|
|
|
|
# Initialize the automake system |
# Initialize the automake system |
AM_INIT_AUTOMAKE | AM_INIT_AUTOMAKE([foreign]) |
| m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) |
| LT_INIT |
| |
AM_MAINTAINER_MODE |
AM_MAINTAINER_MODE |
AM_CONFIG_HEADER(src/iperf_config.h) | AC_CONFIG_HEADERS(src/iperf_config.h) |
|
|
AC_CANONICAL_HOST |
AC_CANONICAL_HOST |
|
|
Line 44 AC_CANONICAL_HOST
|
Line 50 AC_CANONICAL_HOST
|
AC_PROG_CC |
AC_PROG_CC |
AC_PROG_RANLIB |
AC_PROG_RANLIB |
AC_PROG_LN_S |
AC_PROG_LN_S |
AC_PROG_LIBTOOL | LT_INIT |
|
|
# Add -Wall if we are using GCC. |
# Add -Wall if we are using GCC. |
if test "x$GCC" = "xyes"; then |
if test "x$GCC" = "xyes"; then |
CFLAGS="$CFLAGS -Wall" |
CFLAGS="$CFLAGS -Wall" |
fi |
fi |
|
|
# Checks for header files. | # Check if enable profiling |
AC_HEADER_STDC | AC_ARG_ENABLE([profiling], |
| AS_HELP_STRING([--enable-profiling], [Enable iperf3 profiling binary])) |
| AM_CONDITIONAL([ENABLE_PROFILING], [test x$enable_profiling = xyes]) |
|
|
# Check for systems which need -lsocket and -lnsl |
|
#AX_LIB_SOCKET_NSL |
|
|
|
# Check for the math library (needed by cjson on some platforms) |
# Check for the math library (needed by cjson on some platforms) |
AC_SEARCH_LIBS(floor, [m], [], [ |
AC_SEARCH_LIBS(floor, [m], [], [ |
echo "floor()" |
echo "floor()" |
exit 1 |
exit 1 |
]) |
]) |
|
|
# Solaris puts nanosleep in -lrt |
|
AC_SEARCH_LIBS(nanosleep, [rt], [], [ |
|
echo "nanosleep() required for timing operations." |
|
exit 1 |
|
]) |
|
|
|
# Solaris puts hstrerror in -lresolv |
|
AC_SEARCH_LIBS(hstrerror, [resolv], [], [ |
|
echo "nanosleep() required for timing operations." |
|
exit 1 |
|
]) |
|
|
|
# On illumos we need -lsocket |
# On illumos we need -lsocket |
AC_SEARCH_LIBS(socket, [socket], [], [ |
AC_SEARCH_LIBS(socket, [socket], [], [ |
echo "socket()" |
echo "socket()" |
Line 90 exit 1
|
Line 83 exit 1
|
# Checks for typedefs, structures, and compiler characteristics. |
# Checks for typedefs, structures, and compiler characteristics. |
AC_C_CONST |
AC_C_CONST |
|
|
|
# Check for poll.h (it's in POSIX so everyone should have it?) |
|
AC_CHECK_HEADERS([poll.h]) |
|
|
|
# SCTP. Allow user to disable SCTP support with --without-sctp. |
|
# Otherwise we try to find whatever support is required. |
|
try_sctp=true |
|
AC_ARG_WITH([sctp], |
|
[AS_HELP_STRING([--without-sctp], |
|
[disable SCTP])], |
|
[ |
|
case "$withval" in |
|
y | ye | yes) |
|
;; |
|
n | no) |
|
try_sctp=false |
|
;; |
|
*) |
|
AC_MSG_ERROR([Invalid --with-sctp value]) |
|
;; |
|
esac |
|
], [ |
|
try_sctp=true |
|
] |
|
) |
|
|
|
AC_CHECK_HEADERS([linux/tcp.h]) |
|
|
# Check for SCTP support |
# Check for SCTP support |
|
if $try_sctp; then |
AC_CHECK_HEADERS([sys/socket.h]) |
AC_CHECK_HEADERS([sys/socket.h]) |
AC_CHECK_HEADERS([netinet/sctp.h], |
AC_CHECK_HEADERS([netinet/sctp.h], |
AC_DEFINE([HAVE_SCTP], [1], [Have SCTP support.]) | AC_DEFINE([HAVE_SCTP_H], [1], [Have SCTP support.]) |
AC_SEARCH_LIBS(sctp_bindx, [sctp]) |
AC_SEARCH_LIBS(sctp_bindx, [sctp]) |
AC_CHECK_TYPES([struct sctp_assoc_value], [], [], |
AC_CHECK_TYPES([struct sctp_assoc_value], [], [], |
[[#include <netinet/sctp.h>]]), |
[[#include <netinet/sctp.h>]]), |
Line 102 AC_CHECK_HEADERS([netinet/sctp.h],
|
Line 123 AC_CHECK_HEADERS([netinet/sctp.h],
|
#include <sys/socket.h> |
#include <sys/socket.h> |
#endif |
#endif |
]) |
]) |
|
fi |
|
|
|
AC_CHECK_HEADER([endian.h], |
|
AC_DEFINE([HAVE_ENDIAN_H], [1], [Define to 1 if you have the <endian.h> header file.]), |
|
AC_CHECK_HEADER([sys/endian.h], |
|
AC_DEFINE([HAVE_SYS_ENDIAN_H], [1], [Define to 1 if you have the <sys/endian.h> header file.]), |
|
AC_MSG_WARN([Couldn't find endian.h or sys/endian.h files: doing compile-time tests.]) |
|
) |
|
) |
|
|
|
if test "x$with_openssl" = "xno"; then |
|
AC_MSG_WARN( [Building without OpenSSL; disabling iperf_auth functionality.] ) |
|
else |
|
# Check for OPENSSL support |
|
havs_ssl=false |
|
AX_CHECK_OPENSSL( |
|
[ AC_DEFINE([HAVE_SSL], [1], [OpenSSL Is Available]) |
|
have_ssl=true ], |
|
[ if test "x$with_openssl" != "x"; then |
|
AC_MSG_FAILURE([--with-openssl was given, but test for OpenSSL failed]) |
|
fi ] |
|
) |
|
if $have_ssl; then |
|
case $host in |
|
*-*-cygwin) |
|
CFLAGS="$CFLAGS -DNOCRYPT" |
|
;; |
|
esac |
|
LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS" |
|
LIBS="$OPENSSL_LIBS $LIBS" |
|
CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS" |
|
fi |
|
fi |
|
|
# Check for TCP_CONGESTION sockopt (believed to be Linux and FreeBSD only) |
# Check for TCP_CONGESTION sockopt (believed to be Linux and FreeBSD only) |
AC_CACHE_CHECK([TCP_CONGESTION socket option], |
AC_CACHE_CHECK([TCP_CONGESTION socket option], |
[iperf3_cv_header_tcp_congestion], |
[iperf3_cv_header_tcp_congestion], |
AC_EGREP_CPP(yes, | AC_COMPILE_IFELSE( |
[#include <netinet/tcp.h> | [AC_LANG_PROGRAM([[#include <netinet/tcp.h>]], |
#ifdef TCP_CONGESTION | [[int foo = TCP_CONGESTION;]])], |
yes | iperf3_cv_header_tcp_congestion=yes, |
#endif | iperf3_cv_header_tcp_congestion=no)) |
],iperf3_cv_header_tcp_congestion=yes,iperf3_cv_header_tcp_congestion=no)) | |
if test "x$iperf3_cv_header_tcp_congestion" = "xyes"; then |
if test "x$iperf3_cv_header_tcp_congestion" = "xyes"; then |
AC_DEFINE([HAVE_TCP_CONGESTION], [1], [Have TCP_CONGESTION sockopt.]) |
AC_DEFINE([HAVE_TCP_CONGESTION], [1], [Have TCP_CONGESTION sockopt.]) |
fi |
fi |
|
|
|
# Check for TCP_USER_TIMEOUT sockopt (believed to be Linux 2.6.37+ only) |
|
AC_CACHE_CHECK([TCP_USER_TIMEOUT socket option], |
|
[iperf3_cv_header_tcp_user_timeout], |
|
AC_COMPILE_IFELSE( |
|
[AC_LANG_PROGRAM([[#include <netinet/tcp.h>]], |
|
[[int foo = TCP_USER_TIMEOUT;]])], |
|
iperf3_cv_header_tcp_user_timeout=yes, |
|
iperf3_cv_header_tcp_user_timeout=no)) |
|
if test "x$iperf3_cv_header_tcp_user_timeout" = "xyes"; then |
|
AC_DEFINE([HAVE_TCP_USER_TIMEOUT], [1], [Have TCP_USER_TIMEOUT sockopt.]) |
|
fi |
|
|
# Check for IPv6 flowlabel support (believed to be Linux only) |
# Check for IPv6 flowlabel support (believed to be Linux only) |
# We check for IPV6_FLOWLABEL_MGR in <linux/in6.h> even though we |
# We check for IPV6_FLOWLABEL_MGR in <linux/in6.h> even though we |
# don't use that file directly (we have our own stripped-down |
# don't use that file directly (we have our own stripped-down |
# copy, see src/flowlabel.h for more details). |
# copy, see src/flowlabel.h for more details). |
AC_CACHE_CHECK([IPv6 flowlabel support], |
AC_CACHE_CHECK([IPv6 flowlabel support], |
[iperf3_cv_header_flowlabel], |
[iperf3_cv_header_flowlabel], |
AC_EGREP_CPP(yes, | AC_COMPILE_IFELSE( |
[#include <sys/types.h> | [AC_LANG_PROGRAM([[#include <sys/types.h> |
#include <linux/in6.h> | #include <linux/in6.h>]], |
#ifdef IPV6_FLOWLABEL_MGR | [[int foo = IPV6_FLOWLABEL_MGR;]])], |
yes | iperf3_cv_header_flowlabel=yes, |
#endif | iperf3_cv_header_flowlabel=no)) |
],iperf3_cv_header_flowlabel=yes,iperf3_cv_header_flowlabel=no)) | |
if test "x$iperf3_cv_header_flowlabel" = "xyes"; then |
if test "x$iperf3_cv_header_flowlabel" = "xyes"; then |
AC_DEFINE([HAVE_FLOWLABEL], [1], [Have IPv6 flowlabel support.]) |
AC_DEFINE([HAVE_FLOWLABEL], [1], [Have IPv6 flowlabel support.]) |
fi |
fi |
Line 138 fi
|
Line 202 fi
|
# FreeBSD uses cpuset_setaffinity while Linux uses sched_setaffinity. |
# FreeBSD uses cpuset_setaffinity while Linux uses sched_setaffinity. |
# Define HAVE_CPU_AFFINITY to indicate the CPU affinity setting as a |
# Define HAVE_CPU_AFFINITY to indicate the CPU affinity setting as a |
# generic concept is available. |
# generic concept is available. |
AC_CHECK_FUNCS([cpuset_setaffinity sched_setaffinity], | AC_CHECK_FUNCS([cpuset_setaffinity sched_setaffinity SetProcessAffinityMask], |
AC_DEFINE([HAVE_CPU_AFFINITY], [1], |
AC_DEFINE([HAVE_CPU_AFFINITY], [1], |
[Have CPU affinity support.])) |
[Have CPU affinity support.])) |
|
|
|
# Check for daemon(). Most systems have this but a few (IRIX) don't. |
|
AC_CHECK_FUNCS([daemon]) |
|
|
# Check for sendfile support. FreeBSD, Linux, and MacOS all support |
# Check for sendfile support. FreeBSD, Linux, and MacOS all support |
# this system call, but they're all different in terms of what headers |
# this system call, but they're all different in terms of what headers |
# it needs and what arguments it expects. |
# it needs and what arguments it expects. |
AC_CHECK_FUNCS([sendfile]) |
AC_CHECK_FUNCS([sendfile]) |
|
|
|
# Check for getline support, used as a part of authenticated |
|
# connections. |
|
AC_CHECK_FUNCS([getline]) |
|
|
# Check for packet pacing socket option (Linux only for now). |
# Check for packet pacing socket option (Linux only for now). |
AC_CACHE_CHECK([SO_MAX_PACING_RATE socket option], |
AC_CACHE_CHECK([SO_MAX_PACING_RATE socket option], |
[iperf3_cv_header_so_max_pacing_rate], |
[iperf3_cv_header_so_max_pacing_rate], |
AC_EGREP_CPP(yes, | AC_COMPILE_IFELSE( |
[#include <sys/socket.h> | [AC_LANG_PROGRAM([[#include <sys/socket.h>]], |
#ifdef SO_MAX_PACING_RATE | [[int foo = SO_MAX_PACING_RATE;]])], |
yes | iperf3_cv_header_so_max_pacing_rate=yes, |
#endif | iperf3_cv_header_so_max_pacing_rate=no)) |
],iperf3_cv_header_so_max_pacing_rate=yes,iperf3_cv_header_so_max_pacing_rate=no)) | |
if test "x$iperf3_cv_header_so_max_pacing_rate" = "xyes"; then |
if test "x$iperf3_cv_header_so_max_pacing_rate" = "xyes"; then |
AC_DEFINE([HAVE_SO_MAX_PACING_RATE], [1], [Have SO_MAX_PACING_RATE sockopt.]) |
AC_DEFINE([HAVE_SO_MAX_PACING_RATE], [1], [Have SO_MAX_PACING_RATE sockopt.]) |
fi |
fi |
|
|
|
# Check for SO_BINDTODEVICE sockopt (believed to be Linux only) |
|
AC_CACHE_CHECK([SO_BINDTODEVICE socket option], |
|
[iperf3_cv_header_so_bindtodevice], |
|
AC_COMPILE_IFELSE( |
|
[AC_LANG_PROGRAM([[#include <sys/socket.h>]], |
|
[[int foo = SO_BINDTODEVICE;]])], |
|
iperf3_cv_header_so_bindtodevice=yes, |
|
iperf3_cv_header_so_bindtodevice=no)) |
|
if test "x$iperf3_cv_header_so_bindtodevice" = "xyes"; then |
|
AC_DEFINE([HAVE_SO_BINDTODEVICE], [1], [Have SO_BINDTODEVICE sockopt.]) |
|
fi |
|
|
AC_OUTPUT([Makefile src/Makefile src/version.h examples/Makefile iperf3.spec]) | # Check for IP_MTU_DISCOVER (mostly on Linux) |
| AC_CACHE_CHECK([IP_MTU_DISCOVER socket option], |
| [iperf3_cv_header_ip_mtu_discover], |
| AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM([[#include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h>]], |
| [[int foo = IP_MTU_DISCOVER;]])], |
| iperf3_cv_header_ip_mtu_discover=yes, |
| iperf3_cv_header_ip_mtu_discover=no)) |
| if test "x$iperf3_cv_header_ip_mtu_discover" = "xyes"; then |
| AC_DEFINE([HAVE_IP_MTU_DISCOVER], [1], [Have IP_MTU_DISCOVER sockopt.]) |
| fi |
| |
| # Check for IP_DONTFRAG (BSD?) |
| AC_CACHE_CHECK([IP_DONTFRAG socket option], |
| [iperf3_cv_header_ip_dontfrag], |
| AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM([[#include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h>]], |
| [[int foo = IP_DONTFRAG;]])], |
| iperf3_cv_header_ip_dontfrag=yes, |
| iperf3_cv_header_ip_dontfrag=no)) |
| if test "x$iperf3_cv_header_ip_dontfrag" = "xyes"; then |
| AC_DEFINE([HAVE_IP_DONTFRAG], [1], [Have IP_DONTFRAG sockopt.]) |
| fi |
| |
| # Check for IP_DONTFRAGMENT (Windows?) |
| AC_CACHE_CHECK([IP_DONTFRAGMENT socket option], |
| [iperf3_cv_header_ip_dontfragment], |
| AC_COMPILE_IFELSE( |
| [AC_LANG_PROGRAM([[#include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h>]], |
| [[int foo = IP_DONTFRAGMENT;]])], |
| iperf3_cv_header_ip_dontfragment=yes, |
| iperf3_cv_header_ip_dontfragment=no)) |
| if test "x$iperf3_cv_header_ip_dontfragment" = "xyes"; then |
| AC_DEFINE([HAVE_IP_DONTFRAGMENT], [1], [Have IP_DONTFRAGMENT sockopt.]) |
| fi |
| |
| # Check for IP DF support |
| AC_CACHE_CHECK([any kind of DF socket option], |
| [iperf3_cv_header_dontfragment], |
| [if test "x$iperf3_cv_header_ip_mtu_discover" = "xyes" -o "x$iperf3_cv_header_ip_dontfrag" = "xyes" -o "x$iperf3_cv_header_ip_dontfragment" = "xyes"; then |
| iperf3_cv_header_dontfragment=yes |
| else |
| iperf3_cv_header_dontfragment=no |
| fi]) |
| |
| if test "x$iperf3_cv_header_dontfragment" = "xyes"; then |
| AC_DEFINE([HAVE_DONT_FRAGMENT], [1], [Have IP_MTU_DISCOVER/IP_DONTFRAG/IP_DONTFRAGMENT sockopt.]) |
| fi |
| |
| # |
| # Check for tcpi_snd_wnd in struct tcp_info |
| # |
| AC_CHECK_MEMBER([struct tcp_info.tcpi_snd_wnd], |
| [iperf3_cv_header_tcp_info_snd_wnd=yes], [iperf3_cv_header_tcp_info_snd_wnd=no], |
| [#ifdef HAVE_LINUX_TCP_H |
| #include <linux/tcp.h> |
| #else |
| #include <sys/types.h> |
| #include <netinet/tcp.h> |
| #endif |
| ]) |
| |
| if test "x$iperf3_cv_header_tcp_info_snd_wnd" = "xyes"; then |
| AC_DEFINE([HAVE_TCP_INFO_SND_WND], [1], [Have tcpi_snd_wnd field in tcp_info.]) |
| fi |
| |
| # Check if we need -lrt for clock_gettime |
| AC_SEARCH_LIBS(clock_gettime, [rt posix4]) |
| # Check for clock_gettime support |
| AC_CHECK_FUNCS([clock_gettime]) |
| |
| AC_CONFIG_FILES([Makefile src/Makefile src/version.h examples/Makefile iperf3.spec]) |
| AC_OUTPUT |