summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-05-21 10:06:06 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-05-21 10:06:06 +0200
commit39ff896d75fa7de41c842f3ab73dab7dd17414e4 (patch)
tree70d7ad60be900909fd50537f78d6f18dd24d3641
parentb069815a7ac245c9c794c173de411f3d4d051531 (diff)
downloadcurl-bagder/configure-getsockpeer.tar.gz
configure: detect getsockname and getpeername on windows toobagder/configure-getsockpeer
Made detection macros for these two functions in the same style as other functions possibly in winsock in the hope this will work better to detect these functions when cross-compiling for Windows. Fixes #3913
-rwxr-xr-xconfigure.ac4
-rw-r--r--m4/curl-functions.m4195
2 files changed, 197 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 13e8e297b..3e45b5151 100755
--- a/configure.ac
+++ b/configure.ac
@@ -3719,6 +3719,8 @@ CURL_CHECK_FUNC_GETHOSTBYADDR_R
CURL_CHECK_FUNC_GETHOSTBYNAME
CURL_CHECK_FUNC_GETHOSTBYNAME_R
CURL_CHECK_FUNC_GETHOSTNAME
+CURL_CHECK_FUNC_GETPEERNAME
+CURL_CHECK_FUNC_GETSOCKNAME
CURL_CHECK_FUNC_GETIFADDRS
CURL_CHECK_FUNC_GETSERVBYPORT_R
CURL_CHECK_FUNC_GMTIME_R
@@ -3772,8 +3774,6 @@ AC_CHECK_FUNCS([fnmatch \
getpwuid_r \
getrlimit \
gettimeofday \
- getpeername \
- getsockname \
if_nametoindex \
mach_absolute_time \
pipe \
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index 8249108bb..b79e18198 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -2912,6 +2912,201 @@ AC_DEFUN([CURL_CHECK_FUNC_GETHOSTNAME], [
fi
])
+dnl CURL_CHECK_FUNC_GETPEERNAME
+dnl -------------------------------------------------
+dnl Verify if getpeername is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_getpeername, then
+dnl HAVE_GETPEERNAME will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETPEERNAME], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
+ #
+ tst_links_getpeername="unknown"
+ tst_proto_getpeername="unknown"
+ tst_compi_getpeername="unknown"
+ tst_allow_getpeername="unknown"
+ #
+ AC_MSG_CHECKING([if getpeername can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != getpeername(0, (void *)0, (void *)0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getpeername="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getpeername="no"
+ ])
+ #
+ if test "$tst_links_getpeername" = "yes"; then
+ AC_MSG_CHECKING([if getpeername is prototyped])
+ AC_EGREP_CPP([getpeername],[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getpeername="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getpeername="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getpeername" = "yes"; then
+ AC_MSG_CHECKING([if getpeername is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != getpeername(0, (void *)0, (void *)0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getpeername="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getpeername="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getpeername" = "yes"; then
+ AC_MSG_CHECKING([if getpeername usage allowed])
+ if test "x$curl_disallow_getpeername" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getpeername="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getpeername="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getpeername might be used])
+ if test "$tst_links_getpeername" = "yes" &&
+ test "$tst_proto_getpeername" = "yes" &&
+ test "$tst_compi_getpeername" = "yes" &&
+ test "$tst_allow_getpeername" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETPEERNAME, 1,
+ [Define to 1 if you have the getpeername function.])
+ curl_cv_func_getpeername="yes"
+ else
+ AC_MSG_RESULT([no])
+ curl_cv_func_getpeername="no"
+ fi
+])
+
+dnl CURL_CHECK_FUNC_GETSOCKNAME
+dnl -------------------------------------------------
+dnl Verify if getsockname is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_getsockname, then
+dnl HAVE_GETSOCKNAME will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_GETSOCKNAME], [
+ AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
+ AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
+ AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
+ AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
+ #
+ tst_links_getsockname="unknown"
+ tst_proto_getsockname="unknown"
+ tst_compi_getsockname="unknown"
+ tst_allow_getsockname="unknown"
+ #
+ AC_MSG_CHECKING([if getsockname can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != getsockname(0, (void *)0, (void *)0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getsockname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getsockname="no"
+ ])
+ #
+ if test "$tst_links_getsockname" = "yes"; then
+ AC_MSG_CHECKING([if getsockname is prototyped])
+ AC_EGREP_CPP([getsockname],[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getsockname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getsockname="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getsockname" = "yes"; then
+ AC_MSG_CHECKING([if getsockname is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_winsock2
+ $curl_includes_bsdsocket
+ $curl_includes_sys_socket
+ ]],[[
+ if(0 != getsockname(0, (void *)0, (void *)0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getsockname="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getsockname="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getsockname" = "yes"; then
+ AC_MSG_CHECKING([if getsockname usage allowed])
+ if test "x$curl_disallow_getsockname" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getsockname="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getsockname="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getsockname might be used])
+ if test "$tst_links_getsockname" = "yes" &&
+ test "$tst_proto_getsockname" = "yes" &&
+ test "$tst_compi_getsockname" = "yes" &&
+ test "$tst_allow_getsockname" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETSOCKNAME, 1,
+ [Define to 1 if you have the getsockname function.])
+ curl_cv_func_getsockname="yes"
+ else
+ AC_MSG_RESULT([no])
+ curl_cv_func_getsockname="no"
+ fi
+])
dnl CURL_CHECK_FUNC_GETIFADDRS
dnl -------------------------------------------------