changeset 5360:3d2d3e1cf427

Win32: MinGW GCC compatibility. Several warnings silenced, notably (ngx_socket_t) -1 is now checked on socket operations instead of -1, as ngx_socket_t is unsigned on win32 and gcc complains on comparison. With this patch, it's now possible to compile nginx using mingw gcc, with options we normally compile on win32.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 04 Sep 2013 20:48:28 +0400
parents 2fda9065d0f4
children 7094d6da2806
files auto/lib/openssl/conf auto/lib/pcre/conf auto/lib/pcre/make auto/lib/zlib/make auto/os/win32 src/core/ngx_connection.c src/core/ngx_cycle.c src/core/ngx_resolver.c src/event/modules/ngx_iocp_module.c src/event/modules/ngx_win32_select_module.c src/event/ngx_event_accept.c src/event/ngx_event_acceptex.c src/event/ngx_event_connect.c src/event/ngx_event_pipe.c src/os/win32/ngx_atomic.h src/os/win32/ngx_process_cycle.c src/os/win32/ngx_win32_config.h src/os/win32/ngx_win32_init.c src/os/win32/ngx_wsarecv.c
diffstat 19 files changed, 83 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/auto/lib/openssl/conf	Wed Sep 04 20:48:23 2013 +0400
+++ b/auto/lib/openssl/conf	Wed Sep 04 20:48:28 2013 +0400
@@ -33,6 +33,10 @@
             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
             CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
+
+            if [ "$NGX_PLATFORM" = win32 ]; then
+                CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32"
+            fi
         ;;
     esac
 
--- a/auto/lib/pcre/conf	Wed Sep 04 20:48:23 2013 +0400
+++ b/auto/lib/pcre/conf	Wed Sep 04 20:48:28 2013 +0400
@@ -73,6 +73,11 @@
 
         *)
             have=NGX_PCRE . auto/have
+
+            if [ "$NGX_PLATFORM" = win32 ]; then
+                have=PCRE_STATIC . auto/have
+            fi
+
             CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
             LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
             CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
--- a/auto/lib/pcre/make	Wed Sep 04 20:48:23 2013 +0400
+++ b/auto/lib/pcre/make	Wed Sep 04 20:48:28 2013 +0400
@@ -23,14 +23,16 @@
         ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
     ;;
 
+    *)
+        ngx_makefile=
+    ;;
+
 esac
 
 
-case "$NGX_PLATFORM" in
+if [ -n "$ngx_makefile" ]; then
 
-    win32)
-
-        cat << END                                            >> $NGX_MAKEFILE
+    cat << END                                                >> $NGX_MAKEFILE
 
 `echo "$PCRE/pcre.lib:	$PCRE/pcre.h $NGX_MAKEFILE"			\
 	| sed -e "s/\//$ngx_regex_dirsep/g"`
@@ -41,10 +43,9 @@
 
 END
 
-    ;;
+else
 
-    *)
-        cat << END                                            >> $NGX_MAKEFILE
+    cat << END                                                >> $NGX_MAKEFILE
 
 $PCRE/pcre.h:	$PCRE/Makefile
 
@@ -60,6 +61,4 @@
 
 END
 
-    ;;
-
-esac
+fi
--- a/auto/lib/zlib/make	Wed Sep 04 20:48:23 2013 +0400
+++ b/auto/lib/zlib/make	Wed Sep 04 20:48:28 2013 +0400
@@ -24,6 +24,10 @@
         ngx_zlib=`echo \-DZLIB=\"$ZLIB\" | sed -e "s/\//$ngx_regex_dirsep/g"`
     ;;
 
+    *)
+        ngx_makefile=
+    ;;
+
 esac
 
 
@@ -33,13 +37,30 @@
 case "$NGX_PLATFORM" in
 
     win32)
