From aab2f95439c28e2aa9358dbfe1ce7a15c774a766 Mon Sep 17 00:00:00 2001 From: Alon Bar-Lev Date: Fri, 4 Mar 2011 23:14:33 +0200 Subject: Windows cross-compile cleanup It should be sufficient to just try to see if socklen_t is defined. Next, on all platforms it would be int in all other platforms. And, there is no need to check for the type in monolitic environment like Windows, as it will be always the same. Currently it fails cross compile windows in mingw-w64 compiler, as winsock.h is as follows: """ /* define WINSOCK_API_LINKAGE and WSAAPI for less * diff output between winsock.h and winsock2.h, but * remember to undefine them at the end of file */ """ And the macro uses these macros which are internal winsock macros and should not be used anyway. Also, when did the autodefs.h went mandatory? Why is it in tap-win32/common.h while no constant is actually used? The use of WSA_IO_INCOMPLETE without including winsock2.h is invalid! Look at http://msdn.microsoft.com/en-us/library/aa921087.aspx Signed-off-by: Alon Bar-Lev Acked-by: James Yonan Signed-off-by: David Sommerseth --- acinclude.m4 | 48 ++++++++++++++++++++++-------------------------- configure.ac | 1 + syshead.h | 1 + tap-win32/common.h | 2 ++ 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index f037484..185907f 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -90,34 +90,30 @@ AC_DEFUN([TYPE_SOCKLEN_T], AC_MSG_CHECKING([for socklen_t equivalent]) AC_CACHE_VAL([curl_cv_socklen_t_equiv], [ - # 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([ - #ifdef _WIN32 - #include - #define PREFIX1 WINSOCK_API_LINKAGE - #define PREFIX2 PASCAL - #else - #include - #include - #define PREFIX1 - #define PREFIX2 - #define SOCKET int - #endif + 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 + #include - PREFIX1 int PREFIX2 getpeername (SOCKET, $arg2 *, $t *); - ],[ - $t len; - getpeername(0,0,&len); - ],[ - curl_cv_socklen_t_equiv="$t" - break - ]) + int getpeername (int, $arg2 *, $t *); + ],[ + $t len; + getpeername(0,0,&len); + ],[ + curl_cv_socklen_t_equiv="$t" + break + ]) + done 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]) diff --git a/configure.ac b/configure.ac index e30f990..e0847bc 100644 --- a/configure.ac +++ b/configure.ac @@ -320,6 +320,7 @@ case "$host" in ;; *-mingw*) AC_DEFINE(TARGET_WIN32, 1, [Are we running WIN32?]) + CPPFLAGS="${CPPFLAGS} -DWIN32_LEAN_AND_MEAN" OPENVPN_ADD_LIBS(-lgdi32) OPENVPN_ADD_LIBS(-lws2_32) OPENVPN_ADD_LIBS(-lwininet) diff --git a/syshead.h b/syshead.h index cef7dbf..63b82ba 100644 --- a/syshead.h +++ b/syshead.h @@ -47,6 +47,7 @@ #ifdef WIN32 #include +#include #define sleep(x) Sleep((x)*1000) #define random rand #define srandom srand diff --git a/tap-win32/common.h b/tap-win32/common.h index 6785a33..bb8ab90 100755 --- a/tap-win32/common.h +++ b/tap-win32/common.h @@ -28,7 +28,9 @@ // common to both. //=============================================== +#ifndef HAVE_CONFIG_H #include "autodefs.h" +#endif //============= // TAP IOCTLs -- cgit