From f2de9d206b33bc2e27acde1e751df9ba8faf60a9 Mon Sep 17 00:00:00 2001
From: John Ralls <jralls@ceridwen.us>
Date: Tue, 23 Apr 2019 15:06:48 -0700
Subject: [PATCH] Fix build on MinGW-w64

Fixes bug 35405

       * lib/poll.h: MinGW provides struct pollfd in winsock2.h and
         lib/threads.h includes it so disable declaring it in poll.h and
         get the declaration from winsock2.h. Otherwise gcc complains that
         poll() has a different signature between the declaration and
         definition.
       * libguile/socket.c: TCP declarations are in winsock.h on Windows.
       * libguile/timegm.c: MinGW doesn't include mktime so include mktime.c to
         provide it.
---
 lib/poll.in.h     | 5 +++++
 lib/timegm.c      | 2 ++
 libguile/socket.c | 6 +++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/lib/poll.in.h b/lib/poll.in.h
index e9b141d8f..3b0a99165 100644
--- a/lib/poll.in.h
+++ b/lib/poll.in.h
@@ -40,6 +40,9 @@
 
 
 #if !@HAVE_POLL_H@
+# ifdef __MINGW32__
+#  include <winsock2.h>
+# endif
 
 /* fake a poll(2) environment */
 # define POLLIN      0x0001      /* any readable data available   */
@@ -55,12 +58,14 @@
 
 # if !GNULIB_defined_poll_types
 
+#  ifndef __MINGW32__
 struct pollfd
 {
   int fd;                       /* which file descriptor to poll */
   short events;                 /* events we are interested in   */
   short revents;                /* events found on return        */
 };
+#  endif
 
 typedef unsigned long nfds_t;
 
diff --git a/lib/timegm.c b/lib/timegm.c
index 168da8ead..35bc67dc1 100644
--- a/lib/timegm.c
+++ b/lib/timegm.c
@@ -38,3 +38,5 @@ timegm (struct tm *tmp)
   tmp->tm_isdst = 0;
   return __mktime_internal (tmp, __gmtime_r, &gmtime_offset);
 }
+
+#include "mktime.c"
diff --git a/libguile/socket.c b/libguile/socket.c
index 71c17e892..f5371b6c8 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -40,7 +40,11 @@
 #include <sys/un.h>
 #endif
 #include <netinet/in.h>
-#include <netinet/tcp.h>
+#ifdef __MINGW32__
+# include <winsock.h>
+#else
+# include <netinet/tcp.h>
+#endif
 #include <netdb.h>
 #include <arpa/inet.h>
 
-- 
2.20.1

