diff -Naur Python-3.8.0-orig/setup.py Python-3.8.0/setup.py
--- Python-3.8.0-orig/setup.py	2019-10-22 10:03:14.129777700 +0300
+++ Python-3.8.0/setup.py	2019-10-22 10:03:22.475792400 +0300
@@ -703,7 +703,7 @@
         if HOST_PLATFORM == 'hp-ux11':
             self.lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32']
 
-        if MACOS:
+        if MACOS or MS_WINDOWS:
             # This should work on any unixy platform ;-)
             # If the user has bothered specifying additional -I and -L flags
             # in OPT and LDFLAGS we might as well use them here.
@@ -713,6 +713,8 @@
             # directories with whitespace in the name to store libraries.
             cflags, ldflags = sysconfig.get_config_vars(
                     'CFLAGS', 'LDFLAGS')
+            cflags = cflags + ' ' + ('',os.environ.get('CC'))[os.environ.get('CC') != None]
+            ldflags = ldflags + ' ' + ('',os.environ.get('LDSHARED'))[os.environ.get('LDSHARED') != None]
             for item in cflags.split():
                 if item.startswith('-I'):
                     self.inc_dirs.append(item[2:])
@@ -1907,14 +1909,19 @@
         # The versions with dots are used on Unix, and the versions without
         # dots on Windows, for detection by cygwin.
         tcllib = tklib = tcl_includes = tk_includes = None
-        for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
-                        '8.2', '82', '8.1', '81', '8.0', '80']:
-            tklib = self.compiler.find_library_file(self.lib_dirs,
-                                                        'tk' + version)
-            tcllib = self.compiler.find_library_file(self.lib_dirs,
-                                                         'tcl' + version)
-            if tklib and tcllib:
-                # Exit the loop when we've found the Tcl/Tk libraries
+        tcltk_suffix = None
+        for suffix in ['', 's']:
+            for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83',
+                            '8.2', '82', '8.1', '81', '8.0', '80', '']:
+                tklib = self.compiler.find_library_file(self.lib_dirs,
+                                                            'tk' + version + suffix)
+                tcllib = self.compiler.find_library_file(self.lib_dirs,
+                                                             'tcl' + version + suffix)
+                if tklib and tcllib:
+                    # Exit the loop when we've found the Tcl/Tk libraries
+                    tcltk_suffix = suffix
+                    break
+            if tcltk_suffix != None:
                 break
 
         # Now check for the header files
@@ -1985,10 +1992,18 @@
         # Add the Tcl/Tk libraries
         libs.append('tk'+ version)
         libs.append('tcl'+ version)
+        libs.append('tk'+ version + tcltk_suffix)
+        libs.append('tcl'+ version + tcltk_suffix)
+        if MS_WINDOWS:
+            for winlib in ['ws2_32','gdi32','comctl32','comdlg32','imm32','uuid','oleaut32','ole32']:
+                libs.append( winlib )
 
         # Finally, link with the X11 libraries (not appropriate on cygwin)
-        if not CYGWIN:
+        # ...on those platforms, define STATIC_BUILD if linking to static tcl/tk.
+        if not CYGWIN and not MS_WINDOWS:
             libs.append('X11')
+        elif tcllib.endswith('s.a'):
+            defs.append( ('STATIC_BUILD',1) )
 
         # XXX handle these, but how to detect?
         # *** Uncomment and edit for PIL (TkImaging) extension only:
