aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2011-04-09 17:59:27 -0400
committerAndrew Dunstan <andrew@dunslane.net>2011-04-09 17:59:27 -0400
commit2ea865de5660f75f44f6b1ba78090e41e070cb4c (patch)
tree6eb67948302b7235400b04fb2a85790005498c8b
parent00bf707113a297aa85c38beda8fb1247fe4bd304 (diff)
downloadpostgresql-2ea865de5660f75f44f6b1ba78090e41e070cb4c.tar.gz
postgresql-2ea865de5660f75f44f6b1ba78090e41e070cb4c.zip
Backport changes to allow building with MinGW 64 bit compiler.
These changes have been in HEAD for some time with no ill effect. They are only being backported to 9.0, as the required WINNT version was not high enough before that.
-rw-r--r--config/ac_func_accept_argtypes.m45
-rwxr-xr-xconfigure4
-rw-r--r--src/include/c.h2
-rw-r--r--src/include/port.h4
-rw-r--r--src/include/port/win32.h18
-rw-r--r--src/include/port/win32/sys/socket.h1
-rw-r--r--src/port/getaddrinfo.c3
-rw-r--r--src/test/regress/resultmap3
8 files changed, 32 insertions, 8 deletions
diff --git a/config/ac_func_accept_argtypes.m4 b/config/ac_func_accept_argtypes.m4
index 4ac5ce0eb94..c64f3f8ffb6 100644
--- a/config/ac_func_accept_argtypes.m4
+++ b/config/ac_func_accept_argtypes.m4
@@ -38,6 +38,7 @@ dnl
# 'int' as the result, because that ought to work best.
#
# On Win32, accept() returns 'unsigned int PASCAL'
+# Win64 uses SOCKET for return and arg1
AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
[AC_MSG_CHECKING([types of arguments for accept()])
@@ -45,8 +46,8 @@ AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
[AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl
[AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl
[AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl
- [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
- for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
+ [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do
+ for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
AC_TRY_COMPILE(
diff --git a/configure b/configure
index a4f4c9ef34e..3338eea3cf5 100755
--- a/configure
+++ b/configure
@@ -18472,8 +18472,8 @@ else
if test "${ac_cv_func_accept_arg3+set}" = set; then
$as_echo_n "(cached) " >&6
else
- for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
- for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
+ for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do
+ for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
cat >conftest.$ac_ext <<_ACEOF
diff --git a/src/include/c.h b/src/include/c.h
index bec1a8cc851..1f2813c90f6 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -58,7 +58,7 @@
#endif
#include "postgres_ext.h"
-#if _MSC_VER >= 1400
+#if _MSC_VER >= 1400 || defined(WIN64)
#define errcode __msvc_errcode
#include <crtdefs.h>
#undef errcode
diff --git a/src/include/port.h b/src/include/port.h
index 65b80ef5134..2794002ca9e 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -333,8 +333,12 @@ extern FILE *pgwin32_fopen(const char *, const char *);
#define fopen(a,b) pgwin32_fopen(a,b)
#endif
+#ifndef popen
#define popen(a,b) _popen(a,b)
+#endif
+#ifndef pclose
#define pclose(a) _pclose(a)
+#endif
/* New versions of MingW have gettimeofday, old mingw and msvc don't */
#ifndef HAVE_GETTIMEOFDAY
diff --git a/src/include/port/win32.h b/src/include/port/win32.h
index 1473d9e8c3c..5d41fd3ac74 100644
--- a/src/include/port/win32.h
+++ b/src/include/port/win32.h
@@ -4,7 +4,16 @@
#define WIN32_ONLY_COMPILER
#endif
+/*
+ * Make sure _WIN32_WINNT has the minumum required value.
+ * Leave a higher value in place.
+*/
+#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0501
+#undef _WIN32_WINNT
+#endif
+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
+#endif
/*
* Always build with SSPI support. Keep it as a #define in case
* we want a switch to disable it sometime in the future.
@@ -17,10 +26,17 @@
#undef mkdir
#undef ERROR
+
+/*
+ * The Mingw64 headers choke if this is already defined - they
+ * define it themselves.
+ */
+#if !defined(WIN64) || defined(WIN32_ONLY_COMPILER)
#define _WINSOCKAPI_
-#include <windows.h>
+#endif
#include <winsock2.h>
#include <ws2tcpip.h>
+#include <windows.h>
#undef small
#include <process.h>
#include <signal.h>
diff --git a/src/include/port/win32/sys/socket.h b/src/include/port/win32/sys/socket.h
index 97a50417991..e811919c979 100644
--- a/src/include/port/win32/sys/socket.h
+++ b/src/include/port/win32/sys/socket.h
@@ -13,6 +13,7 @@
*/
#include <winsock2.h>
#include <ws2tcpip.h>
+#include <windows.h>
#undef ERROR
#undef small
diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c
index 4133aed54d7..cf658a4eb50 100644
--- a/src/port/getaddrinfo.c
+++ b/src/port/getaddrinfo.c
@@ -329,8 +329,7 @@ gai_strerror(int errcode)
return "Not enough memory";
#endif
#ifdef EAI_NODATA
-#ifndef WIN32_ONLY_COMPILER /* MSVC complains because another case has the
- * same value */
+#if !defined(WIN64) && !defined(WIN32_ONLY_COMPILER) /* MSVC/WIN64 duplicate */
case EAI_NODATA:
return "No host data of that type was found";
#endif
diff --git a/src/test/regress/resultmap b/src/test/regress/resultmap
index 7bfcee29b48..d02d221d56f 100644
--- a/src/test/regress/resultmap
+++ b/src/test/regress/resultmap
@@ -1,11 +1,14 @@
float4:out:i.86-pc-mingw32=float4-exp-three-digits.out
+float4:out:x86_64-w64-mingw32=float4-exp-three-digits.out
float4:out:i.86-pc-win32vc=float4-exp-three-digits.out
float8:out:i.86-.*-freebsd=float8-small-is-zero.out
float8:out:i.86-.*-openbsd=float8-small-is-zero.out
float8:out:i.86-.*-netbsd=float8-small-is-zero.out
float8:out:m68k-.*-netbsd=float8-small-is-zero.out
float8:out:i.86-pc-mingw32=float8-exp-three-digits-win32.out
+float8:out:x86_64-w64-mingw32=float8-exp-three-digits-win32.out
float8:out:i.86-pc-win32vc=float8-exp-three-digits-win32.out
float8:out:i.86-pc-cygwin=float8-small-is-zero.out
int8:out:i.86-pc-mingw32=int8-exp-three-digits.out
+int8:out:x86_64-w64-mingw32=int8-exp-three-digits.out
int8:out:i.86-pc-win32vc=int8-exp-three-digits.out