1dnl Process this file with autoconf to produce a configure script. 2 3AC_INIT() 4AC_CONFIG_SRCDIR([byteorder.h]) 5AC_CONFIG_HEADER(config.h) 6AC_PREREQ(2.59) 7 8RSYNC_VERSION=2.6.9 9AC_SUBST(RSYNC_VERSION) 10AC_MSG_NOTICE([Configuring rsync $RSYNC_VERSION]) 11 12AC_DEFINE_UNQUOTED(RSYNC_VERSION, ["$RSYNC_VERSION"], [rsync release version]) 13 14LDFLAGS=${LDFLAGS-""} 15 16AC_CANONICAL_TARGET([]) 17 18dnl Checks for programs. 19AC_PROG_CC 20AC_PROG_CPP 21AC_PROG_EGREP 22AC_PROG_INSTALL 23AC_PROG_CC_STDC 24AC_SUBST(SHELL) 25 26AC_DEFINE([_GNU_SOURCE], 1, 27 [Define _GNU_SOURCE so that we get all necessary prototypes]) 28 29if test x"$ac_cv_prog_cc_stdc" = x"no"; then 30 AC_MSG_WARN([rsync requires an ANSI C compiler and you don't seem to have one]) 31fi 32 33# We must decide this before testing the compiler. 34 35# Please allow this to default to yes, so that your users have more 36# chance of getting a useful stack trace if problems occur. 37 38AC_MSG_CHECKING([whether to include debugging symbols]) 39AC_ARG_ENABLE(debug, 40 AC_HELP_STRING([--disable-debug], 41 [turn off debugging symbols and features])) 42 43if test x"$enable_debug" = x"no"; then 44 AC_MSG_RESULT(no) 45 CFLAGS=${CFLAGS-"-O"} 46else 47 AC_MSG_RESULT([yes]) 48 # leave CFLAGS alone; AC_PROG_CC will try to include -g if it can 49 dnl AC_DEFINE(DEBUG, 1, [Define to turn on debugging code that may slow normal operation]) 50 dnl CFLAGS=${CFLAGS-"-g"} 51fi 52 53 54AC_ARG_ENABLE(profile, 55 AC_HELP_STRING([--enable-profile], 56 [turn on CPU profiling])) 57if test x"$enable_profile" = x"yes"; then 58 CFLAGS="$CFLAGS -pg" 59fi 60 61 62# Specifically, this turns on panic_action handling. 63AC_ARG_ENABLE(maintainer-mode, 64 AC_HELP_STRING([--enable-maintainer-mode], 65 [turn on extra debug features])) 66if test x"$enable_maintainer_mode" = x"yes"; then 67 CFLAGS="$CFLAGS -DMAINTAINER_MODE" 68fi 69 70 71# This is needed for our included version of popt. Kind of silly, but 72# I don't want our version too far out of sync. 73CFLAGS="$CFLAGS -DHAVE_CONFIG_H" 74 75# If GCC, turn on warnings. 76if test x"$GCC" = x"yes"; then 77 CFLAGS="$CFLAGS -Wall -W" 78fi 79 80AC_ARG_WITH(included-popt, 81 AC_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])) 82 83AC_ARG_WITH(rsync-path, 84 AC_HELP_STRING([--with-rsync-path=PATH], [set default --rsync-path to PATH (default: rsync)]), 85 [ RSYNC_PATH="$with_rsync_path" ], 86 [ RSYNC_PATH="rsync" ]) 87 88AC_DEFINE_UNQUOTED(RSYNC_PATH, "$RSYNC_PATH", [location of rsync on remote machine]) 89 90AC_ARG_WITH(rsyncd-conf, 91 AC_HELP_STRING([--with-rsyncd-conf=PATH], [set configuration file for rsync server to PATH (default: /etc/rsyncd.conf)]), 92 [ if test ! -z "$with_rsyncd_conf" ; then 93 case $with_rsyncd_conf in 94 yes|no) 95 RSYNCD_SYSCONF="/etc/rsyncd.conf" 96 ;; 97 /*) 98 RSYNCD_SYSCONF="$with_rsyncd_conf" 99 ;; 100 *) 101 AC_MSG_ERROR(You must specify an absolute path to --with-rsyncd-conf=PATH) 102 ;; 103 esac 104 else 105 RSYNCD_SYSCONF="/etc/rsyncd.conf" 106 fi ], 107 [ RSYNCD_SYSCONF="/etc/rsyncd.conf" ]) 108 109AC_DEFINE_UNQUOTED(RSYNCD_SYSCONF, "$RSYNCD_SYSCONF", [location of configuration file for rsync server]) 110 111AC_ARG_WITH(rsh, 112 AC_HELP_STRING([--with-rsh=CMD], [set remote shell command to CMD (default: ssh)])) 113 114AC_CHECK_PROG(HAVE_REMSH, remsh, 1, 0) 115if test x$HAVE_REMSH = x1; then 116 AC_DEFINE(HAVE_REMSH, 1, [Define to 1 if remote shell is remsh, not rsh]) 117fi 118 119if test x"$with_rsh" != x; then 120 RSYNC_RSH="$with_rsh" 121else 122 RSYNC_RSH="ssh" 123fi 124AC_DEFINE_UNQUOTED(RSYNC_RSH, "$RSYNC_RSH", [default -e command]) 125 126AC_ARG_WITH(nobody-group, 127 AC_HELP_STRING([--with-nobody-group=GROUP], 128 [set the default unprivileged group (default nobody or nogroup)]), 129 [ NOBODY_GROUP="$with_nobody_group" ]) 130 131if test x"$with_nobody_group" = x; then 132 AC_MSG_CHECKING([the group for user "nobody"]) 133 if grep '^nobody:' /etc/group >/dev/null 2>&1; then 134 NOBODY_GROUP=nobody 135 elif grep '^nogroup:' /etc/group >/dev/null 2>&1; then 136 NOBODY_GROUP=nogroup 137 else 138 NOBODY_GROUP=nobody # test for others? 139 fi 140 AC_MSG_RESULT($NOBODY_GROUP) 141fi 142 143AC_DEFINE_UNQUOTED(NOBODY_USER, "nobody", [unprivileged user--e.g. nobody]) 144AC_DEFINE_UNQUOTED(NOBODY_GROUP, "$NOBODY_GROUP", [unprivileged group for unprivileged user]) 145 146# arrgh. libc in some old debian version screwed up the largefile 147# stuff, getting byte range locking wrong 148AC_CACHE_CHECK([for broken largefile support],rsync_cv_HAVE_BROKEN_LARGEFILE,[ 149AC_TRY_RUN([ 150#define _FILE_OFFSET_BITS 64 151#include <stdio.h> 152#include <fcntl.h> 153#include <sys/types.h> 154#include <sys/wait.h> 155 156int main(void) 157{ 158 struct flock lock; 159 int status; 160 char tpl[32] = "/tmp/locktest.XXXXXX"; 161 int fd = mkstemp(tpl); 162 if (fd < 0) { 163 strcpy(tpl, "conftest.dat"); 164 fd = open(tpl, O_CREAT|O_RDWR, 0600); 165 } 166 167 lock.l_type = F_WRLCK; 168 lock.l_whence = SEEK_SET; 169 lock.l_start = 0; 170 lock.l_len = 1; 171 lock.l_pid = 0; 172 fcntl(fd,F_SETLK,&lock); 173 if (fork() == 0) { 174 lock.l_start = 1; 175 _exit(fcntl(fd,F_SETLK,&lock) == 0); 176 } 177 wait(&status); 178 unlink(tpl); 179 exit(WEXITSTATUS(status)); 180} 181], 182rsync_cv_HAVE_BROKEN_LARGEFILE=yes,rsync_cv_HAVE_BROKEN_LARGEFILE=no,rsync_cv_HAVE_BROKEN_LARGEFILE=cross)]) 183if test x"$rsync_cv_HAVE_BROKEN_LARGEFILE" != x"yes"; then 184 AC_SYS_LARGEFILE 185fi 186 187ipv6type=unknown 188ipv6lib=none 189ipv6trylibc=yes 190 191AC_ARG_ENABLE(ipv6, 192 AC_HELP_STRING([--disable-ipv6], 193 [don't even try to use IPv6])) 194if test x"$enable_ipv6" != x"no"; then 195 AC_MSG_CHECKING([ipv6 stack type]) 196 for i in inria kame linux-glibc linux-inet6 toshiba v6d zeta; do 197 case $i in 198 inria) 199 # http://www.kame.net/ 200 AC_EGREP_CPP(yes, [ 201#include <netinet/in.h> 202#ifdef IPV6_INRIA_VERSION 203yes 204#endif], 205 [ipv6type=$i; 206 AC_DEFINE(INET6, 1, [true if you have IPv6]) 207 ]) 208 ;; 209 kame) 210 # http://www.kame.net/ 211 AC_EGREP_CPP(yes, [ 212#include <netinet/in.h> 213#ifdef __KAME__ 214yes 215#endif], 216 [ipv6type=$i; 217 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 218 ;; 219 linux-glibc) 220 # http://www.v6.linux.or.jp/ 221 AC_EGREP_CPP(yes, [ 222#include <features.h> 223#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 224yes 225#endif], 226 [ipv6type=$i; 227AC_DEFINE(INET6, 1, [true if you have IPv6])]) 228 ;; 229 linux-inet6) 230 # http://www.v6.linux.or.jp/ 231 if test -d /usr/inet6 -o -f /usr/inet6/lib/libinet6.a; then 232 ipv6type=$i 233 ipv6lib=inet6 234 ipv6libdir=/usr/inet6/lib 235 ipv6trylibc=yes; 236 AC_DEFINE(INET6, 1, [true if you have IPv6]) 237 CFLAGS="-I/usr/inet6/include $CFLAGS" 238 fi 239 ;; 240 toshiba) 241 AC_EGREP_CPP(yes, [ 242#include <sys/param.h> 243#ifdef _TOSHIBA_INET6 244yes 245#endif], 246 [ipv6type=$i; 247 ipv6lib=inet6; 248 ipv6libdir=/usr/local/v6/lib; 249 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 250 ;; 251 v6d) 252 AC_EGREP_CPP(yes, [ 253#include </usr/local/v6/include/sys/v6config.h> 254#ifdef __V6D__ 255yes 256#endif], 257 [ipv6type=$i; 258 ipv6lib=v6; 259 ipv6libdir=/usr/local/v6/lib; 260 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 261 ;; 262 zeta) 263 AC_EGREP_CPP(yes, [ 264#include <sys/param.h> 265#ifdef _ZETA_MINAMI_INET6 266yes 267#endif], 268 [ipv6type=$i; 269 ipv6lib=inet6; 270 ipv6libdir=/usr/local/v6/lib; 271 AC_DEFINE(INET6, 1, [true if you have IPv6])]) 272 ;; 273 esac 274 if test "$ipv6type" != "unknown"; then 275 break 276 fi 277 done 278 AC_MSG_RESULT($ipv6type) 279 280 AC_SEARCH_LIBS(getaddrinfo, inet6) 281fi 282 283dnl Do you want to disable use of locale functions 284AC_ARG_ENABLE([locale], 285 AC_HELP_STRING([--disable-locale], 286 [turn off locale features])) 287AH_TEMPLATE([CONFIG_LOCALE], 288[Undefine if you don't want locale features. By default this is defined.]) 289if test x"$enable_locale" != x"no"; then 290 AC_DEFINE(CONFIG_LOCALE) 291fi 292 293AC_MSG_CHECKING([whether to call shutdown on all sockets]) 294case $host_os in 295 *cygwin* ) AC_MSG_RESULT(yes) 296 AC_DEFINE(SHUTDOWN_ALL_SOCKETS, 1, 297 [Define to 1 if sockets need to be shutdown]) 298 ;; 299 * ) AC_MSG_RESULT(no);; 300esac 301 302AC_C_BIGENDIAN 303AC_HEADER_DIRENT 304AC_HEADER_TIME 305AC_HEADER_SYS_WAIT 306AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ 307 unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \ 308 sys/ioctl.h sys/filio.h string.h stdlib.h sys/socket.h sys/mode.h \ 309 sys/un.h glob.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \ 310 netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h) 311AC_HEADER_MAJOR 312 313AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ 314AC_TRY_RUN([ 315#include <sys/types.h> 316#ifdef MAJOR_IN_MKDEV 317#include <sys/mkdev.h> 318# if !defined makedev && (defined mkdev || defined _WIN32 || defined __WIN32__) 319# define makedev mkdev 320# endif 321#elif defined MAJOR_IN_SYSMACROS 322#include <sys/sysmacros.h> 323#endif 324 325int main(void) 326{ 327 dev_t dev = makedev(0, 5, 7); 328 if (major(dev) != 5 || minor(dev) != 7) 329 exit(1); 330 return 0; 331} 332], 333rsync_cv_MAKEDEV_TAKES_3_ARGS=yes,rsync_cv_MAKEDEV_TAKES_3_ARGS=no,rsync_cv_MAKEDEV_TAKES_3_ARGS=no)]) 334if test x"$rsync_cv_MAKEDEV_TAKES_3_ARGS" = x"yes"; then 335 AC_DEFINE(MAKEDEV_TAKES_3_ARGS, 1, [Define to 1 if makedev() takes 3 args]) 336fi 337 338AC_CHECK_SIZEOF(int) 339AC_CHECK_SIZEOF(long) 340AC_CHECK_SIZEOF(long long) 341AC_CHECK_SIZEOF(short) 342AC_CHECK_SIZEOF(off_t) 343AC_CHECK_SIZEOF(off64_t) 344 345AC_C_INLINE 346AC_C_LONG_DOUBLE 347 348AC_TYPE_SIGNAL 349AC_TYPE_UID_T 350AC_TYPE_MODE_T 351AC_TYPE_OFF_T 352AC_TYPE_SIZE_T 353AC_TYPE_PID_T 354AC_TYPE_GETGROUPS 355AC_CHECK_MEMBERS([struct stat.st_rdev]) 356 357TYPE_SOCKLEN_T 358 359AC_CACHE_CHECK([for errno in errno.h],rsync_cv_errno, [ 360 AC_TRY_COMPILE([#include <errno.h>],[int i = errno], 361 rsync_cv_errno=yes,rsync_cv_have_errno_decl=no)]) 362if test x"$rsync_cv_errno" = x"yes"; then 363 AC_DEFINE(HAVE_ERRNO_DECL, 1, [Define to 1 if errno is declared in errno.h]) 364fi 365 366# The following test taken from the cvs sources 367# If we can't find connect, try looking in -lsocket, -lnsl, and -linet. 368# These need checks to be before checks for any other functions that 369# might be in the same libraries. 370# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has 371# libsocket.so which has a bad implementation of gethostbyname (it 372# only looks in /etc/hosts), so we only look for -lsocket if we need 373# it. 374AC_CHECK_FUNCS(connect) 375if test x"$ac_cv_func_connect" = x"no"; then 376 case "$LIBS" in 377 *-lnsl*) ;; 378 *) AC_CHECK_LIB(nsl_s, printf) ;; 379 esac 380 case "$LIBS" in 381 *-lnsl*) ;; 382 *) AC_CHECK_LIB(nsl, printf) ;; 383 esac 384 case "$LIBS" in 385 *-lsocket*) ;; 386 *) AC_CHECK_LIB(socket, connect) ;; 387 esac 388 case "$LIBS" in 389 *-linet*) ;; 390 *) AC_CHECK_LIB(inet, connect) ;; 391 esac 392 dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value 393 dnl has been cached. 394 if test x"$ac_cv_lib_socket_connect" = x"yes" || 395 test x"$ac_cv_lib_inet_connect" = x"yes"; then 396 # ac_cv_func_connect=yes 397 # don't! it would cause AC_CHECK_FUNC to succeed next time configure is run 398 AC_DEFINE(HAVE_CONNECT, 1, [Define to 1 if you have the "connect" function]) 399 fi 400fi 401 402AC_SEARCH_LIBS(inet_ntop, resolv) 403 404# Solaris and HP-UX weirdness: 405# Search for libiconv_open (not iconv_open) to discover if -liconv is needed! 406AC_SEARCH_LIBS(libiconv_open, iconv) 407 408dnl AC_MSG_NOTICE([Looking in libraries: $LIBS]) 409 410AC_CHECK_FUNCS(inet_ntop, , [AC_LIBOBJ(lib/inet_ntop)]) 411AC_CHECK_FUNCS(inet_pton, , [AC_LIBOBJ(lib/inet_pton)]) 412 413# Irix 6.5 has getaddrinfo but not the corresponding defines, so use 414# builtin getaddrinfo if one of the defines don't exist 415AC_CACHE_CHECK([whether defines needed by getaddrinfo exist], 416 rsync_cv_HAVE_GETADDR_DEFINES,[ 417 AC_EGREP_CPP(yes, [ 418 #include <sys/types.h> 419 #include <sys/socket.h> 420 #include <netdb.h> 421 #ifdef AI_PASSIVE 422 yes 423 #endif], 424 rsync_cv_HAVE_GETADDR_DEFINES=yes, 425 rsync_cv_HAVE_GETADDR_DEFINES=no)]) 426if test x"$rsync_cv_HAVE_GETADDR_DEFINES" = x"yes"; then 427 # Tru64 UNIX has getaddrinfo() but has it renamed in libc as 428 # something else so we must include <netdb.h> to get the 429 # redefinition. 430 AC_CHECK_FUNCS(getaddrinfo, , 431 [AC_MSG_CHECKING([for getaddrinfo by including <netdb.h>]) 432 AC_TRY_LINK([#include <sys/types.h> 433 #include <sys/socket.h> 434 #include <netdb.h>],[getaddrinfo(NULL, NULL, NULL, NULL);], 435 [AC_MSG_RESULT([yes]) 436 AC_DEFINE(HAVE_GETADDRINFO, 1, 437 [Define to 1 if you have the "getaddrinfo" function.])], 438 [AC_MSG_RESULT([no]) 439 AC_LIBOBJ(lib/getaddrinfo)])]) 440 AC_CHECK_FUNCS(getnameinfo, , [AC_LIBOBJ(lib/getnameinfo)]) 441else 442 AC_LIBOBJ(lib/getaddrinfo) 443 AC_LIBOBJ(lib/getnameinfo) 444fi 445 446AC_CHECK_MEMBER([struct sockaddr.sa_len], 447 [ AC_DEFINE(HAVE_SOCKADDR_LEN, 1, [Do we have sockaddr.sa_len?]) ], 448 [], 449 [ 450#include <sys/types.h> 451#include <sys/socket.h> 452]) 453 454AC_CHECK_MEMBER([struct sockaddr_in.sin_len], 455 [ AC_DEFINE(HAVE_SOCKADDR_IN_LEN, 1, [Do we have sockaddr_in.sin_len?]) ], 456 [], 457 [ 458#include <sys/types.h> 459#include <sys/socket.h> 460#include <netinet/in.h> 461]) 462 463AC_CHECK_MEMBER([struct sockaddr_un.sun_len], 464 [ AC_DEFINE(HAVE_SOCKADDR_UN_LEN, 1, [Do we have sockaddr_un.sun_len?]) ], 465 [], 466 [ 467#include <sys/types.h> 468#include <sys/socket.h> 469#include <netinet/in.h> 470]) 471 472AC_MSG_CHECKING(struct sockaddr_storage) 473AC_TRY_COMPILE([#include <sys/types.h> 474#include <sys/socket.h>], 475[struct sockaddr_storage x;], 476 AC_MSG_RESULT(yes) 477 AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, 478 [Define to 1 if you have struct sockaddr_storage.] ), 479 AC_MSG_RESULT(no)) 480 481AC_CHECK_MEMBER([struct sockaddr_in6.sin6_scope_id], 482 [ AC_DEFINE(HAVE_SOCKADDR_IN6_SCOPE_ID, 1, [Do we have sockaddr_in6.sin6_scope_id?]) ], 483 [], 484 [ 485#include <sys/types.h> 486#include <sys/socket.h> 487#include <netinet/in.h> 488]) 489 490AC_MSG_CHECKING(struct stat64) 491AC_TRY_COMPILE([#include <stdio.h> 492#if HAVE_SYS_TYPES_H 493# include <sys/types.h> 494#endif 495#if HAVE_SYS_STAT_H 496# include <sys/stat.h> 497#endif 498#if STDC_HEADERS 499# include <stdlib.h> 500# include <stddef.h> 501#else 502# if HAVE_STDLIB_H 503# include <stdlib.h> 504# endif 505#endif 506],[struct stat64 st;], 507 AC_MSG_RESULT(yes) 508 AC_DEFINE(HAVE_STRUCT_STAT64,1,[Define to 1 if you have struct stat64.]), 509 AC_MSG_RESULT(no)) 510 511# if we can't find strcasecmp, look in -lresolv (for Unixware at least) 512# 513AC_CHECK_FUNCS(strcasecmp) 514if test x"$ac_cv_func_strcasecmp" = x"no"; then 515 AC_CHECK_LIB(resolv, strcasecmp) 516fi 517 518dnl At the moment we don't test for a broken memcmp(), because all we 519dnl need to do is test for equality, not comparison, and it seems that 520dnl every platform has a memcmp that can do at least that. 521dnl AC_FUNC_MEMCMP 522 523AC_FUNC_UTIME_NULL 524AC_FUNC_ALLOCA 525AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ 526 fchmod fstat ftruncate strchr readlink link utime utimes lutimes strftime \ 527 memmove lchown vsnprintf snprintf vasprintf asprintf setsid glob strpbrk \ 528 strlcat strlcpy strtol mallinfo getgroups setgroups geteuid getegid \ 529 setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ 530 strerror putenv iconv_open locale_charset nl_langinfo \ 531 sigaction sigprocmask) 532 533AC_CHECK_FUNCS(getpgrp tcgetpgrp) 534if test $ac_cv_func_getpgrp = yes; then 535 AC_FUNC_GETPGRP 536fi 537 538AC_CACHE_CHECK([whether chown() modifies symlinks],rsync_cv_chown_modifies_symlink,[ 539 AC_TRY_RUN([ 540#if HAVE_UNISTD_H 541# include <unistd.h> 542#endif 543#include <stdlib.h> 544#include <errno.h> 545 main() { 546 char const *dangling_symlink = "conftest.dangle"; 547 unlink(dangling_symlink); 548 if (symlink("conftest.no-such", dangling_symlink) < 0) abort(); 549 if (chown(dangling_symlink, getuid(), getgid()) < 0 && errno == ENOENT) exit(1); 550 exit(0); 551 }], 552 rsync_cv_chown_modifies_symlink=yes,rsync_cv_chown_modifies_symlink=no,rsync_cv_chown_modifies_symlink=no)]) 553if test $rsync_cv_chown_modifies_symlink = yes; then 554 AC_DEFINE(CHOWN_MODIFIES_SYMLINK, 1, [Define to 1 if chown modifies symlinks.]) 555fi 556 557AC_CACHE_CHECK([whether link() can hard-link symlinks],rsync_cv_can_hardlink_symlink,[ 558 AC_TRY_RUN([ 559#if HAVE_UNISTD_H 560# include <unistd.h> 561#endif 562#include <stdlib.h> 563#include <errno.h> 564#define FILENAME "conftest.dangle" 565 main() { 566 unlink(FILENAME); 567 if (symlink("conftest.no-such", FILENAME) < 0) abort(); 568 if (link(FILENAME, FILENAME "2") < 0) exit(1); 569 exit(0); 570 }], 571 rsync_cv_can_hardlink_symlink=yes,rsync_cv_can_hardlink_symlink=no,rsync_cv_can_hardlink_symlink=no)]) 572if test $rsync_cv_can_hardlink_symlink = yes; then 573 AC_DEFINE(CAN_HARDLINK_SYMLINK, 1, [Define to 1 if link() can hard-link symlinks.]) 574fi 575 576AC_CACHE_CHECK([whether link() can hard-link special files],rsync_cv_can_hardlink_special,[ 577 AC_TRY_RUN([ 578#if HAVE_UNISTD_H 579# include <unistd.h> 580#endif 581#include <stdlib.h> 582#include <errno.h> 583#define FILENAME "conftest.fifi" 584 main() { 585 unlink(FILENAME); 586 if (mkfifo(FILENAME, 0777) < 0) abort(); 587 if (link(FILENAME, FILENAME "2") < 0) exit(1); 588 exit(0); 589 }], 590 rsync_cv_can_hardlink_special=yes,rsync_cv_can_hardlink_special=no,rsync_cv_can_hardlink_special=no)]) 591if test $rsync_cv_can_hardlink_special = yes; then 592 AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.]) 593fi 594 595AC_CACHE_CHECK([for working socketpair],rsync_cv_HAVE_SOCKETPAIR,[ 596AC_TRY_RUN([ 597#include <sys/types.h> 598#include <sys/socket.h> 599 600main() { 601 int fd[2]; 602 exit((socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != -1) ? 0 : 1); 603}], 604rsync_cv_HAVE_SOCKETPAIR=yes,rsync_cv_HAVE_SOCKETPAIR=no,rsync_cv_HAVE_SOCKETPAIR=cross)]) 605if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then 606 AC_DEFINE(HAVE_SOCKETPAIR, 1, [Define to 1 if you have the "socketpair" function]) 607fi 608 609if test x"$with_included_popt" != x"yes"; then 610 AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes]) 611fi 612 613AC_MSG_CHECKING([whether to use included libpopt]) 614if test x"$with_included_popt" = x"yes"; then 615 AC_MSG_RESULT($srcdir/popt) 616 BUILD_POPT='$(popt_OBJS)' 617 CFLAGS="$CFLAGS -I$srcdir/popt" 618 if test x"$ALLOCA" != x 619 then 620 # this can be removed when/if we add an included alloca.c; 621 # see autoconf documentation on AC_FUNC_ALLOCA 622 AC_MSG_WARN([included libpopt will use malloc, not alloca (which wastes a small amount of memory)]) 623 fi 624else 625 AC_MSG_RESULT(no) 626fi 627 628AC_CACHE_CHECK([for unsigned char],rsync_cv_SIGNED_CHAR_OK,[ 629AC_TRY_COMPILE([],[signed char *s = ""], 630rsync_cv_SIGNED_CHAR_OK=yes,rsync_cv_SIGNED_CHAR_OK=no)]) 631if test x"$rsync_cv_SIGNED_CHAR_OK" = x"yes"; then 632 AC_DEFINE(SIGNED_CHAR_OK, 1, [Define to 1 if "signed char" is a valid type]) 633fi 634 635AC_CACHE_CHECK([for broken readdir],rsync_cv_HAVE_BROKEN_READDIR,[ 636AC_TRY_RUN([#include <sys/types.h> 637#include <dirent.h> 638main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); 639if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && 640di->d_name[0] == 0) exit(0); exit(1);} ], 641rsync_cv_HAVE_BROKEN_READDIR=yes,rsync_cv_HAVE_BROKEN_READDIR=no,rsync_cv_HAVE_BROKEN_READDIR=cross)]) 642if test x"$rsync_cv_HAVE_BROKEN_READDIR" = x"yes"; then 643 AC_DEFINE(HAVE_BROKEN_READDIR, 1, [Define to 1 if readdir() is broken]) 644fi 645 646AC_CACHE_CHECK([for utimbuf],rsync_cv_HAVE_UTIMBUF,[ 647AC_TRY_COMPILE([#include <sys/types.h> 648#include <utime.h>], 649[struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));], 650rsync_cv_HAVE_UTIMBUF=yes,rsync_cv_HAVE_UTIMBUF=no)]) 651if test x"$rsync_cv_HAVE_UTIMBUF" = x"yes"; then 652 AC_DEFINE(HAVE_UTIMBUF, 1, [Define to 1 if you have the "struct utimbuf" type]) 653fi 654 655AC_CACHE_CHECK([if gettimeofday takes tz argument],rsync_cv_HAVE_GETTIMEOFDAY_TZ,[ 656AC_TRY_COMPILE([#include <sys/time.h> 657#include <unistd.h>], 658[struct timeval tv; exit(gettimeofday(&tv, NULL));], 659rsync_cv_HAVE_GETTIMEOFDAY_TZ=yes,rsync_cv_HAVE_GETTIMEOFDAY_TZ=no)]) 660if test x"$rsync_cv_HAVE_GETTIMEOFDAY_TZ" != x"no"; then 661 AC_DEFINE(HAVE_GETTIMEOFDAY_TZ, 1, [Define to 1 if gettimeofday() takes a time-zone arg]) 662fi 663 664AC_CACHE_CHECK([for C99 vsnprintf],rsync_cv_HAVE_C99_VSNPRINTF,[ 665AC_TRY_RUN([ 666#include <sys/types.h> 667#include <stdarg.h> 668void foo(const char *format, ...) { 669 va_list ap; 670 int len; 671 char buf[5]; 672 673 va_start(ap, format); 674 len = vsnprintf(0, 0, format, ap); 675 va_end(ap); 676 if (len != 5) exit(1); 677 678 if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); 679 680 exit(0); 681} 682main() { foo("hello"); } 683], 684rsync_cv_HAVE_C99_VSNPRINTF=yes,rsync_cv_HAVE_C99_VSNPRINTF=no,rsync_cv_HAVE_C99_VSNPRINTF=cross)]) 685if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then 686 AC_DEFINE(HAVE_C99_VSNPRINTF, 1, [Define to 1 if vsprintf has a C99-compatible return value]) 687fi 688 689 690AC_CACHE_CHECK([for secure mkstemp],rsync_cv_HAVE_SECURE_MKSTEMP,[ 691AC_TRY_RUN([#include <stdlib.h> 692#include <sys/types.h> 693#include <sys/stat.h> 694#include <unistd.h> 695main() { 696 struct stat st; 697 char tpl[20]="/tmp/test.XXXXXX"; 698 int fd = mkstemp(tpl); 699 if (fd == -1) exit(1); 700 unlink(tpl); 701 if (fstat(fd, &st) != 0) exit(1); 702 if ((st.st_mode & 0777) != 0600) exit(1); 703 exit(0); 704}], 705rsync_cv_HAVE_SECURE_MKSTEMP=yes, 706rsync_cv_HAVE_SECURE_MKSTEMP=no, 707rsync_cv_HAVE_SECURE_MKSTEMP=cross)]) 708if test x"$rsync_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then 709 case $target_os in 710 hpux*) 711 dnl HP-UX has a broken mkstemp() implementation they refuse to fix, 712 dnl so we noisily skip using it. See HP change request JAGaf34426 713 dnl for details. (sbonds) 714 AC_MSG_WARN(Skipping broken HP-UX mkstemp() -- using mktemp() instead) 715 ;; 716 *) 717 AC_DEFINE(HAVE_SECURE_MKSTEMP, 1, [Define to 1 if mkstemp() is available and works right]) 718 ;; 719 esac 720fi 721 722 723AC_CACHE_CHECK([if mknod creates FIFOs],rsync_cv_MKNOD_CREATES_FIFOS,[ 724AC_TRY_RUN([ 725#include <stdio.h> 726#include <sys/stat.h> 727#include <errno.h> 728main() { int rc, ec; char *fn = "fifo-test"; 729unlink(fn); rc = mknod(fn,S_IFIFO,0600); ec = errno; unlink(fn); 730if (rc) {printf("(%d %d) ",rc,ec); return ec;} 731return 0;}], 732 rsync_cv_MKNOD_CREATES_FIFOS=yes,rsync_cv_MKNOD_CREATES_FIFOS=no,rsync_cv_MKNOD_CREATES_FIFOS=cross)]) 733if test x"$rsync_cv_MKNOD_CREATES_FIFOS" = x"yes"; then 734 AC_DEFINE(MKNOD_CREATES_FIFOS, 1, [Define to 1 if mknod() can create FIFOs.]) 735fi 736 737AC_CACHE_CHECK([if mknod creates sockets],rsync_cv_MKNOD_CREATES_SOCKETS,[ 738AC_TRY_RUN([ 739#include <stdio.h> 740#include <sys/stat.h> 741#include <errno.h> 742main() { int rc, ec; char *fn = "sock-test"; 743unlink(fn); rc = mknod(fn,S_IFSOCK,0600); ec = errno; unlink(fn); 744if (rc) {printf("(%d %d) ",rc,ec); return ec;} 745return 0;}], 746 rsync_cv_MKNOD_CREATES_SOCKETS=yes,rsync_cv_MKNOD_CREATES_SOCKETS=no,rsync_cv_MKNOD_CREATES_SOCKETS=cross)]) 747if test x"$rsync_cv_MKNOD_CREATES_SOCKETS" = x"yes"; then 748 AC_DEFINE(MKNOD_CREATES_SOCKETS, 1, [Define to 1 if mknod() can create sockets.]) 749fi 750 751# 752# The following test was mostly taken from the tcl/tk plus patches 753# 754AC_CACHE_CHECK([whether -c -o works],rsync_cv_DASHC_WORKS_WITH_DASHO,[ 755rm -rf conftest* 756cat > conftest.$ac_ext <<EOF 757int main() { return 0; } 758EOF 759${CC-cc} -c -o conftest..o conftest.$ac_ext 760if test -f conftest..o; then 761 rsync_cv_DASHC_WORKS_WITH_DASHO=yes 762else 763 rsync_cv_DASHC_WORKS_WITH_DASHO=no 764fi 765rm -rf conftest* 766]) 767if test x"$rsync_cv_DASHC_WORKS_WITH_DASHO" = x"yes"; then 768 OBJ_SAVE="#" 769 OBJ_RESTORE="#" 770 CC_SHOBJ_FLAG='-o $@' 771else 772 OBJ_SAVE=' @b=`basename $@ .o`;rm -f $$b.o.sav;if test -f $$b.o; then mv $$b.o $$b.o.sav;fi;' 773 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' 774 CC_SHOBJ_FLAG="" 775fi 776 777AC_SUBST(OBJ_SAVE) 778AC_SUBST(OBJ_RESTORE) 779AC_SUBST(CC_SHOBJ_FLAG) 780AC_SUBST(BUILD_POPT) 781 782AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig]) 783AC_OUTPUT 784 785AC_MSG_RESULT() 786AC_MSG_RESULT([ rsync ${RSYNC_VERSION} configuration successful]) 787AC_MSG_RESULT() 788