From 7ca6e8564990a7e8d5b4ea623ce22bdaaae0bc1b Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Tue, 14 Aug 2001 02:18:04 +0000 Subject: [PATCH] Commit getconf/socklen_t/largefile patch suggested by Albert Chin. This is tested on Solaris 2.5.2, 2.6, 7, 8/SPARC, HP-UX 10.20, 11.00, Tru64 UNIX 4.0D, 5.0A, IRIX 6.2, 6.5, AIX 4.3.2 and it works ok. This patch *requires* autoconf 2.52. --- aclocal.m4 | 146 ++++++++++----------------------------------------- configure.in | 12 +---- 2 files changed, 31 insertions(+), 127 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index a1256ae8..7f252eee 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -22,81 +22,6 @@ AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [ ac_cv_target_system_type="$target" ]) -#serial 12 - -dnl By default, many hosts won't let programs access large files; -dnl one must use special compiler options to get large-file access to work. -dnl For more details about this brain damage please see: -dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html - -dnl Written by Paul Eggert . - -dnl Internal subroutine of AC_SYS_LARGEFILE. -dnl AC_SYS_LARGEFILE_TEST_INCLUDES -AC_DEFUN(AC_SYS_LARGEFILE_TEST_INCLUDES, - [[#include - int a[(off_t) 9223372036854775807 == 9223372036854775807 ? 1 : -1]; - ]]) - -dnl Internal subroutine of AC_SYS_LARGEFILE. -dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLUDES, FUNCTION-BODY) -AC_DEFUN([AC_SYS_LARGEFILE_MACRO_VALUE], - [AC_CACHE_CHECK([for $1 value needed for large files], $3, - [$3=no - AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES -$5 - , - [$6], - , - [AC_TRY_COMPILE([#define $1 $2] -AC_SYS_LARGEFILE_TEST_INCLUDES -$5 - , - [$6], - [$3=$2])])]) - if test "[$]$3" != no; then - AC_DEFINE_UNQUOTED([$1], [$]$3, [$4]) - fi]) - -AC_DEFUN([AC_SYS_LARGEFILE], - [AC_ARG_ENABLE(largefile, - [ --disable-largefile omit support for large files]) - if test "$enable_largefile" != no; then - - AC_CACHE_CHECK([for special C compiler options needed for large files], - ac_cv_sys_largefile_CC, - [ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , , - [ac_save_CC="$CC" - CC="$CC -n32" - AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , - ac_cv_sys_largefile_CC=' -n32') - CC="$ac_save_CC"]) - fi]) - if test "$ac_cv_sys_largefile_CC" != no; then - CC="$CC$ac_cv_sys_largefile_CC" - fi - - AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, - ac_cv_sys_file_offset_bits, - [Number of bits in a file offset, on hosts where this is settable.]) - AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1, - ac_cv_sys_largefile_source, - [Define to make ftello visible on some hosts (e.g. HP-UX 10.20).], - [#include ], [return !ftello;]) - AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, - ac_cv_sys_large_files, - [Define for large files, on AIX-style hosts.]) - AC_SYS_LARGEFILE_MACRO_VALUE(_XOPEN_SOURCE, 500, - ac_cv_sys_xopen_source, - [Define to make ftello visible on some hosts (e.g. glibc 2.1.3).], - [#include ], [return !ftello;]) - fi - ]) - dnl Check for socklen_t: historically on BSD it is an int, and in dnl POSIX 1g it is a type of its own, but some platforms use different dnl types for the argument to getsockopt, getpeername, etc. So we @@ -108,50 +33,37 @@ dnl the moment. AC_DEFUN([TYPE_SOCKLEN_T], [ - AC_MSG_CHECKING([for socklen_t]) - AC_CACHE_VAL([lftp_cv_socklen_t], - [ - lftp_cv_socklen_t=no - AC_TRY_COMPILE([ - #include - #include - ], - [ - socklen_t len; - getpeername(0,0,&len); - ], - [ - lftp_cv_socklen_t=yes - ]) - ]) - AC_MSG_RESULT($lftp_cv_socklen_t) - if test $lftp_cv_socklen_t = no; then + AC_CHECK_TYPE([socklen_t], ,[ AC_MSG_CHECKING([for socklen_t equivalent]) - AC_CACHE_VAL([lftp_cv_socklen_t_equiv], + AC_CACHE_VAL([rsync_cv_socklen_t_equiv], [ - lftp_cv_socklen_t_equiv=int - AC_LANG_SAVE - for t in int size_t unsigned long "unsigned long"; do - AC_TRY_COMPILE([ - #include - #include - ], - [ - $t len; - getpeername(0,0,&len); - ], - [ - lftp_cv_socklen_t_equiv="$t" - break - ], - [ - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - ]) + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + rsync_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ + #include + #include + + int getpeername (int, $arg2 *, $t *); + ],[ + $t len; + getpeername(0,0,&len); + ],[ + rsync_cv_socklen_t_equiv="$t" + break + ]) + done done + + if test "x$rsync_cv_socklen_t_equiv" = x; then + AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) + fi ]) - AC_MSG_RESULT($lftp_cv_socklen_t_equiv) - AC_DEFINE_UNQUOTED(socklen_t, $lftp_cv_socklen_t_equiv, - [type to use in place of socklen_t if not defined]) - fi + AC_MSG_RESULT($rsync_cv_socklen_t_equiv) + AC_DEFINE_UNQUOTED(socklen_t, $rsync_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined])], + [#include +#include ]) ]) - diff --git a/configure.in b/configure.in index e08249da..5652296a 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(byteorder.h) AC_CONFIG_HEADER(config.h) -AC_PREREQ(2.12) +AC_PREREQ(2.52) LDFLAGS=${LDFLAGS-""} @@ -28,13 +28,6 @@ fi CFLAGS="$CFLAGS -DHAVE_CONFIG_H" -# look for getconf early as this affects just about everything -AC_CHECK_PROG(HAVE_GETCONF, getconf, "yes", "no") -if test $HAVE_GETCONF = "yes"; then - CFLAGS=$CFLAGS" "`getconf LFS_CFLAGS 2> /dev/null` - LDFLAGS=$LDFLAGS" "`getconf LFS_LDFLAGS 2> /dev/null` -fi - AC_ARG_WITH(included-popt, [ --with-included-popt use bundled popt library, not from system]) @@ -77,8 +70,7 @@ AC_TYPE_PID_T AC_TYPE_GETGROUPS AC_STRUCT_ST_RDEV AC_CHECK_TYPE([ino_t], [unsigned]) -dnl TYPE_SOCKLEN_T -AC_CHECK_TYPE([socklen_t], [size_t]) +TYPE_SOCKLEN_T AC_CACHE_CHECK([for errno in errno.h],rsync_cv_errno, [ AC_TRY_COMPILE([#include ],[int i = errno], -- 2.34.1