aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2009-04-26 18:51:03 +0000
committerYang Tse <yangsita@gmail.com>2009-04-26 18:51:03 +0000
commit0daeab3b8d35a65aa4a0bdd23c9c3f762c02c236 (patch)
tree5d939a8f0e15524350429274797e05b63980b553
parentbd2740131105d2b234fa542c3c325a0b77f754bc (diff)
Initial step towards a configure time curl_socklen_t definition
-rw-r--r--acinclude.m4104
-rw-r--r--ares/m4/cares-functions.m421
-rw-r--r--configure.ac2
-rw-r--r--include/curl/curlbuild.h.in25
-rw-r--r--m4/curl-functions.m439
5 files changed, 186 insertions, 5 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index 4ed4f01be..7fd690980 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -3053,6 +3053,110 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
])
+dnl CURL_CONFIGURE_CURL_SOCKLEN_T
+dnl -------------------------------------------------
+dnl Find out suitable curl_socklen_t data type definition and size, making
+dnl appropriate definitions for template file include/curl/curlbuild.h.in
+dnl to properly configure and use the library.
+dnl
+dnl The need for the curl_socklen_t definition arises mainly to properly
+dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t
+dnl data type which is 32 or 64-Bit wide depending on the data model being
+dnl used, and that on the other hand is only actually used when interfacing
+dnl the X/Open sockets provided in the xnet library.
+
+AC_DEFUN([CURL_CONFIGURE_CURL_SOCKLEN_T], [
+ AC_REQUIRE([CURL_INCLUDES_WS2TCPIP])dnl
+ AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
+ AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ #
+ AC_MSG_CHECKING([for curl_socklen_t data type])
+ curl_typeof_curl_socklen_t="unknown"
+ for arg1 in int SOCKET; do
+ for arg2 in 'struct sockaddr' void; do
+ for t in socklen_t int size_t 'unsigned int' long 'unsigned long'; do
+ if test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_ws2tcpip
+ $curl_includes_sys_socket
+ $curl_preprocess_callconv
+ extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *);
+ ]],[[
+ $t len = 0;
+ getpeername(0, 0, &len);
+ ]])
+ ],[
+ curl_typeof_curl_socklen_t="$t"
+ ])
+ fi
+ done
+ done
+ done
+ AC_MSG_RESULT([$curl_typeof_curl_socklen_t])
+ if test "$curl_typeof_curl_socklen_t" = "unknown"; then
+ AC_MSG_ERROR([cannot find data type for curl_socklen_t.])
+ fi
+ #
+ AC_MSG_CHECKING([size of curl_socklen_t])
+ curl_sizeof_curl_socklen_t="unknown"
+ curl_pull_headers_socklen_t="unknown"
+ for tst_pull_headers in 'none' 'ws2tcpip' 'systypes' 'syssocket'; do
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ case $tst_pull_headers in
+ none)
+ tmp_includes=""
+ ;;
+ ws2tcpip)
+ tmp_includes="$curl_includes_ws2tcpip"
+ ;;
+ systypes)
+ tmp_includes="$curl_includes_sys_types"
+ ;;
+ syssocket)
+ tmp_includes="$curl_includes_sys_socket"
+ ;;
+ esac
+ for tst_size in 8 4 2; do
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $tmp_includes
+ typedef $curl_typeof_curl_socklen_t curl_socklen_t;
+ typedef char dummy_arr[sizeof(curl_socklen_t) == $tst_size ? 1 : -1];
+ ]],[[
+ curl_socklen_t dummy;
+ ]])
+ ],[
+ curl_sizeof_curl_socklen_t="$tst_size"
+ curl_pull_headers_socklen_t="$tst_pull_headers"
+ ])
+ fi
+ done
+ fi
+ done
+ AC_MSG_RESULT([$curl_sizeof_curl_socklen_t])
+ if test "$curl_sizeof_curl_socklen_t" = "unknown"; then
+ AC_MSG_ERROR([cannot find out size of curl_socklen_t.])
+ fi
+ #
+ case $curl_pull_headers_socklen_t in
+ ws2tcpip)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_WS2TCPIP_H])
+ ;;
+ systypes)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
+ ;;
+ syssocket)
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_TYPES_H])
+ CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_SOCKET_H])
+ ;;
+ esac
+ CURL_DEFINE_UNQUOTED([CURL_TYPEOF_CURL_SOCKLEN_T], [$curl_typeof_curl_socklen_t])
+ CURL_DEFINE_UNQUOTED([CURL_SIZEOF_CURL_SOCKLEN_T], [$curl_sizeof_curl_socklen_t])
+])
+
+
dnl CURL_CHECK_WIN32_LARGEFILE
dnl -------------------------------------------------
dnl Check if curl's WIN32 large file will be used
diff --git a/ares/m4/cares-functions.m4 b/ares/m4/cares-functions.m4
index b625e0378..13a83ba48 100644
--- a/ares/m4/cares-functions.m4
+++ b/ares/m4/cares-functions.m4
@@ -1,7 +1,7 @@
#***************************************************************************
# $Id$
#
-# Copyright (C) 2008 by Daniel Stenberg et al
+# Copyright (C) 2008 - 2009 by Daniel Stenberg et al
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
@@ -16,7 +16,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
-# serial 26
+# serial 28
dnl CARES_INCLUDES_ARPA_INET
@@ -284,6 +284,23 @@ cares_includes_ws2tcpip="\
])
+dnl CARES_PREPROCESS_CALLCONV
+dnl -------------------------------------------------
+dnl Set up variable with a preprocessor block which
+dnl defines function calling convention.
+
+AC_DEFUN([CARES_PREPROCESS_CALLCONV], [
+cares_preprocess_callconv="\
+/* preprocess start */
+#ifdef HAVE_WINDOWS_H
+# define FUNCALLCONV __stdcall
+#else
+# define FUNCALLCONV
+#endif
+/* preprocess end */"
+])
+
+
dnl CARES_CHECK_FUNC_FCNTL
dnl -------------------------------------------------
dnl Verify if fcntl is available, prototyped, and
diff --git a/configure.ac b/configure.ac
index 14562efb7..528152433 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2000,6 +2000,8 @@ AC_CHECK_TYPE([bool],[
# Check for socklen_t or equivalent
CURL_CHECK_TYPE_SOCKLEN_T
+CURL_CONFIGURE_CURL_SOCKLEN_T
+
TYPE_IN_ADDR_T
TYPE_SOCKADDR_STORAGE
diff --git a/include/curl/curlbuild.h.in b/include/curl/curlbuild.h.in
index e1c0dc3d4..8d73b7783 100644
--- a/include/curl/curlbuild.h.in
+++ b/include/curl/curlbuild.h.in
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -63,6 +63,16 @@
Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
#endif
+#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
+# error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
+ Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
+#endif
+
+#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
+# error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
+ Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
+#endif
+
#ifdef CURL_TYPEOF_CURL_OFF_T
# error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
@@ -123,9 +133,22 @@
# include <inttypes.h>
#endif
+/* Configure process defines this to 1 when it finds out that system */
+/* header file sys/socket.h must be included by the external interface. */
+#undef CURL_PULL_SYS_SOCKET_H
+#ifdef CURL_PULL_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
/* The size of `long', as computed by sizeof. */
#undef CURL_SIZEOF_LONG
+/* Integral data type used for curl_socklen_t. */
+#undef CURL_TYPEOF_CURL_SOCKLEN_T
+
+/* The size of `curl_socklen_t', as computed by sizeof. */
+#undef CURL_SIZEOF_CURL_SOCKLEN_T
+
/* Signed integral data type used for curl_off_t. */
#undef CURL_TYPEOF_CURL_OFF_T
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index b0489b8a4..a9a16a981 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
-# serial 45
+# serial 46
dnl CURL_INCLUDES_ARPA_INET
@@ -307,6 +307,24 @@ curl_includes_sys_socket="\
])
+dnl CURL_INCLUDES_SYS_TYPES
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when sys/types.h is to be included.
+
+AC_DEFUN([CURL_INCLUDES_SYS_TYPES], [
+curl_includes_sys_types="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/types.h,
+ [], [], [$curl_includes_sys_types])
+])
+
+
dnl CURL_INCLUDES_SYS_UIO
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@@ -433,6 +451,23 @@ curl_includes_ws2tcpip="\
])
+dnl CURL_PREPROCESS_CALLCONV
+dnl -------------------------------------------------
+dnl Set up variable with a preprocessor block which
+dnl defines function calling convention.
+
+AC_DEFUN([CURL_PREPROCESS_CALLCONV], [
+curl_preprocess_callconv="\
+/* preprocess start */
+#ifdef HAVE_WINDOWS_H
+# define FUNCALLCONV __stdcall
+#else
+# define FUNCALLCONV
+#endif
+/* preprocess end */"
+])
+
+
dnl CURL_CHECK_FUNC_ALARM
dnl -------------------------------------------------
dnl Verify if alarm is available, prototyped, and