From bc2f0c7dcbd22ab52971df4a419933e70f263a3f Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 5 Jul 2006 23:10:37 +0000 Subject: Prevent definition of HAVE_WINxxx_H symbols and avoid inclusion of Windows headers when compiled with Cygwin in POSIX emulation mode. --- acinclude.m4 | 100 ++++++++++++++++++++++++++++++++++++++++++++++- ares/acinclude.m4 | 99 +++++++++++++++++++++++++++++++++++++++++++++- ares/ares.h | 2 +- ares/nameser.h | 2 + ares/setup.h | 6 ++- docs/examples/synctime.c | 2 + include/curl/multi.h | 4 +- lib/setup.h | 2 +- src/setup.h | 2 +- 9 files changed, 208 insertions(+), 11 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index adfce1a91..e13d7cfe4 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -21,6 +21,26 @@ # $Id$ ########################################################################### + +dnl CURL_CHECK_HEADERS_ONCE +dnl ------------------------------------------------- +dnl Check for headers if check not already done. + +AC_DEFUN(CURL_CHECK_HEADERS_ONCE, [ + for i in $1; do + eval prev_check_res=\$ac_cv_header_$i + case "$prev_check_res" in + yes | no) + ;; + *) + AC_CHECK_HEADERS($i) + ;; + esac + + done +]) + + dnl CURL_CHECK_HEADER_WINDOWS dnl ------------------------------------------------- dnl Check for compilable and valid windows.h header @@ -35,7 +55,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ #endif #include ],[ +#ifdef __CYGWIN__ + HAVE_WINDOWS_H shall not be defined. +#else int dummy=2*WINVER; +#endif ]) ],[ ac_cv_header_windows_h="yes" @@ -68,7 +92,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WINSOCK_H shall not be defined. +#else int dummy=WSACleanup(); +#endif ]) ],[ ac_cv_header_winsock_h="yes" @@ -99,7 +127,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WINSOCK2_H shall not be defined. +#else int dummy=2*IPPROTO_ESP; +#endif ]) ],[ ac_cv_header_winsock2_h="yes" @@ -131,7 +163,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WS2TCPIP_H shall not be defined. +#else int dummy=2*IP_PKTINFO; +#endif ]) ],[ ac_cv_header_ws2tcpip_h="yes" @@ -566,16 +602,32 @@ dnl and RECV_TYPE_ARG4, defining the type of the function dnl return value in RECV_TYPE_RETV. AC_DEFUN([CURL_CHECK_FUNC_RECV], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl AC_CHECK_HEADERS(sys/types.h sys/socket.h) # AC_MSG_CHECKING([for recv]) AC_TRY_LINK([ -#undef inline +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif ],[ recv(0, 0, 0, 0); @@ -599,11 +651,25 @@ AC_DEFUN([CURL_CHECK_FUNC_RECV], [ AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([ #undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif extern $recv_retv recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); ],[ @@ -663,16 +729,32 @@ dnl return value in SEND_TYPE_RETV, and also defining the dnl type qualifier of second argument in SEND_QUAL_ARG2. AC_DEFUN([CURL_CHECK_FUNC_SEND], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl AC_CHECK_HEADERS(sys/types.h sys/socket.h) # AC_MSG_CHECKING([for send]) AC_TRY_LINK([ -#undef inline +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif ],[ send(0, 0, 0, 0); @@ -696,11 +778,25 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [ AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([ #undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif extern $send_retv send($send_arg1, $send_arg2, $send_arg3, $send_arg4); ],[ diff --git a/ares/acinclude.m4 b/ares/acinclude.m4 index b86e2a8a5..bf3cf04a4 100644 --- a/ares/acinclude.m4 +++ b/ares/acinclude.m4 @@ -1,5 +1,24 @@ +dnl CURL_CHECK_HEADERS_ONCE +dnl ------------------------------------------------- +dnl Check for headers if check not already done. + +AC_DEFUN(CURL_CHECK_HEADERS_ONCE, [ + for i in $1; do + eval prev_check_res=\$ac_cv_header_$i + case "$prev_check_res" in + yes | no) + ;; + *) + AC_CHECK_HEADERS($i) + ;; + esac + + done +]) + + dnl CURL_CHECK_HEADER_WINDOWS dnl ------------------------------------------------- dnl Check for compilable and valid windows.h header @@ -14,7 +33,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ #endif #include ],[ +#ifdef __CYGWIN__ + HAVE_WINDOWS_H shall not be defined. +#else int dummy=2*WINVER; +#endif ]) ],[ ac_cv_header_windows_h="yes" @@ -47,7 +70,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WINSOCK_H shall not be defined. +#else int dummy=WSACleanup(); +#endif ]) ],[ ac_cv_header_winsock_h="yes" @@ -78,7 +105,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WINSOCK2_H shall not be defined. +#else int dummy=2*IPPROTO_ESP; +#endif ]) ],[ ac_cv_header_winsock2_h="yes" @@ -110,7 +141,11 @@ AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ #include #include ],[ +#ifdef __CYGWIN__ + HAVE_WS2TCPIP_H shall not be defined. +#else int dummy=2*IP_PKTINFO; +#endif ]) ],[ ac_cv_header_ws2tcpip_h="yes" @@ -545,16 +580,32 @@ dnl and RECV_TYPE_ARG4, defining the type of the function dnl return value in RECV_TYPE_RETV. AC_DEFUN([CURL_CHECK_FUNC_RECV], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl AC_CHECK_HEADERS(sys/types.h sys/socket.h) # AC_MSG_CHECKING([for recv]) AC_TRY_LINK([ -#undef inline +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif ],[ recv(0, 0, 0, 0); @@ -578,11 +629,25 @@ AC_DEFUN([CURL_CHECK_FUNC_RECV], [ AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([ #undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif extern $recv_retv recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); ],[ @@ -642,16 +707,32 @@ dnl return value in SEND_TYPE_RETV, and also defining the dnl type qualifier of second argument in SEND_QUAL_ARG2. AC_DEFUN([CURL_CHECK_FUNC_SEND], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl AC_CHECK_HEADERS(sys/types.h sys/socket.h) # AC_MSG_CHECKING([for send]) AC_TRY_LINK([ -#undef inline +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif ],[ send(0, 0, 0, 0); @@ -675,11 +756,25 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [ AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([ #undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include +#endif #endif extern $send_retv send($send_arg1, $send_arg2, $send_arg3, $send_arg4); ],[ diff --git a/ares/ares.h b/ares/ares.h index 9414f9b78..f4d98c87d 100644 --- a/ares/ares.h +++ b/ares/ares.h @@ -31,7 +31,7 @@ #include #include #include -#elif defined(WIN32) +#elif defined(WIN32) && !defined(__CYGWIN__) #include #include #else diff --git a/ares/nameser.h b/ares/nameser.h index 7127c2640..1faeb6ff8 100644 --- a/ares/nameser.h +++ b/ares/nameser.h @@ -7,7 +7,9 @@ port build */ #ifndef NETWARE +#ifndef __CYGWIN__ #include +#endif #include /* for the _getpid() proto */ #endif /* !NETWARE */ #include diff --git a/ares/setup.h b/ares/setup.h index 44261411b..c6ec2618e 100644 --- a/ares/setup.h +++ b/ares/setup.h @@ -43,10 +43,12 @@ * Include header files for windows builds before redefining anything. * Use this preproessor block only to include or exclude windows.h, * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs - * to any other further and independant block. + * to any other further and independant block. Under Cygwin things work + * just as under linux (e.g. ) and the winsock headers should + * never be included when __CYGWIN__ is defined. */ -#ifdef HAVE_WINDOWS_H +#if defined(HAVE_WINDOWS_H) && !defined(__CYGWIN__) # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # endif diff --git a/docs/examples/synctime.c b/docs/examples/synctime.c index 9f3bba0e9..fc629ee33 100644 --- a/docs/examples/synctime.c +++ b/docs/examples/synctime.c @@ -59,7 +59,9 @@ #include #include +#ifndef __CYGWIN__ #include +#endif #include diff --git a/include/curl/multi.h b/include/curl/multi.h index 6ce682690..4fc70640a 100644 --- a/include/curl/multi.h +++ b/include/curl/multi.h @@ -43,8 +43,8 @@ #define WIN32 1 #endif -#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) || \ - defined(__MINGW32__) +#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \ + !defined(__CYGWIN__) || defined(__MINGW32__) #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H)) /* The check above prevents the winsock2 inclusion if winsock.h already was included, since they can't co-exist without problems */ diff --git a/lib/setup.h b/lib/setup.h index cef40288e..57ac87d5b 100644 --- a/lib/setup.h +++ b/lib/setup.h @@ -81,7 +81,7 @@ * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs * to any other further and independant block. Under Cygwin things work * just as under linux (e.g. ) and the winsock headers should - * never be included. + * never be included when __CYGWIN__ is defined. */ #if defined(HAVE_WINDOWS_H) && !defined(__CYGWIN__) diff --git a/src/setup.h b/src/setup.h index f07b3a7b7..d3814fef4 100644 --- a/src/setup.h +++ b/src/setup.h @@ -83,7 +83,7 @@ * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs * to any other further and independant block. Under Cygwin things work * just as under linux (e.g. ) and the winsock headers should - * never be included. + * never be included when __CYGWIN__ is defined. */ #if defined(HAVE_WINDOWS_H) && !defined(__CYGWIN__) -- cgit v1.2.3