dnl Process this file with autoconf to produce a configure script.
-AC_INIT([rsync],[3.2.0dev],[http://rsync.samba.org/bugzilla.html])
+AC_INIT([rsync],[3.2.2dev],[https://rsync.samba.org/bugtracking.html])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([byteorder.h])
AC_PROG_CC
AC_PROG_CPP
AC_PROG_CXX
+AC_PROG_AWK
AC_PROG_EGREP
AC_PROG_INSTALL
AC_PROG_MKDIR_P
AC_PROG_CC_STDC
AC_SUBST(SHELL)
AC_PATH_PROG([PERL], [perl])
+AC_PATH_PROG([PYTHON3], [python3])
AC_DEFINE([_GNU_SOURCE], 1,
[Define _GNU_SOURCE so that we get all necessary prototypes])
CFLAGS="$CFLAGS -pg"
fi
+AC_MSG_CHECKING([if md2man can create man pages])
+if test x"$ac_cv_path_PYTHON3" = x; then
+ AC_MSG_RESULT(no - python3 not found)
+ md2man_works=no
+else
+ md2man_out=`"$srcdir/md2man" --test "$srcdir/rsync-ssl.1.md" 2>&1`
+ if test $? = 0; then
+ AC_MSG_RESULT(yes)
+ md2man_works=yes
+ else
+ AC_MSG_RESULT(no)
+ md2man_works=no
+ echo "$md2man_out"
+ fi
+fi
+
+AC_MSG_CHECKING([if we require man-page building])
+AC_ARG_ENABLE([md2man],
+ AS_HELP_STRING([--disable-md2man],[disable md2man for man page creation]))
+if test x"$enable_md2man" != x"no"; then
+ if test -f "$srcdir/rsync.1"; then
+ AC_MSG_RESULT(optional)
+ else
+ AC_MSG_RESULT(required)
+ if test x"$md2man_works" = x"no"; then
+ AC_MSG_ERROR(You need python3 and the cmarkgfm OR commonmark python3 lib in order to build man pages.
+You can specify --disable-md2man if you want to skip building them.)
+ fi
+ fi
+ MAKE_MAN=man
+else
+ AC_MSG_RESULT(no)
+ MAKE_MAN=''
+fi
# Specifically, this turns on panic_action handling.
AC_ARG_ENABLE(maintainer-mode,
CFLAGS="$CFLAGS -DMAINTAINER_MODE"
fi
-
# This is needed for our included version of popt. Kind of silly, but
# I don't want our version too far out of sync.
CFLAGS="$CFLAGS -DHAVE_CONFIG_H"
fi
AC_DEFINE_UNQUOTED(RSYNC_RSH, "$RSYNC_RSH", [default -e command])
-AC_CHECK_PROG(HAVE_YODL2MAN, yodl2man, 1, 0)
-if test x$HAVE_YODL2MAN = x1; then
- MAKE_MAN=man
-else
- MAKE_MAN=man-copy
-fi
-
# Some programs on solaris are only found in /usr/xpg4/bin (or work better than others versions).
AC_PATH_PROG(SHELL_PATH, sh, /bin/sh, [/usr/xpg4/bin$PATH_SEPARATOR$PATH])
AC_PATH_PROG(FAKEROOT_PATH, fakeroot, /usr/bin/fakeroot, [/usr/xpg4/bin$PATH_SEPARATOR$PATH])
AC_MSG_CHECKING([whether to enable SIMD optimizations])
AC_ARG_ENABLE(simd,
- AS_HELP_STRING([--enable-simd],[enable SIMD optimizations]))
-
-if test x"$enable_simd" = x"yes"; then
- # For x86-64 SIMD, g++ is also required
- if test x"$build_cpu" = x"x86_64" && test x"$CXX" = x"g++"; then
- SIMD="$SIMD x86_64"
+ AS_HELP_STRING([--disable-simd],[disable SIMD optimizations (requires c++)]))
+
+# Clag is crashing with -g -O2, so we'll get rid of -g for now.
+CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-g //'`
+
+if test x"$enable_simd" != x"no"; then
+ # For x86-64 SIMD, g++ >=5 or clang++ >=7 is required
+ if test x"$build_cpu" = x"x86_64"; then
+ AC_LANG(C++)
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
+#include <immintrin.h>
+__attribute__ ((target("default"))) int test_ssse3(int x) { return x; }
+__attribute__ ((target("default"))) int test_sse2(int x) { return x; }
+__attribute__ ((target("default"))) int test_avx2(int x) { return x; }
+__attribute__ ((target("ssse3"))) int test_ssse3(int x) { return x; }
+__attribute__ ((target("sse2"))) int test_sse2(int x) { return x; }
+__attribute__ ((target("avx2"))) int test_avx2(int x) { return x; }
+typedef long long __m128i_u __attribute__((__vector_size__(16), __may_alias__, __aligned__(1)));
+typedef long long __m256i_u __attribute__((__vector_size__(32), __may_alias__, __aligned__(1)));
+__attribute__ ((target("default"))) void more_testing(char* buf, int len) { }
+__attribute__ ((target("ssse3"))) void more_testing(char* buf, int len)
+{
+ int i;
+ for (i = 0; i < (len-32); i+=32) {
+ __m128i in8_1, in8_2;
+ in8_1 = _mm_lddqu_si128((__m128i_u*)&buf[i]);
+ in8_2 = _mm_lddqu_si128((__m128i_u*)&buf[i + 16]);
+ }
+}
+]], [[if (test_ssse3(42) != 42 || test_sse2(42) != 42 || test_avx2(42) != 42) exit(1);]])],[CXX_OK=yes],[CXX_OK=no])
+ AC_LANG(C)
+ if test x"$CXX_OK" = x"yes"; then
+ # AC_MSG_RESULT() is called below.
+ SIMD="x86_64"
+ elif test x"$enable_simd" = x"yes"; then
+ AC_MSG_RESULT(error)
+ AC_MSG_ERROR(The SIMD compilation test failed.
+Omit --enable-simd to continue without it.)
+ fi
+ elif test x"$enable_simd" = x"yes"; then
+ AC_MSG_RESULT(unavailable)
+ AC_MSG_ERROR(The SIMD optimizations are currently x86_64 only.
+Omit --enable-simd to continue without it.)
fi
fi
if test x"$SIMD" != x""; then
- SIMD=`echo "$SIMD" | sed -e 's/^ *//'`
AC_MSG_RESULT([yes ($SIMD)])
- AC_DEFINE(HAVE_SIMD, 1, [Define to 1 to enable SIMD optimizations])
- SIMD=`echo "$SIMD" | sed -e 's/[[^ ]]\+/$(SIMD_&)/g'`
+ AC_DEFINE(HAVE_SIMD, 1, [Define to 1 to enable SIMD optimizations])
+ SIMD='$(SIMD_'"$SIMD)"
+ # We only use c++ for its target attribute dispatching, disable unneeded bulky features
+ CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti"
+ # Apple often has "g++" as a symlink for clang. Try to find out the truth.
+ CXX_VERSION=`$CXX --version 2>/dev/null | head -n 2`
+ case "$CXX_VERSION" in
+ *clang*) CXXFLAGS="$CXXFLAGS -fno-slp-vectorize" ;; # avoid a performance hit
+ esac
else
AC_MSG_RESULT(no)
fi
AC_SUBST(SIMD)
-# We only use g++ for its target attribute dispatching, disable unneeded bulky features
-if test x"$CXXOBJ" != x""; then
- CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti"
+AC_MSG_CHECKING([if assembler accepts noexecstack])
+OLD_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Wa,--noexecstack"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[return 0;]])],
+[ NOEXECSTACK='-Wa,--noexecstack' ; AC_MSG_RESULT(yes) ],
+[ NOEXECSTACK='' ; AC_MSG_RESULT(no) ])
+CFLAGS="$OLD_CFLAGS"
+AC_SUBST(NOEXECSTACK)
+
+ASM=
+
+AC_MSG_CHECKING([whether to enable ASM optimizations])
+AC_ARG_ENABLE(asm,
+ AS_HELP_STRING([--disable-asm],[disable ASM optimizations]))
+
+if test x"$enable_asm" != x"no"; then
+ if test x"$build_cpu" = x"x86_64"; then
+ ASM="$build_cpu"
+ elif test x"$enable_asm" = x"yes"; then
+ AC_MSG_RESULT(unavailable)
+ AC_MSG_ERROR(The ASM optimizations are currently x86_64 only.
+Omit --enable-asm to continue without it.)
+ fi
+fi
+
+if test x"$ASM" != x""; then
+ AC_MSG_RESULT([yes ($ASM)])
+ AC_DEFINE(HAVE_ASM, 1, [Define to 1 to enable ASM optimizations])
+ ASM='$(ASM_'"$ASM)"
+else
+ AC_MSG_RESULT(no)
fi
+AC_SUBST(ASM)
+
# arrgh. libc in some old debian version screwed up the largefile
# stuff, getting byte range locking wrong
AC_CACHE_CHECK([for broken largefile support],rsync_cv_HAVE_BROKEN_LARGEFILE,[
ipv6trylibc=yes
AC_ARG_ENABLE(ipv6,
- AS_HELP_STRING([--disable-ipv6],[do not even try to use IPv6]))
+ AS_HELP_STRING([--disable-ipv6],[turn off IPv6 support]))
if test x"$enable_ipv6" != x"no"; then
AC_MSG_CHECKING([ipv6 stack type])
for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta cygwin; do
AS_HELP_STRING([--disable-openssl],[disable openssl crypto library]))
AH_TEMPLATE([USE_OPENSSL],
[Undefine if you do not want to use openssl crypto library. By default this is defined.])
-if test x"$enable_openssl" != x"no" && test x"$ac_cv_header_openssl_md4_h" = x"yes" && test x"$ac_cv_header_openssl_md5_h" = x"yes"; then
- AC_MSG_RESULT(yes)
- AC_SEARCH_LIBS(MD5_Init, crypto, [AC_DEFINE(USE_OPENSSL)])
+if test x"$enable_openssl" != x"no"; then
+ if test x"$ac_cv_header_openssl_md4_h" = x"yes" && test x"$ac_cv_header_openssl_md5_h" = x"yes"; then
+ AC_MSG_RESULT(yes)
+ AC_SEARCH_LIBS(MD5_Init, crypto,
+ [AC_DEFINE(USE_OPENSSL)],
+ [AC_MSG_ERROR(Failed to find MD5_Init function in openssl crypto lib.
+Use --disable-openssl to continue without openssl crypto lib support.)])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(Failed to find openssl/md4.h and openssl/md5.h for openssl crypto lib support.
+Use --disable-openssl to continue without it.)
+ fi
else
AC_MSG_RESULT(no)
fi
AS_HELP_STRING([--disable-xxhash],[disable xxhash checksums]))
AH_TEMPLATE([SUPPORT_XXHASH],
[Undefine if you do not want xxhash checksums. By default this is defined.])
-if test x"$enable_xxhash" != x"no" && test x"$ac_cv_header_xxhash_h" = x"yes"; then
- AC_MSG_RESULT(yes)
- AC_SEARCH_LIBS(XXH64_createState, xxhash, [AC_DEFINE(SUPPORT_XXHASH)])
+if test x"$enable_xxhash" != x"no"; then
+ if test x"$ac_cv_header_xxhash_h" = x"yes"; then
+ AC_MSG_RESULT(yes)
+ AC_SEARCH_LIBS(XXH64_createState, xxhash,
+ [AC_DEFINE(SUPPORT_XXHASH)],
+ [AC_MSG_ERROR(Failed to find XXH64_createState function in xxhash lib.
+Use --disable-xxhash to continue without xxhash checksums.)])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(Failed to find xxhash.h for xxhash checksum support.
+Use --disable-xxhash to continue without it.)
+ fi
else
AC_MSG_RESULT(no)
fi
AC_HELP_STRING([--disable-zstd], [disable zstd compression]))
AH_TEMPLATE([SUPPORT_ZSTD],
[Undefine if you do not want zstd compression. By default this is defined.])
-if test x"$enable_zstd" != x"no" && test x"$ac_cv_header_zstd_h" = x"yes"; then
- AC_MSG_RESULT(yes)
- AC_SEARCH_LIBS(ZSTD_minCLevel, zstd, [AC_DEFINE(SUPPORT_ZSTD)])
+if test x"$enable_zstd" != x"no"; then
+ if test x"$ac_cv_header_zstd_h" = x"yes"; then
+ AC_MSG_RESULT(yes)
+ AC_SEARCH_LIBS(ZSTD_minCLevel, zstd,
+ [AC_DEFINE(SUPPORT_ZSTD)],
+ [AC_MSG_ERROR(Failed to find ZSTD_minCLevel function in zstd lib.
+Use --disable-zstd to continue without zstd compression.)])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(Failed to find zstd.h for zstd compression support.
+Use --disable-zstd to continue without it.)
+ fi
else
AC_MSG_RESULT(no)
fi
AC_HELP_STRING([--disable-lz4], [disable LZ4 compression]))
AH_TEMPLATE([SUPPORT_LZ4],
[Undefine if you do not want LZ4 compression. By default this is defined.])
-if test x"$enable_lz4" != x"no" && test x"$ac_cv_header_lz4_h" = x"yes"; then
- AC_MSG_RESULT(yes)
- AC_SEARCH_LIBS(LZ4_compress_default, lz4, [AC_DEFINE(SUPPORT_LZ4)])
+if test x"$enable_lz4" != x"no"; then
+ if test x"$ac_cv_header_lz4_h" = x"yes"; then
+ AC_MSG_RESULT(yes)
+ AC_SEARCH_LIBS(LZ4_compress_default, lz4,
+ [AC_DEFINE(SUPPORT_LZ4)],
+ [AC_MSG_ERROR(Failed to find LZ4_compress_default function in lz4 lib.
+Use --disable-lz4 to continue without lz4 compression.)])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR(Failed to find lz4.h for lz4 compression support.
+Use --disable-lz4 to continue without it.)
+ fi
else
AC_MSG_RESULT(no)
fi
#endif
]], [[]])],[am_cv_proto_iconv_arg1=""],[am_cv_proto_iconv_arg1="const"])
am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed 's/( /(/'`
AC_MSG_RESULT([$]{ac_t:-
}[$]am_cv_proto_iconv)
AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
AS_HELP_STRING([--disable-iconv],[disable rsync's --iconv option]),
[], [enable_iconv=$enable_iconv_open])
AH_TEMPLATE([ICONV_OPTION],
-[Define if you want the --iconv option. Specifing a value will set the
+[Define if you want the --iconv option. Specifying a value will set the
default iconv setting (a NULL means no --iconv processing by default).])
if test x"$enable_iconv" != x"no"; then
if test x"$enable_iconv" = x"yes"; then
void foo(const char *format, ...) {
va_list ap;
int len;
- char buf[5];
+ static char buf[] = "12345678901234567890";
va_start(ap, format);
len = vsnprintf(0, 0, format, ap);
AC_MSG_RESULT()
AC_MSG_RESULT([ rsync ${RSYNC_VERSION} configuration successful])
AC_MSG_RESULT()
-if test x$HAVE_YODL2MAN != x1; then
- AC_MSG_RESULT([ Note that yodl2man was not found, so pre-existing manpage files will be])
- AC_MSG_RESULT([ used w/o change (if available) -- no .yo file changes will be used.])
- AC_MSG_RESULT()
-fi