]> git.kaiwu.me - nginx.git/commitdiff
Win32: MinGW GCC compatibility.
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 4 Sep 2013 16:48:28 +0000 (20:48 +0400)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 4 Sep 2013 16:48:28 +0000 (20:48 +0400)
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.

19 files changed:
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

index 528ee1794e93f3285656ec07f5d3bebb7b2cd000..a65815f63646cdf2dd6ce5ed3e57a779f66d9551 100644 (file)
@@ -33,6 +33,10 @@ if [ $OPENSSL != NONE ]; then
             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
 
index 345860053481eb85d0f760cfffd72344bd68b656..939f01b77a4dcff451ad317f1659fd3a17c85e16 100644 (file)
@@ -73,6 +73,11 @@ if [ $PCRE != NONE ]; then
 
         *)
             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"
index c50d12f9f4a4c546aee93c350d1f1f0504b8ed45..0a27a112c1198b845b6745042c8949d235724491 100644 (file)
@@ -23,14 +23,16 @@ case "$NGX_CC_NAME" in
         ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
     ;;
 
-esac
+    *)
+        ngx_makefile=
+    ;;
 
+esac
 
-case "$NGX_PLATFORM" in
 
-    win32)
+if [ -n "$ngx_makefile" ]; then
 
-        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 @@ case "$NGX_PLATFORM" in
 
 END
 
-    ;;
+else
 
-    *)
-        cat << END                                            >> $NGX_MAKEFILE
+    cat << END                                                >> $NGX_MAKEFILE
 
 $PCRE/pcre.h:  $PCRE/Makefile
 
@@ -60,6 +61,4 @@ $PCRE/.libs/libpcre.a:        $PCRE/Makefile
 
 END
 
-    ;;
-
-esac
+fi
index 9401a1d1a8e0fe122cf5753876a30e7311674bb1..7875ef67fe05c82e9a2835543bcb6d10f2195cde 100644 (file)
@@ -24,6 +24,10 @@ case "$NGX_CC_NAME" in
         ngx_zlib=`echo \-DZLIB=\"$ZLIB\" | sed -e "s/\//$ngx_regex_dirsep/g"`
     ;;
 
+    *)
+        ngx_makefile=
+    ;;
+
 esac
 
 
@@ -33,13 +37,30 @@ done=NO
 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
     ;;
 
index 21a54ba11e56446c202bf3e9d62580959d9316ef..0b9b461875f26cb34bfdee483cfec01f743ee160 100644 (file)
@@ -9,10 +9,21 @@ CORE_INCS="$WIN32_INCS"
 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
 
index e12d3efc0ebc289175b9009d03e3dfe8e911232c..28bf6ba065650bca1f41f3e8423bfc0f02343824 100644 (file)
@@ -297,7 +297,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
                 continue;
             }
 
-            if (ls[i].fd != -1) {
+            if (ls[i].fd != (ngx_socket_t) -1) {
                 continue;
             }
 
@@ -312,7 +312,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
 
             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_close_connection(ngx_connection_t *c)
     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;
     }
index 2c006bcb22037e08f2f015893ec4075043eb1665..eb39ab2537af66293c2ffd8db922b69e21e1fd4b 100644 (file)
@@ -543,7 +543,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
                 }
             }
 
-            if (nls[n].fd == -1) {
+            if (nls[n].fd == (ngx_socket_t) -1) {
                 nls[n].open = 1;
             }
         }
@@ -649,7 +649,7 @@ old_shm_zone_done:
     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 @@ failed:
 
     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;
         }
 
index d59d0c47162472133d055291cf943061d8106d86..d94477a9cc7e5030675d7c1b9518ca6bc00ba4a4 100644 (file)
@@ -2221,7 +2221,7 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
 
     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;
index bcaf71f6d5c2393b54de06f5e098723482b7ee05..787e22d803eb2209b6da2279a69e930a9463e44a 100644 (file)
@@ -170,7 +170,7 @@ ngx_iocp_timer(void *data)
 #endif
     }
 
-#ifdef __WATCOMC__
+#if defined(__WATCOMC__) || defined(__GNUC__)
     return 0;
 #endif
 }
index 0a02ffca0b0c627871f06e46e4e2ae2338cc3b89..eb5382d4e0b5d1a0a800a69ea41f4038b863a8f6 100644 (file)
@@ -148,8 +148,8 @@ ngx_select_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
         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 "
index 6f571f1a861713ded8f6cc74cb66192006987bff..b1145446aa2bdedcbcf9588390e0d6c04e607a3c 100644 (file)
@@ -70,7 +70,7 @@ ngx_event_accept(ngx_event_t *ev)
         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) {
index b7c4134b1aa8b2c32a8221eec402f9619786cb5f..1fde03105bfaf5d7fe80d254c610881fe0bcce13 100644 (file)
@@ -108,7 +108,7 @@ ngx_event_post_acceptex(ngx_listening_t *ls, ngx_uint_t n)
         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");
 
index e6ae6564e6cee9b9f645efff8147594b6f59b2ad..fddad0a922990ff93e3657fdb32db3e688005149 100644 (file)
@@ -31,7 +31,7 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
 
     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;
index 4ef9b71038089643dea2d1d4b2f8e8f92d2a4575..6f685a9ed2903327de0c7487321e3aeb706eaef9 100644 (file)
@@ -57,7 +57,7 @@ ngx_event_pipe(ngx_event_pipe_t *p, ngx_int_t do_write)
         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 @@ ngx_event_pipe(ngx_event_pipe_t *p, ngx_int_t do_write)
         }
     }
 
-    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;
index 78d7424f5943938b006da7fb00105793351cbbf2..d89a0d3caea106c7cddc085bfd6a031cf58f4152 100644 (file)
@@ -21,7 +21,8 @@ typedef volatile ngx_atomic_uint_t  ngx_atomic_t;
 #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 */
 
index 3a14aad69a447de2bfc97274be0c15f04a4bb7c5..949ea85dbb2baaab5db503ca3a864287bd90b1c9 100644 (file)
@@ -815,7 +815,7 @@ ngx_worker_thread(void *data)
 
                 /* 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 @@ ngx_worker_process_exit(ngx_cycle_t *cycle)
     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
index 193079230a4d8ae0bc2e2f8948f7c6e1a7d86393..67105f1af5c20abe2f1f6c282bcea043bbc2e23f 100644 (file)
@@ -9,6 +9,7 @@
 #define _NGX_WIN32_CONFIG_H_INCLUDED_
 
 
+#undef  WIN32
 #define WIN32         0x0400
 #define _WIN32_WINNT  0x0501
 
 #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>
index cf73d82157866e13282153dc8248664d4191d3a1..d2505ced47197921f6bbb3274f1bf94eed2c0f71 100644 (file)
@@ -141,7 +141,7 @@ ngx_os_init(ngx_log_t *log)
      */
 
     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;
index dd74ae2cc014df1507d5e3c3d5babb5486343895..1925f0b17ed178ff60b42fd7ec8f647615d7a93b 100644 (file)
@@ -17,7 +17,7 @@ ngx_wsarecv(ngx_connection_t *c, u_char *buf, size_t size)
     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 @@ ngx_overlapped_wsarecv(ngx_connection_t *c, u_char *buf, size_t size)
     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;