|
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 |