build: m4/ax_socklen_t.m4: cleanup

Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
Acked-by: David Sommerseth <davids@redhat.com>
Signed-off-by: David Sommerseth <davids@redhat.com>
This commit is contained in:
Alon Bar-Lev 2012-02-29 22:11:55 +02:00 committed by David Sommerseth
parent bdd80be1fe
commit 0dbd45db7d
2 changed files with 57 additions and 42 deletions

View File

@ -381,10 +381,10 @@ AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
TYPE_SOCKLEN_T
AC_HEADER_TIME
AX_CPP_VARARG_MACRO_ISO
AX_CPP_VARARG_MACRO_GCC
AX_TYPE_SOCKLEN_T
AX_EMPTY_ARRAY
dnl Check for more header files.

View File

@ -1,50 +1,65 @@
dnl -- The following is taken from curl's acinclude.m4 --
dnl -- The following is base of curl's acinclude.m4 --
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
dnl have to test to find something that will work.
AC_DEFUN([TYPE_SOCKLEN_T],
[
AC_CHECK_TYPE([socklen_t], ,[
AC_MSG_CHECKING([for socklen_t equivalent])
AC_CACHE_VAL([curl_cv_socklen_t_equiv],
[
case "$host" in
*-mingw*) curl_cv_socklen_t_equiv=int ;;
*)
# Systems have either "struct sockaddr *" or
# "void *" as the second argument to getpeername
curl_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 <sys/types.h>
#include <sys/socket.h>
int getpeername (int, $arg2 *, $t *);
],[
$t len;
getpeername(0,0,&len);
],[
curl_cv_socklen_t_equiv="$t"
break
])
done
done
;;
esac
if test "x$curl_cv_socklen_t_equiv" = x; then
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
fi
])
AC_MSG_RESULT($curl_cv_socklen_t_equiv)
AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv,
[type to use in place of socklen_t if not defined])],
[#include <sys/types.h>
AC_DEFUN([AX_TYPE_SOCKLEN_T], [
AC_CHECK_TYPE(
[socklen_t],
,
[
AS_VAR_PUSHDEF([VAR],[ax_cv_socklen_t_equiv])dnl
AC_CACHE_CHECK(
[for socklen_t equivalent],
[VAR],
[
#AS_CASE is not supported on <autoconf-2.60
case "${host}" in
*-mingw*) VAR=int ;;
*)
# Systems have either "struct sockaddr *" or
# "void *" as the second argument to getpeername
for arg2 in "struct sockaddr" void; do
for t in int size_t unsigned long "unsigned long"; do
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <sys/types.h>
#include <sys/socket.h>
int getpeername (int, $arg2 *, $t *);
]],
[[
$t len;
getpeername(0,0,&len);
]]
)],
[VAR="$t"; break]
)
done
test -n "$VAR" && break
done
;;
esac
]
AS_VAR_IF(
[VAR],
[],
[AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])],
[AC_DEFINE_UNQUOTED(
[socklen_t],
[$VAR],
[type to use in place of socklen_t if not defined]
)]
)
)
],
[[
#include <sys/types.h>
#ifdef WIN32
#include <ws2tcpip.h>
#else
#include <sys/socket.h>
#endif])
#endif
]]
)
])