1dnl Process this file with autoconf to produce a configure script. 2 3AC_INIT([rsync],[ ],[https://rsync.samba.org/bug-tracking.html]) 4 5AC_CONFIG_MACRO_DIR([m4]) 6AC_CONFIG_SRCDIR([byteorder.h]) 7AC_CONFIG_HEADER(config.h) 8AC_PREREQ([2.69]) 9 10PACKAGE_VERSION=`sed 's/.*"\(.*\)".*/\1/' <$srcdir/version.h` 11 12AC_MSG_NOTICE([Configuring rsync $PACKAGE_VERSION]) 13 14LDFLAGS=${LDFLAGS-""} 15 16AC_CANONICAL_HOST 17 18dnl define the directory for replacement function since AC_LIBOBJ does not 19dnl officially support subdirs and fails with automake 20AC_CONFIG_LIBOBJ_DIR([lib]) 21 22# We must decide this before testing the compiler. 23 24# Please allow this to default to yes, so that your users have more 25# chance of getting a useful stack trace if problems occur. 26 27AC_MSG_CHECKING([whether to include debugging symbols]) 28AC_ARG_ENABLE(debug, 29 AS_HELP_STRING([--disable-debug],[disable debugging symbols and features])) 30 31if test x"$enable_debug" = x"no"; then 32 AC_MSG_RESULT(no) 33 ac_cv_prog_cc_g=no 34else 35 AC_MSG_RESULT([yes]) 36 dnl AC_DEFINE(DEBUG, 1, [Define to turn on debugging code that may slow normal operation]) 37 # leave ac_cv_prog_cc_g alone; AC_PROG_CC will try to include -g if it can 38fi 39 40dnl Checks for programs. 41AC_PROG_CC 42AC_PROG_CPP 43AC_PROG_CXX 44AC_PROG_AWK 45AC_PROG_EGREP 46AC_PROG_INSTALL 47AC_PROG_MKDIR_P 48AC_PROG_CC_STDC 49AC_SUBST(SHELL) 50AC_PATH_PROG([PERL], [perl]) 51AC_PATH_PROG([PYTHON3], [python3]) 52 53AC_DEFINE([_GNU_SOURCE], 1, 54 [Define _GNU_SOURCE so that we get all necessary prototypes]) 55 56if test x"$ac_cv_prog_cc_stdc" = x"no"; then 57 AC_MSG_WARN([rsync requires an ANSI C compiler and you do not seem to have one]) 58fi 59 60no_lib='' 61err_msg='' 62nl=' 63' 64 65AC_ARG_ENABLE(profile, 66 AS_HELP_STRING([--enable-profile],[turn on CPU profiling])) 67if test x"$enable_profile" = x"yes"; then 68 CFLAGS="$CFLAGS -pg" 69fi 70 71AC_MSG_CHECKING([if md2man can create man pages]) 72if test x"$ac_cv_path_PYTHON3" = x; then 73 AC_MSG_RESULT(no - python3 not found) 74 md2man_works=no 75else 76 md2man_out=`"$srcdir/md2man" --test "$srcdir/rsync-ssl.1.md" 2>&1` 77 if test $? = 0; then 78 AC_MSG_RESULT(yes) 79 md2man_works=yes 80 else 81 AC_MSG_RESULT(no) 82 md2man_works=no 83 echo "$md2man_out" 84 fi 85fi 86 87AC_MSG_CHECKING([if we require man-page building]) 88AC_ARG_ENABLE([md2man], 89 AS_HELP_STRING([--disable-md2man],[disable md2man for man page creation])) 90if test x"$enable_md2man" != x"no"; then 91 if test -f "$srcdir/rsync.1"; then 92 AC_MSG_RESULT(optional) 93 else 94 AC_MSG_RESULT(required) 95 if test x"$md2man_works" = x"no"; then 96 err_msg="$err_msg$nl- You need python3 and either the cmarkgfm OR commonmark python3 lib in order" 97 err_msg="$err_msg$nl to build man pages based on the git source (man pages are included in the" 98 err_msg="$err_msg$nl official release tar files)." 99 no_lib="$no_lib md2man" 100 fi 101 fi 102 MAKE_MAN=man 103else 104 AC_MSG_RESULT(no) 105 MAKE_MAN='' 106fi 107 108# Specifically, this turns on panic_action handling. 109AC_ARG_ENABLE(maintainer-mode, 110 AS_HELP_STRING([--enable-maintainer-mode],[turn on extra debug features])) 111if test x"$enable_maintainer_mode" = x"yes"; then 112 CFLAGS="$CFLAGS -DMAINTAINER_MODE" 113fi 114 115# This is needed for our included version of popt. Kind of silly, but 116# I don't want our version too far out of sync. 117CFLAGS="$CFLAGS -DHAVE_CONFIG_H" 118 119# If GCC, turn on warnings. 120if test x"$GCC" = x"yes"; then 121 CFLAGS="$CFLAGS -Wall -W" 122fi 123 124AC_ARG_WITH(included-popt, 125 AS_HELP_STRING([--with-included-popt],[use bundled popt library, not from system])) 126 127AC_ARG_WITH(included-zlib, 128 AS_HELP_STRING([--with-included-zlib],[use bundled zlib library, not from system])) 129 130AC_ARG_WITH(protected-args, 131 AS_HELP_STRING([--with-protected-args],[make --protected-args option the default])) 132if test x"$with_protected_args" = x"yes"; then 133 AC_DEFINE_UNQUOTED(RSYNC_USE_PROTECTED_ARGS, 1, [Define to 1 if --protected-args should be the default]) 134fi 135 136AC_ARG_WITH(rsync-path, 137 AS_HELP_STRING([--with-rsync-path=PATH],[set default --rsync-path to PATH (default: rsync)]), 138 [ RSYNC_PATH="$with_rsync_path" ], 139 [ RSYNC_PATH="rsync" ]) 140 141AC_DEFINE_UNQUOTED(RSYNC_PATH, "$RSYNC_PATH", [location of rsync on remote machine]) 142 143AC_ARG_WITH(rsyncd-conf, 144 AS_HELP_STRING([--with-rsyncd-conf=PATH],[set configuration file for rsync server to PATH (default: /etc/rsyncd.conf)]), 145 [ if test ! -z "$with_rsyncd_conf" ; then 146 case $with_rsyncd_conf in 147 yes|no) 148 RSYNCD_SYSCONF="/etc/rsyncd.conf" 149 ;; 150 /*) 151 RSYNCD_SYSCONF="$with_rsyncd_conf" 152 ;; 153 *) 154 AC_MSG_ERROR(You must specify an absolute path to --with-rsyncd-conf=PATH) 155 ;; 156 esac 157 else 158 RSYNCD_SYSCONF="/etc/rsyncd.conf" 159 fi ], 160 [ RSYNCD_SYSCONF="/etc/rsyncd.conf" ]) 161 162AC_DEFINE_UNQUOTED(RSYNCD_SYSCONF, "$RSYNCD_SYSCONF", [location of configuration file for rsync server]) 163 164AC_ARG_WITH(rsh, 165 AS_HELP_STRING([--with-rsh=CMD],[set remote shell command to CMD (default: ssh)])) 166 167AC_CHECK_PROG(HAVE_REMSH, remsh, 1, 0) 168if test x$HAVE_REMSH = x1; then 169 AC_DEFINE(HAVE_REMSH, 1, [Define to 1 if remote shell is remsh, not rsh]) 170fi 171 172if test x"$with_rsh" != x; then 173 RSYNC_RSH="$with_rsh" 174else 175 RSYNC_RSH="ssh" 176fi 177AC_DEFINE_UNQUOTED(RSYNC_RSH, "$RSYNC_RSH", [default -e command]) 178 179# Some programs on solaris are only found in /usr/xpg4/bin (or work better than others versions). 180AC_PATH_PROG(SHELL_PATH, sh, /bin/sh, [/usr/xpg4/bin$PATH_SEPARATOR$PATH]) 181AC_PATH_PROG(FAKEROOT_PATH, fakeroot, /usr/bin/fakeroot, [/usr/xpg4/bin$PATH_SEPARATOR$PATH]) 182 183AC_ARG_WITH(nobody-group, 184 AS_HELP_STRING([--with-nobody-group=GROUP],[set the default unprivileged group (default nobody or nogroup)]), 185 [ NOBODY_GROUP="$with_nobody_group" ]) 186 187if test x"$with_nobody_group" = x; then 188 AC_MSG_CHECKING([the group for user "nobody"]) 189 if grep '^nobody:' /etc/group >/dev/null 2>&1; then 190 NOBODY_GROUP=nobody 191 elif grep '^nogroup:' /etc/group >/dev/null 2>&1; then 192 NOBODY_GROUP=nogroup 193 else 194 NOBODY_GROUP=nobody # test for others? 195 fi 196 AC_MSG_RESULT($NOBODY_GROUP) 197fi 198 199AC_DEFINE_UNQUOTED(NOBODY_USER, "nobody", [unprivileged user--e.g. nobody]) 200AC_DEFINE_UNQUOTED(NOBODY_GROUP, "$NOBODY_GROUP", [unprivileged group for unprivileged user]) 201 202# SIMD optimizations 203SIMD= 204 205AC_MSG_CHECKING([whether to enable SIMD optimizations]) 206AC_ARG_ENABLE(simd, 207 AS_HELP_STRING([--disable-simd],[disable SIMD optimizations (requires c++)])) 208 209# Clag is crashing with -g -O2, so we'll get rid of -g for now. 210CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-g //'` 211 212if test x"$enable_simd" != x"no"; then 213 # For x86-64 SIMD, g++ >=5 or clang++ >=7 is required 214 if test x"$build_cpu" = x"x86_64"; then 215 AC_LANG(C++) 216 AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> 217#include <immintrin.h> 218__attribute__ ((target("default"))) int test_ssse3(int x) { return x; } 219__attribute__ ((target("default"))) int test_sse2(int x) { return x; } 220__attribute__ ((target("default"))) int test_avx2(int x) { return x; } 221__attribute__ ((target("ssse3"))) int test_ssse3(int x) { return x; } 222__attribute__ ((target("sse2"))) int test_sse2(int x) { return x; } 223__attribute__ ((target("avx2"))) int test_avx2(int x) { return x; } 224typedef long long __m128i_u __attribute__((__vector_size__(16), __may_alias__, __aligned__(1))); 225typedef long long __m256i_u __attribute__((__vector_size__(32), __may_alias__, __aligned__(1))); 226__attribute__ ((target("default"))) void more_testing(char* buf, int len) { } 227__attribute__ ((target("ssse3"))) void more_testing(char* buf, int len) 228{ 229 int i; 230 for (i = 0; i < (len-32); i+=32) { 231 __m128i in8_1, in8_2; 232 in8_1 = _mm_lddqu_si128((__m128i_u*)&buf[i]); 233 in8_2 = _mm_lddqu_si128((__m128i_u*)&buf[i + 16]); 234 } 235} 236]], [[if (test_ssse3(42) != 42 || test_sse2(42) != 42 || test_avx2(42) != 42) exit(1);]])],[CXX_OK=yes],[CXX_OK=no]) 237 AC_LANG(C) 238 if test x"$CXX_OK" = x"yes"; then 239 # AC_MSG_RESULT() is called below. 240 SIMD="x86_64" 241 elif test x"$enable_simd" = x"yes"; then 242 AC_MSG_RESULT(error) 243 AC_MSG_ERROR(The SIMD compilation test failed. 244Omit --enable-simd to continue without it.) 245 fi 246 elif test x"$enable_simd" = x"yes"; then 247 AC_MSG_RESULT(unavailable) 248 AC_MSG_ERROR(The SIMD optimizations are currently x86_64 only. 249Omit --enable-simd to continue without it.) 250 fi 251fi 252 253if test x"$SIMD" != x""; then 254 AC_MSG_RESULT([yes ($SIMD)]) 255 AC_DEFINE(HAVE_SIMD, 1, [Define to 1 to enable SIMD optimizations]) 256 SIMD='$(SIMD_'"$SIMD)" 257 # We only use c++ for its target attribute dispatching, disable unneeded bulky features 258 CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti" 259 # Apple often has "g++" as a symlink for clang. Try to find out the truth. 260 CXX_VERSION=`$CXX --version 2>/dev/null | head -n 2` 261 case "$CXX_VERSION" in 262 *clang*) CXXFLAGS="$CXXFLAGS -fno-slp-vectorize" ;; # avoid a performance hit 263 esac 264else 265 AC_MSG_RESULT(no) 266fi 267 268AC_SUBST(SIMD) 269 270AC_MSG_CHECKING([if assembler accepts noexecstack]) 271OLD_CFLAGS="$CFLAGS" 272CFLAGS="$CFLAGS -Wa,--noexecstack" 273AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[return 0;]])], 274[ NOEXECSTACK='-Wa,--noexecstack' ; AC_MSG_RESULT(yes) ], 275[ NOEXECSTACK='' ; AC_MSG_RESULT(no) ]) 276CFLAGS="$OLD_CFLAGS" 277AC_SUBST(NOEXECSTACK) 278 279ASM= 280 281AC_MSG_CHECKING([whether to enable ASM optimizations]) 282AC_ARG_ENABLE(asm, 283 AS_HELP_STRING([--disable-asm],[disable ASM optimizations])) 284 285if test x"$enable_asm" != x"no"; then 286 if test x"$build_cpu" = x"x86_64"; then 287 ASM="$build_cpu" 288 elif test x"$enable_asm" = x"yes"; then 289 AC_MSG_RESULT(unavailable) 290 AC_MSG_ERROR(The ASM optimizations are currently x86_64 only. 291Omit --enable-asm to continue without it.) 292 fi 293fi 294 295if test x"$ASM" != x""; then 296 AC_MSG_RESULT([yes ($ASM)]) 297 AC_DEFINE(HAVE_ASM, 1, [Define to 1 to enable ASM optimizations]) 298 ASM='$(ASM_'"$ASM)" 299else 300 AC_MSG_RESULT(no) 301fi 302 303AC_SUBST(ASM) 304 305# arrgh. libc in some old debian version screwed up the largefile 306# stuff, getting byte range locking wrong 307AC_CACHE_CHECK([for broken largefile support],rsync_cv_HAVE_BROKEN_LARGEFILE,[ 308AC_RUN_IFELSE([AC_LANG_SOURCE([[ 309#define _FILE_OFFSET_BITS 64 310#include <stdio.h> 311#include <fcntl.h> 312#include <sys/types.h> 313#include <sys/wait.h> 314#if HAVE_UNISTD_H 315#include <unistd.h> 316#endif 317 318int main(void) 319{ 320 struct flock lock; 321 int status; 322 char tpl[32] = "/tmp/locktest.XXXXXX"; 323 int fd = mkstemp(tpl); 324 if (fd < 0) { 325 strcpy(tpl, "conftest.dat"); 326 fd = open(tpl, O_CREAT|O_RDWR, 0600); 327 } 328 329 lock.l_type = F_WRLCK; 330 lock.l_whence = SEEK_SET; 331 lock.l_start = 0; 332 lock.l_len = 1; 333 lock.l_pid = 0; 334 fcntl(fd,F_SETLK,&lock); 335 if (fork() == 0) { 336 lock.l_start = 1; 337 _exit(fcntl(fd,F_SETLK,&lock) == 0); 338 } 339 wait(&status); 340 unlink(tpl); 341 return WEXITSTATUS(status); 342} 343]])],[rsync_cv_HAVE_BROKEN_LARGEFILE=yes],[rsync_cv_HAVE_BROKEN_LARGEFILE=no],[rsync_cv_HAVE_BROKEN_LARGEFILE=cross])]) 344if test x"$rsync_cv_HAVE_BROKEN_LARGEFILE" != x"yes"; then 345 AC_SYS_LARGEFILE 346fi 347 348ipv6type=unknown 349ipv6lib=none 350ipv6trylibc=yes 351 352AC_ARG_ENABLE(ipv6, 353 AS_HELP_STRING([--disable-ipv6],[turn off IPv6 support])) 354if test x"$enable_ipv6" != x"no"; then 355 AC_MSG_CHECKING([ipv6 stack type]) 356 for i in inria kame linux-glibc linux-inet6 solaris toshiba v6d zeta cygwin TANDEM; do 357 case $i in 358 inria) 359 # http://www.kame.net/ 360 AC_EGREP_CPP(yes, [ 361#include <netinet/in.h> 362#ifdef IPV6_INRIA_VERSION 363yes 364#endif], 365 [ipv6type=$i; 366 AC_DEFINE(INET6, 1, [true if you have IPv6]) 367 ]) 368 ;; 369 kame) 370 # http://www.kame.net/ 371 AC_EGREP_CPP(yes, [ 372#include <netinet/in.h> 373#ifdef __KAME__ 374yes 375#endif], 376 [ipv6type=$i; 377 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 378 ;; 379 linux-glibc) 380 # http://www.v6.linux.or.jp/ 381 AC_EGREP_CPP(yes, [ 382#include <features.h> 383#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 384yes 385#endif], 386 [ipv6type=$i; 387AC_DEFINE(INET6, 1, [true if you have IPv6])]) 388 ;; 389 linux-inet6) 390 # http://www.v6.linux.or.jp/ 391 if test -d /usr/inet6 -o -f /usr/inet6/lib/libinet6.a; then 392 ipv6type=$i 393 ipv6lib=inet6 394 ipv6libdir=/usr/inet6/lib 395 ipv6trylibc=yes; 396 AC_DEFINE(INET6, 1, [true if you have IPv6]) 397 CFLAGS="-I/usr/inet6/include $CFLAGS" 398 fi 399 ;; 400 solaris) 401 # http://www.sun.com 402 AC_EGREP_CPP(yes, [ 403#include <netinet/ip6.h> 404#ifdef __sun 405yes 406#endif], 407 [ipv6type=$i; 408 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 409 ;; 410 toshiba) 411 AC_EGREP_CPP(yes, [ 412#include <sys/param.h> 413#ifdef _TOSHIBA_INET6 414yes 415#endif], 416 [ipv6type=$i; 417 ipv6lib=inet6; 418 ipv6libdir=/usr/local/v6/lib; 419 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 420 ;; 421 v6d) 422 AC_EGREP_CPP(yes, [ 423#include </usr/local/v6/include/sys/v6config.h> 424#ifdef __V6D__ 425yes 426#endif], 427 [ipv6type=$i; 428 ipv6lib=v6; 429 ipv6libdir=/usr/local/v6/lib; 430 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 431 ;; 432 zeta) 433 AC_EGREP_CPP(yes, [ 434#include <sys/param.h> 435#ifdef _ZETA_MINAMI_INET6 436yes 437#endif], 438 [ipv6type=$i; 439 ipv6lib=inet6; 440 ipv6libdir=/usr/local/v6/lib; 441 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 442 ;; 443 cygwin) 444 AC_EGREP_CPP(yes, [ 445#include <netinet/in.h> 446#ifdef _CYGWIN_IN6_H 447yes 448#endif], 449 [ipv6type=$i; 450 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 451 ;; 452 TANDEM) 453 AC_EGREP_CPP(yes, [ 454#include <netinet/ip6.h> 455#ifdef __TANDEM 456yes 457#endif], 458 [ipv6type=$i; 459 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 460 ;; 461 esac 462 if test "$ipv6type" != "unknown"; then 463 break 464 fi 465 done 466 AC_MSG_RESULT($ipv6type) 467 468 AC_SEARCH_LIBS(getaddrinfo, inet6) 469fi 470 471dnl Do you want to disable use of locale functions 472AC_ARG_ENABLE([locale], 473 AS_HELP_STRING([--disable-locale],[disable locale features])) 474AH_TEMPLATE([CONFIG_LOCALE], 475[Undefine if you do not want locale features. By default this is defined.]) 476if test x"$enable_locale" != x"no"; then 477 AC_DEFINE(CONFIG_LOCALE) 478fi 479 480AC_MSG_CHECKING([whether to call shutdown on all sockets]) 481case $host_os in 482 *cygwin* ) AC_MSG_RESULT(yes) 483 AC_DEFINE(SHUTDOWN_ALL_SOCKETS, 1, 484 [Define to 1 if sockets need to be shutdown]) 485 ;; 486 * ) AC_MSG_RESULT(no);; 487esac 488 489AC_C_BIGENDIAN 490AC_HEADER_DIRENT 491AC_HEADER_TIME 492AC_HEADER_SYS_WAIT 493AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ 494 unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \ 495 sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \ 496 sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \ 497 netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \ 498 sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h dl.h \ 499 popt.h popt/popt.h linux/falloc.h netinet/in_systm.h netinet/ip.h \ 500 zlib.h xxhash.h openssl/md4.h openssl/md5.h zstd.h lz4.h sys/file.h) 501AC_HEADER_MAJOR_FIXED 502 503AC_MSG_CHECKING([whether to enable use of openssl crypto library]) 504AC_ARG_ENABLE([openssl], 505 AS_HELP_STRING([--disable-openssl],[disable openssl crypto library])) 506AH_TEMPLATE([USE_OPENSSL], 507[Undefine if you do not want to use openssl crypto library. By default this is defined.]) 508if test x"$enable_openssl" != x"no"; then 509 if test x"$ac_cv_header_openssl_md4_h" = x"yes" && test x"$ac_cv_header_openssl_md5_h" = x"yes"; then 510 AC_MSG_RESULT(yes) 511 AC_SEARCH_LIBS(MD5_Init, crypto, 512 [AC_DEFINE(USE_OPENSSL)], 513 [err_msg="$err_msg$nl- Failed to find MD5_Init function in openssl crypto lib."; 514 no_lib="$no_lib openssl"]) 515 else 516 AC_MSG_RESULT(no) 517 err_msg="$err_msg$nl- Failed to find openssl/md4.h and openssl/md5.h for openssl crypto lib support." 518 no_lib="$no_lib openssl" 519 fi 520else 521 AC_MSG_RESULT(no) 522fi 523 524AC_MSG_CHECKING([whether to enable xxhash checksum support]) 525AC_ARG_ENABLE([xxhash], 526 AS_HELP_STRING([--disable-xxhash],[disable xxhash checksums])) 527AH_TEMPLATE([SUPPORT_XXHASH], 528[Undefine if you do not want xxhash checksums. By default this is defined.]) 529if test x"$enable_xxhash" != x"no"; then 530 if test x"$ac_cv_header_xxhash_h" = x"yes"; then 531 AC_MSG_RESULT(yes) 532 AC_SEARCH_LIBS(XXH64_createState, xxhash, 533 [AC_DEFINE(SUPPORT_XXHASH)], 534 [err_msg="$err_msg$nl- Failed to find XXH64_createState function in xxhash lib."; 535 no_lib="$no_lib xxhash"]) 536 else 537 AC_MSG_RESULT(no) 538 err_msg="$err_msg$nl- Failed to find xxhash.h for xxhash checksum support."; 539 no_lib="$no_lib xxhash" 540 fi 541else 542 AC_MSG_RESULT(no) 543fi 544 545AC_MSG_CHECKING([whether to enable zstd compression]) 546AC_ARG_ENABLE([zstd], 547 AC_HELP_STRING([--disable-zstd], [disable zstd compression])) 548AH_TEMPLATE([SUPPORT_ZSTD], 549[Undefine if you do not want zstd compression. By default this is defined.]) 550if test x"$enable_zstd" != x"no"; then 551 if test x"$ac_cv_header_zstd_h" = x"yes"; then 552 AC_MSG_RESULT(yes) 553 AC_SEARCH_LIBS(ZSTD_minCLevel, zstd, 554 [AC_DEFINE(SUPPORT_ZSTD)], 555 [err_msg="$err_msg$nl- Failed to find ZSTD_minCLevel function in zstd lib."; 556 no_lib="$no_lib zstd"]) 557 else 558 AC_MSG_RESULT(no) 559 err_msg="$err_msg$nl- Failed to find zstd.h for zstd compression support."; 560 no_lib="$no_lib zstd" 561 fi 562else 563 AC_MSG_RESULT(no) 564fi 565 566AC_MSG_CHECKING([whether to enable LZ4 compression]) 567AC_ARG_ENABLE([lz4], 568 AC_HELP_STRING([--disable-lz4], [disable LZ4 compression])) 569AH_TEMPLATE([SUPPORT_LZ4], 570[Undefine if you do not want LZ4 compression. By default this is defined.]) 571if test x"$enable_lz4" != x"no"; then 572 if test x"$ac_cv_header_lz4_h" = x"yes"; then 573 AC_MSG_RESULT(yes) 574 AC_SEARCH_LIBS(LZ4_compress_default, lz4, 575 [AC_DEFINE(SUPPORT_LZ4)], 576 [err_msg="$err_msg$nl- Failed to find LZ4_compress_default function in lz4 lib."; 577 no_lib="$no_lib lz4"]) 578 else 579 AC_MSG_RESULT(no) 580 err_msg="$err_msg$nl- Failed to find lz4.h for lz4 compression support." 581 no_lib="$no_lib lz4" 582 fi 583else 584 AC_MSG_RESULT(no) 585fi 586 587if test x"$no_lib" != x; then 588 echo "" 589 echo "Configure found the following issues:" 590 echo "$err_msg" 591 echo "" 592 echo "See the INSTALL file for hints on how to install the missing libraries and/or" 593 echo "how to generate (or fetch) man pages:" 594 echo " https://github.com/WayneD/rsync/blob/master/INSTALL.md" 595 echo "" 596 echo "To disable one or more features, the relevant configure options are:" 597 for lib in $no_lib; do 598 echo " --disable-$lib" 599 done 600 echo "" 601 AC_MSG_ERROR(Aborting configure run) 602fi 603 604AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ 605AC_RUN_IFELSE([AC_LANG_SOURCE([[ 606#include <sys/types.h> 607#ifdef MAJOR_IN_MKDEV 608#include <sys/mkdev.h> 609# if !defined makedev && (defined mkdev || defined _WIN32 || defined __WIN32__) 610# define makedev mkdev 611# endif 612#elif defined MAJOR_IN_SYSMACROS 613#include <sys/sysmacros.h> 614#endif 615 616int main(void) 617{ 618 dev_t dev = makedev(0, 5, 7); 619 if (major(dev) != 5 || minor(dev) != 7) 620 return 1; 621 return 0; 622} 623]])],[rsync_cv_MAKEDEV_TAKES_3_ARGS=yes],[rsync_cv_MAKEDEV_TAKES_3_ARGS=no],[rsync_cv_MAKEDEV_TAKES_3_ARGS=no])]) 624if test x"$rsync_cv_MAKEDEV_TAKES_3_ARGS" = x"yes"; then 625 AC_DEFINE(MAKEDEV_TAKES_3_ARGS, 1, [Define to 1 if makedev() takes 3 args]) 626fi 627 628AC_CHECK_SIZEOF(int) 629AC_CHECK_SIZEOF(long) 630AC_CHECK_SIZEOF(long long) 631AC_CHECK_SIZEOF(short) 632AC_CHECK_SIZEOF(int16_t) 633AC_CHECK_SIZEOF(uint16_t) 634AC_CHECK_SIZEOF(int32_t) 635AC_CHECK_SIZEOF(uint32_t) 636AC_CHECK_SIZEOF(int64_t) 637AC_CHECK_SIZEOF(off_t) 638AC_CHECK_SIZEOF(off64_t) 639AC_CHECK_SIZEOF(time_t) 640AC_CHECK_SIZEOF(char*) 641 642AC_C_INLINE 643 644AC_TYPE_LONG_DOUBLE_WIDER 645ac_cv_c_long_double=$ac_cv_type_long_double_wider 646if test $ac_cv_c_long_double = yes; then 647 AC_DEFINE([HAVE_LONG_DOUBLE],[1],[Define to 1 if the type `long double' works and has more range or precision than `double'.]) 648fi 649 650AC_TYPE_UID_T 651AC_CHECK_TYPES([mode_t,off_t,size_t,pid_t,id_t]) 652AC_TYPE_GETGROUPS 653AC_CHECK_MEMBERS([struct stat.st_rdev, 654 struct stat.st_mtimensec, 655 struct stat.st_mtimespec.tv_nsec, 656 struct stat.st_mtim.tv_nsec],,,[ 657#ifdef HAVE_SYS_TYPES_H 658#include <sys/types.h> 659#endif 660#ifdef HAVE_SYS_STAT_H 661#include <sys/stat.h> 662#endif 663#ifdef HAVE_UNISTD_H 664#include <unistd.h> 665#endif]) 666 667TYPE_SOCKLEN_T 668 669AC_CACHE_CHECK([for errno in errno.h],rsync_cv_errno, [ 670 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]], [[int i = errno]])],[rsync_cv_errno=yes],[rsync_cv_have_errno_decl=no])]) 671if test x"$rsync_cv_errno" = x"yes"; then 672 AC_DEFINE(HAVE_ERRNO_DECL, 1, [Define to 1 if errno is declared in errno.h]) 673fi 674 675# The following test taken from the cvs sources 676# If we can't find connect, try looking in -lsocket, -lnsl, and -linet. 677# These need checks to be before checks for any other functions that 678# might be in the same libraries. 679# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has 680# libsocket.so which has a bad implementation of gethostbyname (it 681# only looks in /etc/hosts), so we only look for -lsocket if we need 682# it. 683AC_CHECK_FUNCS(connect) 684if test x"$ac_cv_func_connect" = x"no"; then 685 case "$LIBS" in 686 *-lnsl*) ;; 687 *) AC_CHECK_LIB(nsl_s, printf) ;; 688 esac 689 case "$LIBS" in 690 *-lnsl*) ;; 691 *) AC_CHECK_LIB(nsl, printf) ;; 692 esac 693 case "$LIBS" in 694 *-lsocket*) ;; 695 *) AC_CHECK_LIB(socket, connect) ;; 696 esac 697 case "$LIBS" in 698 *-linet*) ;; 699 *) AC_CHECK_LIB(inet, connect) ;; 700 esac 701 dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value 702 dnl has been cached. 703 if test x"$ac_cv_lib_socket_connect" = x"yes" || 704 test x"$ac_cv_lib_inet_connect" = x"yes"; then 705 # ac_cv_func_connect=yes 706 # don't! it would cause AC_CHECK_FUNC to succeed next time configure is run 707 AC_DEFINE(HAVE_CONNECT, 1, [Define to 1 if you have the "connect" function]) 708 fi 709fi 710 711AC_SEARCH_LIBS(inet_ntop, resolv) 712 713# For OS X, Solaris, HP-UX, etc.: figure out if -liconv is needed. We'll 714# accept either iconv_open or libiconv_open, since some include files map 715# the former to the latter. 716AC_SEARCH_LIBS(iconv_open, iconv) 717AC_SEARCH_LIBS(libiconv_open, iconv) 718 719AC_MSG_CHECKING([for iconv declaration]) 720AC_CACHE_VAL(am_cv_proto_iconv, [ 721 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 722#include <stdlib.h> 723#include <iconv.h> 724extern 725#ifdef __cplusplus 726"C" 727#endif 728#if defined(__STDC__) || defined(__cplusplus) 729size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); 730#else 731size_t iconv(); 732#endif 733]], [[]])],[am_cv_proto_iconv_arg1=""],[am_cv_proto_iconv_arg1="const"]) 734 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);"]) 735 am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed 's/( /(/'` 736AC_MSG_RESULT([$]{ac_t:- 737 }[$]am_cv_proto_iconv) 738AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, 739 [Define as const if the declaration of iconv() needs const.]) 740 741dnl AC_MSG_NOTICE([Looking in libraries: $LIBS]) 742 743AC_REPLACE_FUNCS([inet_ntop inet_pton]) 744 745AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>]) 746AC_HAVE_TYPE([struct sockaddr_storage], [#include <sys/types.h> 747#include <sys/socket.h>]) 748 749# Irix 6.5 has getaddrinfo but not the corresponding defines, so use 750# builtin getaddrinfo if one of the defines don't exist 751AC_CACHE_CHECK([whether defines needed by getaddrinfo exist], 752 rsync_cv_HAVE_GETADDR_DEFINES,[ 753 AC_EGREP_CPP(yes, [ 754 #include <sys/types.h> 755 #include <sys/socket.h> 756 #include <netdb.h> 757 #ifdef AI_PASSIVE 758 yes 759 #endif], 760 rsync_cv_HAVE_GETADDR_DEFINES=yes, 761 rsync_cv_HAVE_GETADDR_DEFINES=no)]) 762AS_IF([test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes" -a x"$ac_cv_type_struct_addrinfo" = x"yes"],[ 763 # Tru64 UNIX has getaddrinfo() but has it renamed in libc as 764 # something else so we must include <netdb.h> to get the 765 # redefinition. 766 AC_CHECK_FUNCS(getaddrinfo, , 767 [AC_MSG_CHECKING([for getaddrinfo by including <netdb.h>]) 768 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 769 #include <sys/socket.h> 770 #include <netdb.h>]], [[getaddrinfo(NULL, NULL, NULL, NULL);]])],[AC_MSG_RESULT([yes]) 771 AC_DEFINE(HAVE_GETADDRINFO, 1, 772 [Define to 1 if you have the "getaddrinfo" function and required types.])],[AC_MSG_RESULT([no]) 773 AC_LIBOBJ([getaddrinfo])])]) 774 ],[AC_LIBOBJ([getaddrinfo])]) 775 776AC_CHECK_MEMBER([struct sockaddr.sa_len], 777 [ AC_DEFINE(HAVE_SOCKADDR_LEN, 1, [Do we have sockaddr.sa_len?]) ], 778 [], 779 [ 780#include <sys/types.h> 781#include <sys/socket.h> 782]) 783 784AC_CHECK_MEMBER([struct sockaddr_in.sin_len], 785 [ AC_DEFINE(HAVE_SOCKADDR_IN_LEN, 1, [Do we have sockaddr_in.sin_len?]) ], 786 [], 787 [ 788#include <sys/types.h> 789#include <sys/socket.h> 790#include <netinet/in.h> 791]) 792 793AC_CHECK_MEMBER([struct sockaddr_un.sun_len], 794 [ AC_DEFINE(HAVE_SOCKADDR_UN_LEN, 1, [Do we have sockaddr_un.sun_len?]) ], 795 [], 796 [ 797#include <sys/types.h> 798#include <sys/socket.h> 799#include <netinet/in.h> 800]) 801 802AC_CHECK_MEMBER([struct sockaddr_in6.sin6_scope_id], 803 [ AC_DEFINE(HAVE_SOCKADDR_IN6_SCOPE_ID, 1, [Do we have sockaddr_in6.sin6_scope_id?]) ], 804 [], 805 [ 806#include <sys/types.h> 807#include <sys/socket.h> 808#include <netinet/in.h> 809]) 810 811AC_HAVE_TYPE([struct stat64], [#include <stdio.h> 812#if HAVE_SYS_TYPES_H 813# include <sys/types.h> 814#endif 815#if HAVE_SYS_STAT_H 816# include <sys/stat.h> 817#endif 818#if STDC_HEADERS 819# include <stdlib.h> 820# include <stddef.h> 821#else 822# if HAVE_STDLIB_H 823# include <stdlib.h> 824# endif 825#endif 826]) 827 828# if we can't find strcasecmp, look in -lresolv (for Unixware at least) 829# 830AC_CHECK_FUNCS(strcasecmp) 831if test x"$ac_cv_func_strcasecmp" = x"no"; then 832 AC_CHECK_LIB(resolv, strcasecmp) 833fi 834 835AC_CHECK_FUNCS(aclsort) 836if test x"$ac_cv_func_aclsort" = x"no"; then 837 AC_CHECK_LIB(sec, aclsort) 838fi 839 840dnl At the moment we don't test for a broken memcmp(), because all we 841dnl need to do is test for equality, not comparison, and it seems that 842dnl every platform has a memcmp that can do at least that. 843dnl AC_FUNC_MEMCMP 844 845AC_FUNC_UTIME_NULL 846AC_FUNC_ALLOCA 847AC_CHECK_FUNCS(waitpid wait4 getcwd chown chmod lchmod mknod mkfifo \ 848 fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \ 849 chflags getattrlist mktime innetgr linkat \ 850 memmove lchown vsnprintf snprintf vasprintf asprintf setsid strpbrk \ 851 strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \ 852 setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ 853 seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ 854 extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ 855 initgroups utimensat posix_fallocate attropen setvbuf nanosleep usleep) 856 857dnl cygwin iconv.h defines iconv_open as libiconv_open 858if test x"$ac_cv_func_iconv_open" != x"yes"; then 859 AC_CHECK_FUNC(libiconv_open, [ac_cv_func_iconv_open=yes; AC_DEFINE(HAVE_ICONV_OPEN, 1)]) 860fi 861 862dnl Preallocation stuff (also fallocate, posix_fallocate function tests above): 863 864AC_CACHE_CHECK([for useable fallocate],rsync_cv_have_fallocate,[ 865AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h> 866#include <sys/types.h>]], [[fallocate(0, 0, 0, 0);]])],[rsync_cv_have_fallocate=yes],[rsync_cv_have_fallocate=no])]) 867if test x"$rsync_cv_have_fallocate" = x"yes"; then 868 AC_DEFINE(HAVE_FALLOCATE, 1, [Define to 1 if you have the fallocate function and it compiles and links without error]) 869fi 870 871AC_MSG_CHECKING([for FALLOC_FL_PUNCH_HOLE]) 872AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ 873 #define _GNU_SOURCE 1 874 #include <linux/falloc.h> 875 #ifndef FALLOC_FL_PUNCH_HOLE 876 #error FALLOC_FL_PUNCH_HOLE is missing 877 #endif 878 ]])], [ 879 AC_MSG_RESULT([yes]) 880 AC_DEFINE([HAVE_FALLOC_FL_PUNCH_HOLE], [1], [Define if FALLOC_FL_PUNCH_HOLE is available.]) 881 ], [ 882 AC_MSG_RESULT([no]) 883 ] 884) 885 886AC_MSG_CHECKING([for FALLOC_FL_ZERO_RANGE]) 887AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ 888 #define _GNU_SOURCE 1 889 #include <linux/falloc.h> 890 #ifndef FALLOC_FL_ZERO_RANGE 891 #error FALLOC_FL_ZERO_RANGE is missing 892 #endif 893 ]])], [ 894 AC_MSG_RESULT([yes]) 895 AC_DEFINE([HAVE_FALLOC_FL_ZERO_RANGE], [1], [Define if FALLOC_FL_ZERO_RANGE is available.]) 896 ], [ 897 AC_MSG_RESULT([no]) 898 ] 899) 900 901AC_CACHE_CHECK([for SYS_fallocate],rsync_cv_have_sys_fallocate,[ 902AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/syscall.h> 903#include <unistd.h> 904#include <sys/types.h>]], [[syscall(SYS_fallocate, 0, 0, (loff_t)0, (loff_t)0);]])],[rsync_cv_have_sys_fallocate=yes],[rsync_cv_have_sys_fallocate=no])]) 905if test x"$rsync_cv_have_sys_fallocate" = x"yes"; then 906 AC_DEFINE(HAVE_SYS_FALLOCATE, 1, [Define to 1 if you have the SYS_fallocate syscall number]) 907fi 908 909if test x"$ac_cv_func_posix_fallocate" = x"yes"; then 910 AC_MSG_CHECKING([whether posix_fallocate is efficient]) 911 case $host_os in 912 *cygwin*) 913 AC_MSG_RESULT(yes) 914 AC_DEFINE(HAVE_EFFICIENT_POSIX_FALLOCATE, 1, 915 [Define if posix_fallocate is efficient (Cygwin)]) 916 ;; 917 *) 918 AC_MSG_RESULT(no) 919 ;; 920 esac 921fi 922 923dnl End of preallocation stuff 924 925AC_CHECK_FUNCS(getpgrp tcgetpgrp) 926if test $ac_cv_func_getpgrp = yes; then 927 AC_FUNC_GETPGRP 928fi 929 930AC_ARG_ENABLE(iconv-open, 931 AS_HELP_STRING([--disable-iconv-open],[disable all use of iconv_open() function]), 932 [], [enable_iconv_open=$ac_cv_func_iconv_open]) 933 934if test x"$enable_iconv_open" != x"no"; then 935 AC_DEFINE(USE_ICONV_OPEN, 1, [Define to 1 if you want rsync to make use of iconv_open()]) 936fi 937 938AC_ARG_ENABLE(iconv, 939 AS_HELP_STRING([--disable-iconv],[disable rsync's --iconv option]), 940 [], [enable_iconv=$enable_iconv_open]) 941AH_TEMPLATE([ICONV_OPTION], 942[Define if you want the --iconv option. Specifying a value will set the 943default iconv setting (a NULL means no --iconv processing by default).]) 944if test x"$enable_iconv" != x"no"; then 945 if test x"$enable_iconv" = x"yes"; then 946 AC_DEFINE(ICONV_OPTION, NULL) 947 else 948 AC_DEFINE_UNQUOTED(ICONV_OPTION, "$enable_iconv") 949 fi 950 AC_DEFINE(UTF8_CHARSET, "UTF-8", [String to pass to iconv() for the UTF-8 charset.]) 951fi 952 953AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[ 954 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 955#if HAVE_UNISTD_H 956# include <unistd.h> 957#endif 958#include <stdlib.h> 959#include <errno.h> 960int main(void) { 961 char const *dangling_symlink = "conftest.dangle"; 962 unlink(dangling_symlink); 963 if (symlink("conftest.no-such", dangling_symlink) < 0) abort(); 964 if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) return 1; 965 return 0; 966 }]])],[rsync_cv_chown_modifies_symlink=yes],[rsync_cv_chown_modifies_symlink=no],[rsync_cv_chown_modifies_symlink=no])]) 967if test $rsync_cv_chown_modifies_symlink = yes; then 968 AC_DEFINE(CHOWN_MODIFIES_SYMLINK, 1, [Define to 1 if chown modifies symlinks.]) 969fi 970 971AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_symlink,[ 972 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 973#ifdef HAVE_FCNTL_H 974# include <fcntl.h> 975#elif defined HAVE_SYS_FCNTL_H 976# include <sys/fcntl.h> 977#endif 978#if HAVE_UNISTD_H 979# include <unistd.h> 980#endif 981#include <stdlib.h> 982#include <errno.h> 983#define FILENAME "conftest.dangle" 984int main(void) { 985 unlink(FILENAME); 986 if (symlink("conftest.no-such", FILENAME) < 0) abort(); 987 unlink(FILENAME "2"); 988#ifdef HAVE_LINKAT 989 if (linkat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME "2", 0) < 0) return 1; 990#else 991 if (link(FILENAME, FILENAME "2") < 0) return 1; 992#endif 993 return 0; 994 }]])],[rsync_cv_can_hardlink_symlink=yes],[rsync_cv_can_hardlink_symlink=no],[rsync_cv_can_hardlink_symlink=no])]) 995if test $rsync_cv_can_hardlink_symlink = yes; then 996 AC_DEFINE(CAN_HARDLINK_SYMLINK, 1, [Define to 1 if link() can hard-link symlinks.]) 997fi 998 999AC_CACHE_CHECK([whether link() can hard-link special files],rsync_cv_can_hardlink_special,[ 1000 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1001#if HAVE_UNISTD_H 1002# include <unistd.h> 1003#endif 1004#ifdef HAVE_SYS_STAT_H 1005#include <sys/stat.h> 1006#endif 1007#include <stdlib.h> 1008#include <errno.h> 1009#define FILENAME "conftest.fifi" 1010int main(void) { 1011 unlink(FILENAME); 1012 if (mkfifo(FILENAME, 0777) < 0) abort(); 1013 unlink(FILENAME "2"); 1014 if (link(FILENAME, FILENAME "2") < 0) return 1; 1015 return 0; 1016 }]])],[rsync_cv_can_hardlink_special=yes],[rsync_cv_can_hardlink_special=no],[rsync_cv_can_hardlink_special=no])]) 1017if test $rsync_cv_can_hardlink_special = yes; then 1018 AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.]) 1019fi 1020 1021AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[ 1022AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1023#include <sys/types.h> 1024#include <sys/socket.h> 1025 1026int main(void) { 1027 int fd[2]; 1028 return (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != -1) ? 0 : 1; 1029}]])],[rsync_cv_HAVE_SOCKETPAIR=yes],[rsync_cv_HAVE_SOCKETPAIR=no],[rsync_cv_HAVE_SOCKETPAIR=cross])]) 1030if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then 1031 AC_DEFINE(HAVE_SOCKETPAIR, 1, [Define to 1 if you have the "socketpair" function]) 1032fi 1033 1034AC_REPLACE_FUNCS([getpass]) 1035 1036if test x"$with_included_popt" != x"yes"; then 1037 AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes]) 1038fi 1039if test x"$ac_cv_header_popt_popt_h" = x"yes"; then 1040 # If the system has /usr/include/popt/popt.h, we enable the 1041 # included popt because an attempt to "#include <popt/popt.h>" 1042 # would use our included header file anyway (due to -I.), and 1043 # might conflict with the system popt. 1044 with_included_popt=yes 1045elif test x"$ac_cv_header_popt_h" != x"yes"; then 1046 with_included_popt=yes 1047fi 1048 1049AC_MSG_CHECKING([whether to use included libpopt]) 1050if test x"$with_included_popt" = x"yes"; then 1051 AC_MSG_RESULT($srcdir/popt) 1052 BUILD_POPT='$(popt_OBJS)' 1053 CFLAGS="-I$srcdir/popt $CFLAGS" 1054 if test x"$ALLOCA" != x 1055 then 1056 # this can be removed when/if we add an included alloca.c; 1057 # see autoconf documentation on AC_FUNC_ALLOCA 1058 AC_MSG_WARN([included libpopt will use malloc, not alloca (which wastes a small amount of memory)]) 1059 fi 1060else 1061 AC_MSG_RESULT(no) 1062fi 1063 1064# We default to using our zlib unless --with-included-zlib=no is given. 1065if test x"$with_included_zlib" != x"no"; then 1066 with_included_zlib=yes 1067elif test x"$ac_cv_header_zlib_h" != x"yes"; then 1068 with_included_zlib=yes 1069fi 1070if test x"$with_included_zlib" != x"yes"; then 1071 AC_CHECK_LIB(z, deflateParams, , [with_included_zlib=yes]) 1072fi 1073 1074AC_MSG_CHECKING([whether to use included zlib]) 1075if test x"$with_included_zlib" = x"yes"; then 1076 AC_MSG_RESULT($srcdir/zlib) 1077 BUILD_ZLIB='$(zlib_OBJS)' 1078 CFLAGS="-I$srcdir/zlib $CFLAGS" 1079else 1080 AC_DEFINE(EXTERNAL_ZLIB, 1, [Define to 1 if using external zlib]) 1081 AC_MSG_RESULT(no) 1082fi 1083 1084AC_CACHE_CHECK([for unsigned char],rsync_cv_SIGNED_CHAR_OK,[ 1085AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[signed char *s = ""]])],[rsync_cv_SIGNED_CHAR_OK=yes],[rsync_cv_SIGNED_CHAR_OK=no])]) 1086if test x"$rsync_cv_SIGNED_CHAR_OK" = x"yes"; then 1087 AC_DEFINE(SIGNED_CHAR_OK, 1, [Define to 1 if "signed char" is a valid type]) 1088fi 1089 1090AC_CACHE_CHECK([for broken readdir],rsync_cv_HAVE_BROKEN_READDIR,[ 1091AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h> 1092#include <dirent.h> 1093int main(void) { struct dirent *di; DIR *d = opendir("."); di = readdir(d); 1094if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && 1095di->d_name[0] == 0) return 0; return 1;} ]])],[rsync_cv_HAVE_BROKEN_READDIR=yes],[rsync_cv_HAVE_BROKEN_READDIR=no],[rsync_cv_HAVE_BROKEN_READDIR=cross])]) 1096if test x"$rsync_cv_HAVE_BROKEN_READDIR" = x"yes"; then 1097 AC_DEFINE(HAVE_BROKEN_READDIR, 1, [Define to 1 if readdir() is broken]) 1098fi 1099 1100AC_CACHE_CHECK([for utimbuf],rsync_cv_HAVE_STRUCT_UTIMBUF,[ 1101AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1102#include <utime.h>]], [[struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; return utime("foo.c",&tbuf);]])],[rsync_cv_HAVE_STRUCT_UTIMBUF=yes],[rsync_cv_HAVE_STRUCT_UTIMBUF=no])]) 1103if test x"$rsync_cv_HAVE_STRUCT_UTIMBUF" = x"yes"; then 1104 AC_DEFINE(HAVE_STRUCT_UTIMBUF, 1, [Define to 1 if you have the "struct utimbuf" type]) 1105fi 1106 1107AC_CACHE_CHECK([if gettimeofday takes tz argument],rsync_cv_HAVE_GETTIMEOFDAY_TZ,[ 1108AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/time.h> 1109#include <unistd.h>]], [[struct timeval tv; return gettimeofday(&tv, NULL);]])],[rsync_cv_HAVE_GETTIMEOFDAY_TZ=yes],[rsync_cv_HAVE_GETTIMEOFDAY_TZ=no])]) 1110if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" != x"no"; then 1111 AC_DEFINE(HAVE_GETTIMEOFDAY_TZ, 1, [Define to 1 if gettimeofday() takes a time-zone arg]) 1112fi 1113 1114AC_CACHE_CHECK([for C99 vsnprintf],rsync_cv_HAVE_C99_VSNPRINTF,[ 1115AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1116#include <sys/types.h> 1117#include <stdarg.h> 1118#include <stdio.h> 1119#include <stdlib.h> 1120#include <string.h> 1121void foo(const char *format, ...) { 1122 va_list ap; 1123 int len; 1124 static char buf[] = "12345678901234567890"; 1125 1126 va_start(ap, format); 1127 len = vsnprintf(0, 0, format, ap); 1128 va_end(ap); 1129 if (len != 5) exit(1); 1130 1131 if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); 1132} 1133int main(void) { foo("hello"); return 0; } 1134]])],[rsync_cv_HAVE_C99_VSNPRINTF=yes],[rsync_cv_HAVE_C99_VSNPRINTF=no],[rsync_cv_HAVE_C99_VSNPRINTF=cross])]) 1135if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then 1136 AC_DEFINE(HAVE_C99_VSNPRINTF, 1, [Define to 1 if vsprintf has a C99-compatible return value]) 1137fi 1138 1139 1140AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[ 1141AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h> 1142#include <sys/types.h> 1143#include <sys/stat.h> 1144#include <unistd.h> 1145int main(void) { 1146 struct stat st; 1147 char tpl[20]="/tmp/test.XXXXXX"; 1148 int fd = mkstemp(tpl); 1149 if (fd == -1) return 1; 1150 unlink(tpl); 1151 if (fstat(fd, &st) != 0) return 1; 1152 if ((st.st_mode & 0777) != 0600) return 1; 1153 return 0; 1154}]])],[rsync_cv_HAVE_SECURE_MKSTEMP=yes],[rsync_cv_HAVE_SECURE_MKSTEMP=no],[rsync_cv_HAVE_SECURE_MKSTEMP=cross])]) 1155if test x"$rsync_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then 1156 case $host_os in 1157 hpux*) 1158 dnl HP-UX has a broken mkstemp() implementation they refuse to fix, 1159 dnl so we noisily skip using it. See HP change request JAGaf34426 1160 dnl for details. (sbonds) 1161 AC_MSG_WARN(Skipping broken HP-UX mkstemp() -- using mktemp() instead) 1162 ;; 1163 *) 1164 AC_DEFINE(HAVE_SECURE_MKSTEMP, 1, [Define to 1 if mkstemp() is available and works right]) 1165 ;; 1166 esac 1167fi 1168 1169 1170AC_CACHE_CHECK([if mknod creates FIFOs],rsync_cv_MKNOD_CREATES_FIFOS,[ 1171AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1172#include <stdio.h> 1173#include <sys/stat.h> 1174#include <errno.h> 1175#if HAVE_UNISTD_H 1176# include <unistd.h> 1177#endif 1178int main(void) { int rc, ec; char *fn = "fifo-test"; 1179unlink(fn); rc = mknod(fn,S_IFIFO,0600); ec = errno; unlink(fn); 1180if (rc) {printf("(%d %d) ",rc,ec); return ec;} 1181return 0;}]])],[rsync_cv_MKNOD_CREATES_FIFOS=yes],[rsync_cv_MKNOD_CREATES_FIFOS=no],[rsync_cv_MKNOD_CREATES_FIFOS=cross])]) 1182if test x"$rsync_cv_MKNOD_CREATES_FIFOS" = x"yes"; then 1183 AC_DEFINE(MKNOD_CREATES_FIFOS, 1, [Define to 1 if mknod() can create FIFOs.]) 1184fi 1185 1186AC_CACHE_CHECK([if mknod creates sockets],rsync_cv_MKNOD_CREATES_SOCKETS,[ 1187AC_RUN_IFELSE([AC_LANG_SOURCE([[ 1188#include <stdio.h> 1189#include <sys/stat.h> 1190#include <errno.h> 1191#if HAVE_UNISTD_H 1192# include <unistd.h> 1193#endif 1194int main(void) { int rc, ec; char *fn = "sock-test"; 1195unlink(fn); rc = mknod(fn,S_IFSOCK,0600); ec = errno; unlink(fn); 1196if (rc) {printf("(%d %d) ",rc,ec); return ec;} 1197return 0;}]])],[rsync_cv_MKNOD_CREATES_SOCKETS=yes],[rsync_cv_MKNOD_CREATES_SOCKETS=no],[rsync_cv_MKNOD_CREATES_SOCKETS=cross])]) 1198if test x"$rsync_cv_MKNOD_CREATES_SOCKETS" = x"yes"; then 1199 AC_DEFINE(MKNOD_CREATES_SOCKETS, 1, [Define to 1 if mknod() can create sockets.]) 1200fi 1201 1202# 1203# The following test was mostly taken from the tcl/tk plus patches 1204# 1205AC_CACHE_CHECK([whether -c -o works],rsync_cv_DASHC_WORKS_WITH_DASHO,[ 1206rm -rf conftest* 1207cat > conftest.$ac_ext <<EOF 1208int main(void) { return 0; } 1209EOF 1210${CC-cc} -c -o conftest..o conftest.$ac_ext 1211if test -f conftest..o; then 1212 rsync_cv_DASHC_WORKS_WITH_DASHO=yes 1213else 1214 rsync_cv_DASHC_WORKS_WITH_DASHO=no 1215fi 1216rm -rf conftest* 1217]) 1218if test x"$rsync_cv_DASHC_WORKS_WITH_DASHO" = x"yes"; then 1219 OBJ_SAVE="#" 1220 OBJ_RESTORE="#" 1221 CC_SHOBJ_FLAG='-o $@' 1222else 1223 OBJ_SAVE=' @b=`basename $@ .o`;rm -f $$b.o.sav;if test -f $$b.o; then mv $$b.o $$b.o.sav;fi;' 1224 OBJ_RESTORE=' @b=`basename $@ .o`;if test "$$b.o" != "$@"; then mv $$b.o $@; if test -f $$b.o.sav; then mv $$b.o.sav $$b.o; fi; fi' 1225 CC_SHOBJ_FLAG="" 1226fi 1227 1228AC_SUBST(OBJ_SAVE) 1229AC_SUBST(OBJ_RESTORE) 1230AC_SUBST(CC_SHOBJ_FLAG) 1231AC_SUBST(BUILD_POPT) 1232AC_SUBST(BUILD_ZLIB) 1233AC_SUBST(MAKE_MAN) 1234 1235AC_CHECK_FUNCS(_acl __acl _facl __facl) 1236################################################# 1237# check for ACL support 1238 1239AC_MSG_CHECKING([whether to support ACLs]) 1240AC_ARG_ENABLE(acl-support, 1241 AS_HELP_STRING([--disable-acl-support],[disable ACL support])) 1242 1243if test x"$enable_acl_support" = x"no"; then 1244 AC_MSG_RESULT(no) 1245else 1246 case "$host_os" in 1247 *sysv5*) 1248 AC_MSG_RESULT(Using UnixWare ACLs) 1249 AC_DEFINE(HAVE_UNIXWARE_ACLS, 1, [true if you have UnixWare ACLs]) 1250 AC_DEFINE(SUPPORT_ACLS, 1, [Define to 1 to add support for ACLs]) 1251 ;; 1252 solaris*) 1253 AC_MSG_RESULT(Using solaris ACLs) 1254 AC_DEFINE(HAVE_SOLARIS_ACLS, 1, [true if you have solaris ACLs]) 1255 AC_DEFINE(SUPPORT_ACLS, 1) 1256 ;; 1257 *irix*) 1258 AC_MSG_RESULT(Using IRIX ACLs) 1259 AC_DEFINE(HAVE_IRIX_ACLS, 1, [true if you have IRIX ACLs]) 1260 AC_DEFINE(SUPPORT_ACLS, 1) 1261 ;; 1262 *aix*) 1263 AC_MSG_RESULT(Using AIX ACLs) 1264 AC_DEFINE(HAVE_AIX_ACLS, 1, [true if you have AIX ACLs]) 1265 AC_DEFINE(SUPPORT_ACLS, 1) 1266 ;; 1267 *osf*) 1268 AC_MSG_RESULT(Using Tru64 ACLs) 1269 AC_DEFINE(HAVE_TRU64_ACLS, 1, [true if you have Tru64 ACLs]) 1270 AC_DEFINE(SUPPORT_ACLS, 1) 1271 LIBS="$LIBS -lpacl" 1272 ;; 1273 darwin*) 1274 AC_MSG_RESULT(Using OS X ACLs) 1275 AC_DEFINE(HAVE_OSX_ACLS, 1, [true if you have Mac OS X ACLs]) 1276 AC_DEFINE(SUPPORT_ACLS, 1) 1277 ;; 1278 *hpux*|*nsk*) 1279 AC_MSG_RESULT(Using HPUX ACLs) 1280 AC_DEFINE(HAVE_HPUX_ACLS, 1, [true if you have HPUX ACLs]) 1281 AC_DEFINE(SUPPORT_ACLS, 1) 1282 ;; 1283 *) 1284 AC_MSG_RESULT(running tests:) 1285 AC_CHECK_LIB(acl,acl_get_file) 1286 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[ 1287 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1288#include <sys/acl.h>]], [[ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);]])],[samba_cv_HAVE_POSIX_ACLS=yes],[samba_cv_HAVE_POSIX_ACLS=no])]) 1289 AC_MSG_CHECKING(ACL test results) 1290 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then 1291 AC_MSG_RESULT(Using posix ACLs) 1292 AC_DEFINE(HAVE_POSIX_ACLS, 1, [true if you have posix ACLs]) 1293 AC_DEFINE(SUPPORT_ACLS, 1) 1294 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[ 1295 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> 1296#include <sys/acl.h>]], [[ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);]])],[samba_cv_HAVE_ACL_GET_PERM_NP=yes],[samba_cv_HAVE_ACL_GET_PERM_NP=no])]) 1297 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then 1298 AC_DEFINE(HAVE_ACL_GET_PERM_NP, 1, [true if you have acl_get_perm_np]) 1299 fi 1300 else 1301 if test x"$enable_acl_support" = x"yes"; then 1302 AC_MSG_ERROR(Failed to find ACL support) 1303 else 1304 AC_MSG_RESULT(No ACL support found) 1305 fi 1306 fi 1307 ;; 1308 esac 1309fi 1310 1311################################################# 1312# check for extended attribute support 1313AC_MSG_CHECKING(whether to support extended attributes) 1314AC_ARG_ENABLE(xattr-support, 1315 AS_HELP_STRING([--disable-xattr-support],[disable extended attributes]), 1316 [], [case "$ac_cv_func_getxattr$ac_cv_func_extattr_get_link$ac_cv_func_attropen" in 1317 *yes*) enable_xattr_support=maybe ;; 1318 *) enable_xattr_support=no ;; 1319 esac]) 1320AH_TEMPLATE([SUPPORT_XATTRS], 1321[Define to 1 to add support for extended attributes]) 1322if test x"$enable_xattr_support" = x"no"; then 1323 AC_MSG_RESULT(no) 1324else 1325 case "$host_os" in 1326 *linux*|*netbsd*|*cygwin*) 1327 AC_MSG_RESULT(Using Linux xattrs) 1328 AC_DEFINE(HAVE_LINUX_XATTRS, 1, [True if you have Linux xattrs (or equivalent)]) 1329 AC_DEFINE(SUPPORT_XATTRS, 1) 1330 AC_DEFINE(NO_SYMLINK_USER_XATTRS, 1, [True if symlinks do not support user xattrs]) 1331 AC_CHECK_LIB(attr,getxattr) 1332 ;; 1333 darwin*) 1334 AC_MSG_RESULT(Using OS X xattrs) 1335 AC_DEFINE(HAVE_OSX_XATTRS, 1, [True if you have Mac OS X xattrs]) 1336 AC_DEFINE(SUPPORT_XATTRS, 1) 1337 AC_DEFINE(NO_DEVICE_XATTRS, 1, [True if device files do not support xattrs]) 1338 AC_DEFINE(NO_SPECIAL_XATTRS, 1, [True if special files do not support xattrs]) 1339 ;; 1340 freebsd*) 1341 AC_MSG_RESULT(Using FreeBSD extattrs) 1342 AC_DEFINE(HAVE_FREEBSD_XATTRS, 1, [True if you have FreeBSD xattrs]) 1343 AC_DEFINE(SUPPORT_XATTRS, 1) 1344 ;; 1345 solaris*) 1346 AC_MSG_RESULT(Using Solaris xattrs) 1347 AC_DEFINE(HAVE_SOLARIS_XATTRS, 1, [True if you have Solaris xattrs]) 1348 AC_DEFINE(SUPPORT_XATTRS, 1) 1349 AC_DEFINE(NO_SYMLINK_XATTRS, 1, [True if symlinks do not support xattrs]) 1350 ;; 1351 *) 1352 if test x"$enable_xattr_support" = x"yes"; then 1353 AC_MSG_ERROR(Failed to find extended attribute support) 1354 else 1355 AC_MSG_RESULT(No extended attribute support found) 1356 fi 1357 ;; 1358 esac 1359fi 1360 1361if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x"$enable_iconv" = x"no"; then 1362 AC_MSG_CHECKING([whether $CC supports -Wno-unused-parameter]) 1363 OLD_CFLAGS="$CFLAGS" 1364 CFLAGS="$CFLAGS -Wno-unused-parameter" 1365 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[printf("hello\n");]])],[rsync_warn_flag=yes],[rsync_warn_flag=no]) 1366 AC_MSG_RESULT([$rsync_warn_flag]) 1367 if test x"$rsync_warn_flag" = x"no"; then 1368 CFLAGS="$OLD_CFLAGS" 1369 fi 1370fi 1371 1372case "$CC" in 1373' checker'*|checker*) 1374 AC_DEFINE(FORCE_FD_ZERO_MEMSET, 1, [Used to make "checker" understand that FD_ZERO() clears memory.]) 1375 ;; 1376esac 1377 1378AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig]) 1379AC_OUTPUT 1380 1381AC_MSG_RESULT() 1382AC_MSG_RESULT([ rsync $PACKAGE_VERSION configuration successful]) 1383AC_MSG_RESULT() 1384