]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix compilation with mingw.org's MinGW 5.x headers
authorEli Zaretskii <eliz@gnu.org>
Sat, 28 Jul 2018 12:34:00 +0000 (15:34 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 28 Jul 2018 12:34:00 +0000 (15:34 +0300)
lib-src/pop.c
nt/inc/ms-w32.h
nt/inc/sys/socket.h

index 10aac957d4bcfb7b179e95a355e705e0d5111bf5..0b9204576bd8d0afbc60b06c11021e0920541fde 100644 (file)
@@ -30,8 +30,12 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #include "ntlib.h"
 #undef _WIN32_WINNT
 #define _WIN32_WINNT 0x0501    /* for getaddrinfo stuff */
-#include <winsock2.h>
-#include <ws2tcpip.h>
+#if defined __MINGW32_VERSION && __MINGW32_VERSION >= 5000000L
+# include <windows.h>
+#else
+# include <winsock2.h>
+#endif
+# include <ws2tcpip.h>
 #undef getaddrinfo
 #define getaddrinfo  sys_getaddrinfo
 #undef freeaddrinfo
index ff4317817e08c5dcd192deb3e4e9782522569b20..0ab46e98328b265a6da5c1871b017afd9cd31b7f 100644 (file)
@@ -455,7 +455,12 @@ extern char *get_emacs_configuration_options (void);
    windows.h.  For this to have proper effect, config.h must always be
    included before windows.h.  */
 #define _WINSOCKAPI_    1
-#define _WINSOCK_H
+#if defined __MINGW32_VERSION && __MINGW32_VERSION < 5000000L
+/* mingw.org's MinGW 5.x changed how it includes winsock.h and time.h,
+   and now defining _WINSOCK_H skips the definition of struct timeval,
+   which we don't want.  */
+# define _WINSOCK_H
+#endif
 
 /* Defines size_t and alloca ().  */
 #include <stdlib.h>
index 2582cbdaef1c7d7aff30ec5575d530f4b1c46ecd..3ea9542b05c57d7ee7f20e5ec6d9f303219daa59 100644 (file)
@@ -49,6 +49,11 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #define timeval ws_timeval
 #endif
 
+#if defined __MINGW32_VERSION && __MINGW32_VERSION >= 5000000L
+/* Need winerror.h before winsock2.h with mingw.org's MinGW 5.x,
+   otherwise some error codes are not defined.  */
+# include <winerror.h>
+#endif
 #include <winsock2.h>
 #include <ws2tcpip.h>
 /* process.c uses uint16_t (from C99) for IPv6, but