-        cat << END                                            >> $NGX_MAKEFILE
+
+        if [ -n "$ngx_makefile" ]; then
+            cat << END                                        >> $NGX_MAKEFILE
 
 `echo "$ZLIB/zlib.lib:	$NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
 	\$(MAKE) -f auto/lib/zlib/$ngx_makefile $ngx_opt $ngx_zlib
 
 END
 
+        else
+
+            cat << END                                        >> $NGX_MAKEFILE
+
+$ZLIB/libz.a:	$NGX_MAKEFILE
+	cd $ZLIB \\
+	&& \$(MAKE) distclean \\
+	&& \$(MAKE) -f win32/Makefile.gcc \\
+		CFLAGS="$ZLIB_OPT" CC="\$(CC)" \\
+		libz.a
+
+END
+
+        fi
+
         done=YES
     ;;
 
--- a/auto/os/win32	Wed Sep 04 20:48:23 2013 +0400
+++ b/auto/os/win32	Wed Sep 04 20:48:28 2013 +0400
@@ -9,10 +9,21 @@
 CORE_DEPS="$WIN32_DEPS"
 CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
 OS_CONFIG="$WIN32_CONFIG"
-CORE_LIBS="$CORE_LIBS advapi32.lib ws2_32.lib"
 NGX_ICONS="$NGX_WIN32_ICONS"
 SELECT_SRCS=$WIN32_SELECT_SRCS
 
+case "$NGX_CC_NAME" in
+
+    gcc)
+        CORE_LIBS="$CORE_LIBS -ladvapi32 -lws2_32"
+    ;;
+
+    *)
+        CORE_LIBS="$CORE_LIBS advapi32.lib ws2_32.lib"
+    ;;
+
+esac
+
 EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
 EVENT_FOUND=YES
 
--- a/src/core/ngx_connection.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/core/ngx_connection.c	Wed Sep 04 20:48:28 2013 +0400
@@ -297,7 +297,7 @@
                 continue;
             }
 
-            if (ls[i].fd != -1) {
+            if (ls[i].fd != (ngx_socket_t) -1) {
                 continue;
             }
 
@@ -312,7 +312,7 @@
 
             s = ngx_socket(ls[i].sockaddr->sa_family, ls[i].type, 0);
 
-            if (s == -1) {
+            if (s == (ngx_socket_t) -1) {
                 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                               ngx_socket_n " %V failed", &ls[i].addr_text);
                 return NGX_ERROR;
@@ -863,7 +863,7 @@
     ngx_uint_t    log_error, level;
     ngx_socket_t  fd;
 
-    if (c->fd == -1) {
+    if (c->fd == (ngx_socket_t) -1) {
         ngx_log_error(NGX_LOG_ALERT, c->log, 0, "connection already closed");
         return;
     }
--- a/src/core/ngx_cycle.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/core/ngx_cycle.c	Wed Sep 04 20:48:28 2013 +0400
@@ -543,7 +543,7 @@
                 }
             }
 
-            if (nls[n].fd == -1) {
+            if (nls[n].fd == (ngx_socket_t) -1) {
                 nls[n].open = 1;
             }
         }
@@ -649,7 +649,7 @@
     ls = old_cycle->listening.elts;
     for (i = 0; i < old_cycle->listening.nelts; i++) {
 
-        if (ls[i].remain || ls[i].fd == -1) {
+        if (ls[i].remain || ls[i].fd == (ngx_socket_t) -1) {
             continue;
         }
 
@@ -813,7 +813,7 @@
 
     ls = cycle->listening.elts;
     for (i = 0; i < cycle->listening.nelts; i++) {
-        if (ls[i].fd == -1 || !ls[i].open) {
+        if (ls[i].fd == (ngx_socket_t) -1 || !ls[i].open) {
             continue;
         }
 
--- a/src/core/ngx_resolver.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/core/ngx_resolver.c	Wed Sep 04 20:48:28 2013 +0400
@@ -2221,7 +2221,7 @@
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &uc->log, 0, "UDP socket %d", s);
 
-    if (s == -1) {
+    if (s == (ngx_socket_t) -1) {
         ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno,
                       ngx_socket_n " failed");
         return NGX_ERROR;
--- a/src/event/modules/ngx_iocp_module.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/modules/ngx_iocp_module.c	Wed Sep 04 20:48:28 2013 +0400
@@ -170,7 +170,7 @@
 #endif
     }
 
-#ifdef __WATCOMC__
+#if defined(__WATCOMC__) || defined(__GNUC__)
     return 0;
 #endif
 }
--- a/src/event/modules/ngx_win32_select_module.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/modules/ngx_win32_select_module.c	Wed Sep 04 20:48:28 2013 +0400
@@ -148,8 +148,8 @@
         return NGX_ERROR;
     }
 
-    if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
-        || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
+    if ((event == NGX_READ_EVENT && max_read >= FD_SETSIZE)
+        || (event == NGX_WRITE_EVENT && max_write >= FD_SETSIZE))
     {
         ngx_log_error(NGX_LOG_ERR, ev->log, 0,
                       "maximum number of descriptors "
--- a/src/event/ngx_event_accept.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/ngx_event_accept.c	Wed Sep 04 20:48:28 2013 +0400
@@ -70,7 +70,7 @@
         s = accept(lc->fd, (struct sockaddr *) sa, &socklen);
 #endif
 
-        if (s == -1) {
+        if (s == (ngx_socket_t) -1) {
             err = ngx_socket_errno;
 
             if (err == NGX_EAGAIN) {
--- a/src/event/ngx_event_acceptex.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/ngx_event_acceptex.c	Wed Sep 04 20:48:28 2013 +0400
@@ -108,7 +108,7 @@
         ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &ls->log, 0,
                        ngx_socket_n " s:%d", s);
 
-        if (s == -1) {
+        if (s == (ngx_socket_t) -1) {
             ngx_log_error(NGX_LOG_ALERT, &ls->log, ngx_socket_errno,
                           ngx_socket_n " failed");
 
--- a/src/event/ngx_event_connect.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/ngx_event_connect.c	Wed Sep 04 20:48:28 2013 +0400
@@ -31,7 +31,7 @@
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, pc->log, 0, "socket %d", s);
 
-    if (s == -1) {
+    if (s == (ngx_socket_t) -1) {
         ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
                       ngx_socket_n " failed");
         return NGX_ERROR;
--- a/src/event/ngx_event_pipe.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/event/ngx_event_pipe.c	Wed Sep 04 20:48:28 2013 +0400
@@ -57,7 +57,7 @@
         do_write = 1;
     }
 
-    if (p->upstream->fd != -1) {
+    if (p->upstream->fd != (ngx_socket_t) -1) {
         rev = p->upstream->read;
 
         flags = (rev->eof || rev->error) ? NGX_CLOSE_EVENT : 0;
@@ -74,7 +74,9 @@
         }
     }
 
-    if (p->downstream->fd != -1 && p->downstream->data == p->output_ctx) {
+    if (p->downstream->fd != (ngx_socket_t) -1
+        && p->downstream->data == p->output_ctx)
+    {
         wev = p->downstream->write;
         if (ngx_handle_write_event(wev, p->send_lowat) != NGX_OK) {
             return NGX_ABORT;
--- a/src/os/win32/ngx_atomic.h	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/os/win32/ngx_atomic.h	Wed Sep 04 20:48:28 2013 +0400
@@ -21,7 +21,8 @@
 #define NGX_ATOMIC_T_LEN            (sizeof("-2147483648") - 1)
 
 
-#if defined( __WATCOMC__ ) || defined( __BORLANDC__ ) || ( _MSC_VER >= 1300 )
+#if defined( __WATCOMC__ ) || defined( __BORLANDC__ ) || defined(__GNUC__)    \
+    || ( _MSC_VER >= 1300 )
 
 /* the new SDK headers */
 
--- a/src/os/win32/ngx_process_cycle.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/os/win32/ngx_process_cycle.c	Wed Sep 04 20:48:28 2013 +0400
@@ -815,7 +815,7 @@
 
                 /* THREAD: lock */
 
-                if (c[i].fd != -1 && c[i].idle) {
+                if (c[i].fd != (ngx_socket_t) -1 && c[i].idle) {
                     c[i].close = 1;
                     c[i].read->handler(c[i].read);
                 }
@@ -874,7 +874,7 @@
     if (ngx_exiting) {
         c = cycle->connections;
         for (i = 0; i < cycle->connection_n; i++) {
-            if (c[i].fd != -1
+            if (c[i].fd != (ngx_socket_t) -1
                 && c[i].read
                 && !c[i].read->accept
                 && !c[i].read->channel
--- a/src/os/win32/ngx_win32_config.h	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/os/win32/ngx_win32_config.h	Wed Sep 04 20:48:28 2013 +0400
@@ -9,6 +9,7 @@
 #define _NGX_WIN32_CONFIG_H_INCLUDED_
 
 
+#undef  WIN32
 #define WIN32         0x0400
 #define _WIN32_WINNT  0x0501
 
@@ -35,6 +36,12 @@
 #include <mswsock.h>
 #include <shellapi.h>
 #include <stddef.h>    /* offsetof() */
+
+#ifdef __GNUC__
+/* GCC MinGW's stdio.h includes sys/types.h */
+#define _OFF_T_
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
--- a/src/os/win32/ngx_win32_init.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/os/win32/ngx_win32_init.c	Wed Sep 04 20:48:28 2013 +0400
@@ -141,7 +141,7 @@
      */
 
     s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
-    if (s == -1) {
+    if (s == (ngx_socket_t) -1) {
         ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                       ngx_socket_n " falied");
         return NGX_ERROR;
--- a/src/os/win32/ngx_wsarecv.c	Wed Sep 04 20:48:23 2013 +0400
+++ b/src/os/win32/ngx_wsarecv.c	Wed Sep 04 20:48:28 2013 +0400
@@ -17,7 +17,7 @@
     u_long        bytes, flags;
     WSABUF        wsabuf[1];
     ngx_err_t     err;
-    ngx_uint_t    n;
+    ngx_int_t     n;
     ngx_event_t  *rev;
 
     wsabuf[0].buf = (char *) buf;
@@ -70,7 +70,7 @@
     u_long            bytes, flags;
     WSABUF            wsabuf[1];
     ngx_err_t         err;
-    ngx_uint_t        n;
+    ngx_int_t         n;
     ngx_event_t      *rev;
     LPWSAOVERLAPPED   ovlp;