From 2976481933b3e7f0caf0ffeccac580f16f796ea8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
 <alexey.pawlow@gmail.com>
Date: Thu, 17 Jun 2021 18:51:19 +0530
Subject: [PATCH 008/N] posixmodule.c: Define necessary headers for compiling
 on MINGW
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Also, build `nt` module instead of `posix` when compiling
with MINGW.

Co-authored-by: Naveen M K <naveen521kk@gmail.com>
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
---
 Modules/Setup.bootstrap.in |  2 +-
 Modules/posixmodule.c      | 28 ++++++++++++++++++++++++----
 configure.ac               |  8 ++++++++
 3 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
index 8ef0f20..1f21d35 100644
--- a/Modules/Setup.bootstrap.in
+++ b/Modules/Setup.bootstrap.in
@@ -8,7 +8,7 @@
 # module C APIs are used in core
 atexit atexitmodule.c
 faulthandler faulthandler.c
-posix posixmodule.c
+@INITSYS@ posixmodule.c
 _signal signalmodule.c
 _tracemalloc _tracemalloc.c
 
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c21c6f0..1a62ddd 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -369,6 +369,26 @@ corresponding Unix manual entries for more information on calls.");
 #  define HAVE_PIPE       1
 #  define HAVE_FSYNC      1
 #  define fsync _commit
+#elif defined(__MINGW32__)	/* GCC for windows hosts */
+/* getlogin is detected by configure on mingw-w64 */
+#  undef HAVE_GETLOGIN
+/*#    define HAVE_GETCWD     1 - detected by configure*/
+#  define HAVE_GETPPID    1
+#  define HAVE_GETLOGIN   1
+#  define HAVE_SPAWNV     1
+#  define HAVE_WSPAWNV    1
+#  define HAVE_WEXECV     1
+/*#    define HAVE_EXECV	     1 - detected by configure*/
+#  define HAVE_PIPE	     1
+#  define HAVE_POPEN	     1
+#  define HAVE_SYSTEM	   1
+#  define HAVE_CWAIT      1
+#  define HAVE_FSYNC      1
+#  define fsync _commit
+#  include <winioctl.h>
+#  ifndef _MAX_ENV
+#    define _MAX_ENV	32767
+#  endif
 #endif  /* ! __WATCOMC__ || __QNX__ */
 
 /*[clinic input]
@@ -446,7 +466,7 @@ extern char        *ctermid_r(char *);
 #  endif
 #endif
 
-#ifdef _MSC_VER
+#ifdef MS_WINDOWS
 #  ifdef HAVE_DIRECT_H
 #    include <direct.h>
 #  endif
@@ -457,7 +477,7 @@ extern char        *ctermid_r(char *);
 #    include <process.h>
 #  endif
 #  include <malloc.h>
-#endif /* _MSC_VER */
+#endif /* MS_WINDOWS */
 
 #ifndef MAXPATHLEN
 #  if defined(PATH_MAX) && PATH_MAX > 1024
@@ -1594,9 +1614,9 @@ error:
 ** man environ(7).
 */
 #include <crt_externs.h>
-#elif !defined(_MSC_VER) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__))
+#elif !defined(MS_WINDOWS) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__))
 extern char **environ;
-#endif /* !_MSC_VER */
+#endif /* !MS_WINDOWS */
 
 static PyObject *
 convertenviron(void)
diff --git a/configure.ac b/configure.ac
index aeb9928..1bc4974 100644
--- a/configure.ac
+++ b/configure.ac
@@ -755,6 +755,14 @@ then
             [Define to include mbstate_t for mbrtowc])
 fi
 
+AC_MSG_CHECKING([for init system calls])
+AC_SUBST(INITSYS)
+case $host in
+  *-*-mingw*)	INITSYS=nt;;
+  *)		INITSYS=posix;;
+esac
+AC_MSG_RESULT([$INITSYS])
+
 # Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
 # it may influence the way we can build extensions, so distutils
 # needs to check it
