aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2013-09-04 20:48:28 +0400
committerMaxim Dounin <mdounin@mdounin.ru>2013-09-04 20:48:28 +0400
commit48d96ced6ff6cea533d56d0d09129f6632a19e4d (patch)
treef3196223e3dd9173aaf91dff959498799c0e3ea2
parent74b7a910137a99b5fb073e7c27858c019f96a8cc (diff)
downloadnginx-48d96ced6ff6cea533d56d0d09129f6632a19e4d.tar.gz
nginx-48d96ced6ff6cea533d56d0d09129f6632a19e4d.zip
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.
-rw-r--r--auto/lib/openssl/conf4
-rw-r--r--auto/lib/pcre/conf5
-rw-r--r--auto/lib/pcre/make19
-rw-r--r--auto/lib/zlib/make23
-rw-r--r--auto/os/win3213
-rw-r--r--src/core/ngx_connection.c6
-rw-r--r--src/core/ngx_cycle.c6
-rw-r--r--src/core/ngx_resolver.c2
-rw-r--r--src/event/modules/ngx_iocp_module.c2
-rw-r--r--src/event/modules/ngx_win32_select_module.c4
-rw-r--r--src/event/ngx_event_accept.c2
-rw-r--r--src/event/ngx_event_acceptex.c2
-rw-r--r--src/event/ngx_event_connect.c2
-rw-r--r--src/event/ngx_event_pipe.c6
-rw-r--r--src/os/win32/ngx_atomic.h3
-rw-r--r--src/os/win32/ngx_process_cycle.c4
-rw-r--r--src/os/win32/ngx_win32_config.h7
-rw-r--r--src/os/win32/ngx_win32_init.c2
-rw-r--r--src/os/win32/ngx_wsarecv.c4
19 files changed, 83 insertions, 33 deletions
diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf
index 528ee1794..a65815f63 100644
--- a/auto/lib/openssl/conf
+++ b/auto/lib/openssl/conf
@@ -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
diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf
index 345860053..939f01b77 100644
--- a/auto/lib/pcre/conf
+++ b/auto/lib/pcre/conf
@@ -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"
diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make
index c50d12f9f..0a27a112c 100644
--- a/auto/lib/pcre/make
+++ b/auto/lib/pcre/make
@@ -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
diff --git a/auto/lib/zlib/make b/auto/lib/zlib/make
index 9401a1d1a..7875ef67f 100644
--- a/auto/lib/zlib/make
+++ b/auto/lib/zlib/make
@@ -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
;;
diff --git a/auto/os/win32 b/auto/os/win32
index 21a54ba11..0b9b46187 100644
--- a/auto/os/win32
+++ b/auto/os/win32
@@ -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
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index e12d3efc0..28bf6ba06 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -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;
}
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index 2c006bcb2..eb39ab253 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -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;
}
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index d59d0c471..d94477a9c 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -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;
diff --git a/src/event/modules/ngx_iocp_module.c b/src/event/modules/ngx_iocp_module.c
index bcaf71f6d..787e22d80 100644
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -170,7 +170,7 @@ ngx_iocp_timer(void *data)
#endif
}
-#ifdef __WATCOMC__
+#if defined(__WATCOMC__) || defined(__GNUC__)
return 0;
#endif
}
diff --git a/src/event/modules/ngx_win32_select_module.c b/src/event/modules/ngx_win32_select_module.c
index 0a02ffca0..eb5382d4e 100644
--- a/src/event/modules/ngx_win32_select_module.c
+++ b/src/event/modules/ngx_win32_select_module.c
@@ -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 "
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 6f571f1a8..b1145446a 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -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) {
diff --git a/src/event/ngx_event_acceptex.c b/src/event/ngx_event_acceptex.c
index b7c4134b1..1fde03105 100644
--- a/src/event/ngx_event_acceptex.c
+++ b/src/event/ngx_event_acceptex.c
@@ -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");
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index e6ae6564e..fddad0a92 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -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;
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 4ef9b7103..6f685a9ed 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -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;
diff --git a/src/os/win32/ngx_atomic.h b/src/os/win32/ngx_atomic.h
index 78d7424f5..d89a0d3ca 100644
--- a/src/os/win32/ngx_atomic.h
+++ b/src/os/win32/ngx_atomic.h
@@ -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 */
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
index 3a14aad69..949ea85db 100644
--- a/src/os/win32/ngx_process_cycle.c
+++ b/src/os/win32/ngx_process_cycle.c
@@ -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
diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h
index 193079230..67105f1af 100644
--- a/src/os/win32/ngx_win32_config.h
+++ b/src/os/win32/ngx_win32_config.h
@@ -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>
diff --git a/src/os/win32/ngx_win32_init.c b/src/os/win32/ngx_win32_init.c
index cf73d8215..d2505ced4 100644
--- a/src/os/win32/ngx_win32_init.c
+++ b/src/os/win32/ngx_win32_init.c
@@ -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;
diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c
index dd74ae2cc..1925f0b17 100644
--- a/src/os/win32/ngx_wsarecv.c
+++ b/src/os/win32/ngx_wsarecv.c
@@ -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;