diff -Naur Python-3.8.0-orig/Lib/distutils/sysconfig.py Python-3.8.0/Lib/distutils/sysconfig.py
--- Python-3.8.0-orig/Lib/distutils/sysconfig.py	2019-10-22 10:01:10.872961200 +0300
+++ Python-3.8.0/Lib/distutils/sysconfig.py	2019-10-22 10:02:18.890080700 +0300
@@ -65,6 +65,17 @@
 python_build = _python_build()
 
 
+def _posix_build():
+    # GCC[mingw*] use posix build system
+    # Check for cross builds explicitly
+    host_platform = os.environ.get("_PYTHON_HOST_PLATFORM")
+    if host_platform:
+        if host_platform.startswith('mingw'):
+            return True
+    return os.name == 'posix' or \
+        (os.name == "nt" and 'GCC' in sys.version)
+posix_build = _posix_build()
+
 # Calculate the build qualifier flags if they are defined.  Adding the flags
 # to the include and lib directories only makes sense for an installation, not
 # an in-source build.
@@ -98,7 +109,7 @@
     """
     if prefix is None:
         prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
-    if os.name == "posix":
+    if posix_build:
         if python_build:
             # Assume the executable is in the build directory.  The
             # pyconfig.h file should be in the same directory.  Since
@@ -145,7 +156,7 @@
         else:
             prefix = plat_specific and EXEC_PREFIX or PREFIX
 
-    if os.name == "posix":
+    if posix_build:
         libpython = os.path.join(prefix,
                                  "lib", "python" + get_python_version())
         if standard_lib:
@@ -255,7 +266,7 @@
 def get_config_h_filename():
     """Return full pathname of installed pyconfig.h file."""
     if python_build:
-        if os.name == "nt":
+        if os.name == "nt" and not posix_build:
             inc_dir = os.path.join(_sys_home or project_base, "PC")
         else:
             inc_dir = _sys_home or project_base
@@ -461,6 +472,9 @@
 
 
 def _init_nt():
+    if posix_build:
+        _init_posix()
+        return
     """Initialize the module as appropriate for NT"""
     g = {}
     # set basic install directories
@@ -510,7 +524,7 @@
 
         # Always convert srcdir to an absolute path
         srcdir = _config_vars.get('srcdir', project_base)
-        if os.name == 'posix':
+        if posix_build:
             if python_build:
                 # If srcdir is a relative path (typically '.' or '..')
                 # then it should be interpreted relative to the directory
@@ -529,7 +543,7 @@
         # Normally it is relative to the build directory.  However, during
         # testing, for example, we might be running a non-installed python
         # from a different directory.
-        if python_build and os.name == "posix":
+        if python_build and posix_build:
             base = project_base
             if (not os.path.isabs(_config_vars['srcdir']) and
                 base != os.getcwd()):
