diff -urN a/setup.py b/setup.py
--- a/setup.py	2012-06-24 21:00:44.404442659 +0100
+++ b/setup.py	2012-06-24 21:00:44.607444094 +0100
@@ -504,7 +504,7 @@
         if host_platform in ['osf1', 'unixware7', 'openunix8']:
             lib_dirs += ['/usr/ccs/lib']
 
-        if host_platform == 'darwin':
+        if host_platform in ['darwin', 'mingw', 'win32']:
             # 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.
@@ -514,6 +514,8 @@
             # FIXME: Why LDFLAGS again ?
             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'):
                     inc_dirs.append(item[2:])
@@ -1851,14 +1853,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(lib_dirs,
-                                                        'tk' + version)
-            tcllib = self.compiler.find_library_file(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(lib_dirs,
+                                                            'tk' + version + suffix)
+                tcllib = self.compiler.find_library_file(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
@@ -1927,15 +1934,21 @@
             libs.append('BLT')
 
         # 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 host_platform in ['mingw', 'win32']:
+            for winlib in ['ws2_32','gdi32','comctl32','comdlg32','imm32','uuid','oleaut32','ole32']:
+                libs.append( winlib )
 
         if host_platform in ['aix3', 'aix4']:
             libs.append('ld')
 
         # Finally, link with the X11 libraries (not appropriate on cygwin, mingw)
+        # ...on those platforms, define STATIC_BUILD if linking to static tcl/tk.
         if not host_platform in ['cygwin', 'mingw', 'win32']:
             libs.append('X11')
+        elif tcllib.endswith('s.a'):
+            defs.append( ('STATIC_BUILD',1) )
 
         ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
                         define_macros=[('WITH_APPINIT', 1)] + defs,
