From 391f0bacd2cc5e8051057e63c7af536469dd84db Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Sat, 6 Aug 2011 14:43:50 +1200 Subject: [PATCH] Portability: fix windows socket lirary detection --- acinclude/os-deps.m4 | 45 ++++++++++++++++++++++++++++++++++++++--- acinclude/squid-util.m4 | 28 +++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/acinclude/os-deps.m4 b/acinclude/os-deps.m4 index dfe1433462..3c8ace52d9 100644 --- a/acinclude/os-deps.m4 +++ b/acinclude/os-deps.m4 @@ -794,10 +794,21 @@ fi dnl checks the winsock library to use (ws2_32 or wsock32) dnl may set ac_cv_func_select as a side effect AC_DEFUN([SQUID_CHECK_WINSOCK_LIB],[ + AC_CHECK_HEADERS(winsock2.h winsock.h) SQUID_STATE_SAVE(winsock) - AC_SEARCH_LIBS([closesocket],[ws2_32 wsock32]) + SQUID_SEARCH_LIBS([squid_getprotobynumber],[ws2_32 wsock32],,,,[ +#if HAVE_WINSOCK2_H +#include +#elif HAVE_WINSOCK_H +#include +#endif +/* ugly hack. */ +void squid_getprotobynumber(void) { + getprotobynumber(1); +} + ]) AC_MSG_CHECKING([for winsock library]) - case "$ac_cv_search_closesocket" in + case "$ac_cv_search_squid_getprotobynumber" in "no") AC_MSG_RESULT([winsock library not found]) ;; @@ -806,14 +817,15 @@ AC_DEFUN([SQUID_CHECK_WINSOCK_LIB],[ ;; "-lws2_32") AC_MSG_RESULT([winsock2]) + XTRA_LIBS="-lws2_32 $XTRA_LIBS" ac_cv_func_select='yes' ;; "-lwsock32") AC_MSG_RESULT([winsock]) + XTRA_LIBS="-lwsock32 $XTRA_LIBS" ac_cv_func_select='yes' ;; esac - AC_CHECK_HEADERS(winsock2.h winsock.h) SQUID_STATE_ROLLBACK(winsock) ]) @@ -861,3 +873,30 @@ AC_DEFUN([SQUID_CHECK_FUNCTIONAL_CPU_PROFILER],[ squid_cv_cpu_profiler_works=no]) ) ]) + +dnl check whether recv takes a char* or void* as a second argument +AC_DEFUN([SQUID_CHECK_RECV_ARG_TYPE],[ + AC_CACHE_CHECK([whether recv takes a pointer to void or char as second argument], + squid_cv_recv_second_arg_type, [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#if HAVE_SYS_SOCKET_H +#include +#endif +#if HAVE_WINSOCK2_H +#include +#endif +#if HAVE_WINSOCK_H +#include +#endif +int main (int argc, char ** argv) { + void *buf; + recv(0,buf,0,0); +} +]])],[squid_cv_recv_second_arg_type=void], + [squid_cv_recv_second_arg_type=char]) + AC_MSG_RESULT($squid_cv_recv_second_arg_type*) + ]) + AC_DEFINE_UNQUOTED(RECV_ARG_TYPE,$squid_cv_recv_second_arg_type, + [Base type of the second argument to recv(2)]) +]) diff --git a/acinclude/squid-util.m4 b/acinclude/squid-util.m4 index 7e64175961..5e8055a7af 100644 --- a/acinclude/squid-util.m4 +++ b/acinclude/squid-util.m4 @@ -221,3 +221,31 @@ AC_DEFUN([SQUID_EMBED_BUILD_INFO],[ [Squid extended build info field for "squid -v" output]) fi ]) + +dnl like AC_SEARCH_LIBS, with an extra argument which is +dnl a prefix to the test program +AC_DEFUN([SQUID_SEARCH_LIBS], +[AS_VAR_PUSHDEF([ac_Search], [ac_cv_search_$1])dnl +AC_CACHE_CHECK([for library containing $1], [ac_Search], +[ac_func_search_save_LIBS=$LIBS +AC_LANG_CONFTEST([AC_LANG_PROGRAM([$6], [$1()])]) +for ac_lib in '' $2; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $5 $ac_func_search_save_LIBS" + fi + AC_LINK_IFELSE([], [AS_VAR_SET([ac_Search], [$ac_res])]) + AS_VAR_SET_IF([ac_Search], [break]) +done +AS_VAR_SET_IF([ac_Search], , [AS_VAR_SET([ac_Search], [no])]) +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS]) +ac_res=AS_VAR_GET([ac_Search]) +AS_IF([test "$ac_res" != no], + [test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + $3], + [$4]) +AS_VAR_POPDEF([ac_Search])dnl +]) -- 2.39.5