]> granicus.if.org Git - postgresql/commitdiff
Enable building with the Mingw64 compiler.
authorAndrew Dunstan <andrew@dunslane.net>
Mon, 31 Jan 2011 00:56:46 +0000 (19:56 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Mon, 31 Jan 2011 00:56:46 +0000 (19:56 -0500)
This can be used to build 64 bit Windows binaries, not only on 64 bit
Windows but on supported cross-compiling hosts including 32 bit Windows,
Cygwin, Darwin and Linux.

config/ac_func_accept_argtypes.m4
configure
src/include/c.h
src/include/port.h
src/include/port/win32.h
src/include/port/win32/sys/socket.h
src/port/getaddrinfo.c
src/test/regress/resultmap

index 7cb5cb3776773663d2f05dd33496d6b28544a3bb..1e7717922d5fc303c412408739f403cd046a262e 100644 (file)
@@ -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(
index 8ff61a6f77318a03c295785488ce81311bdfc38e..cc809acd959146ab31102acae2a4099b81267e23 100755 (executable)
--- a/configure
+++ b/configure
@@ -18696,8 +18696,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
index 634b21fa9495fda25740475535b10a7ff5360398..af1be9499efb01321e7fb4477e298e6888805130 100644 (file)
@@ -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
index 7ad464c07dc9417c806bb66511573b3ea82401c8..4d40cef7b4b7c5cc1bc95286b4f16399cd519363 100644 (file)
@@ -325,8 +325,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
index 93439f763d016656c65ffd241014510ca27ec28b..6d99ecbe88d5fecd8d81ab7a8e8c077a4122fac7 100644 (file)
@@ -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
+#undefine _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.
 #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>
index 6947ec07d6274bc245e953e6ba7ef47dd816aa8e..edaee6a894ca74e2c329a4bbcb3b68307e438670 100644 (file)
@@ -13,6 +13,7 @@
  */
 #include <winsock2.h>
 #include <ws2tcpip.h>
+#include <windows.h>
 
 #undef ERROR
 #undef small
index 654858e639338c8e9c368ee528f084633009d65a..fabd50dddbe9247f4efe0d64e0b285fe8323585c 100644 (file)
@@ -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
index 7bfcee29b4841beb296f8c681bf78e8087712f0d..d02d221d56fd5d35420499181d012a9b8d7c1fa0 100644 (file)
@@ -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