]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Portability: fix windows socket lirary detection
authorFrancesco Chemolli <kinkie@squid-cache.org>
Sat, 6 Aug 2011 02:43:50 +0000 (14:43 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 6 Aug 2011 02:43:50 +0000 (14:43 +1200)
acinclude/os-deps.m4
acinclude/squid-util.m4

index dfe1433462dc3837f2568c75ceec99738521a987..3c8ace52d973112ce3f7a11d63597cfda4b23087 100644 (file)
@@ -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 <winsock2.h>
+#elif HAVE_WINSOCK_H
+#include <winsock.h>
+#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 <sys/types.h>
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#if HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#if HAVE_WINSOCK_H
+#include <winsock.h>
+#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)])
+])
index 7e64175961616252bf4ad1abd6ac2fa2a3d53758..5e8055a7afc4d99bed7ca8f2e7bd2eae227d45c2 100644 (file)
@@ -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
+])