diff -r 3f9a81297b39 Lib/test/test_tcl.py --- a/Lib/test/test_tcl.py Thu Mar 27 12:41:53 2014 -0400 +++ b/Lib/test/test_tcl.py Sat Mar 29 16:31:32 2014 -0500 @@ -6,9 +6,6 @@ # Skip this test if the _tkinter module wasn't built. _tkinter = support.import_module('_tkinter') -# Make sure tkinter._fix runs to set up the environment -support.import_fresh_module('tkinter') - from tkinter import Tcl from _tkinter import TclError diff -r 3f9a81297b39 Lib/test/test_tk.py --- a/Lib/test/test_tk.py Thu Mar 27 12:41:53 2014 -0400 +++ b/Lib/test/test_tk.py Sat Mar 29 16:31:32 2014 -0500 @@ -2,9 +2,6 @@ # Skip test if _tkinter wasn't built. support.import_module('_tkinter') -# Make sure tkinter._fix runs to set up the environment -support.import_fresh_module('tkinter') - # Skip test if tk cannot be initialized. from tkinter.test.support import check_tk_availability check_tk_availability() diff -r 3f9a81297b39 Lib/test/test_ttk_guionly.py --- a/Lib/test/test_ttk_guionly.py Thu Mar 27 12:41:53 2014 -0400 +++ b/Lib/test/test_ttk_guionly.py Sat Mar 29 16:31:32 2014 -0500 @@ -5,9 +5,6 @@ # Skip this test if _tkinter wasn't built. support.import_module('_tkinter') -# Make sure tkinter._fix runs to set up the environment -support.import_fresh_module('tkinter') - # Skip test if tk cannot be initialized. from tkinter.test.support import check_tk_availability check_tk_availability() diff -r 3f9a81297b39 Lib/test/test_ttk_textonly.py --- a/Lib/test/test_ttk_textonly.py Thu Mar 27 12:41:53 2014 -0400 +++ b/Lib/test/test_ttk_textonly.py Sat Mar 29 16:31:32 2014 -0500 @@ -4,9 +4,6 @@ # Skip this test if _tkinter does not exist. support.import_module('_tkinter') -# Make sure tkinter._fix runs to set up the environment -support.import_fresh_module('tkinter') - from tkinter.test import runtktests def test_main(): diff -r 3f9a81297b39 Lib/tkinter/__init__.py --- a/Lib/tkinter/__init__.py Thu Mar 27 12:41:53 2014 -0400 +++ b/Lib/tkinter/__init__.py Sat Mar 29 16:31:32 2014 -0500 @@ -31,9 +31,6 @@ """ import sys -if sys.platform == "win32": - # Attempt to configure Tcl/Tk without requiring PATH - from tkinter import _fix import _tkinter # If this fails your Python may not be configured for Tk TclError = _tkinter.TclError diff -r 3f9a81297b39 Lib/tkinter/_fix.py --- a/Lib/tkinter/_fix.py Thu Mar 27 12:41:53 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -import sys, os - -# Delay import _tkinter until we have set TCL_LIBRARY, -# so that Tcl_FindExecutable has a chance to locate its -# encoding directory. - -# Unfortunately, we cannot know the TCL_LIBRARY directory -# if we don't know the tcl version, which we cannot find out -# without import Tcl. Fortunately, Tcl will itself look in -# \..\tcl, so anything close to -# the real Tcl library will do. - -# Expand symbolic links on Vista -try: - import ctypes - ctypes.windll.kernel32.GetFinalPathNameByHandleW -except (ImportError, AttributeError): - def convert_path(s): - return s -else: - def convert_path(s): - if isinstance(s, bytes): - s = s.decode("mbcs") - hdir = ctypes.windll.kernel32.\ - CreateFileW(s, 0x80, # FILE_READ_ATTRIBUTES - 1, # FILE_SHARE_READ - None, 3, # OPEN_EXISTING - 0x02000000, # FILE_FLAG_BACKUP_SEMANTICS - None) - if hdir == -1: - # Cannot open directory, give up - return s - buf = ctypes.create_unicode_buffer("", 32768) - res = ctypes.windll.kernel32.\ - GetFinalPathNameByHandleW(hdir, buf, len(buf), - 0) # VOLUME_NAME_DOS - ctypes.windll.kernel32.CloseHandle(hdir) - if res == 0: - # Conversion failed (e.g. network location) - return s - s = buf[:res] - # Ignore leading \\?\ - if s.startswith("\\\\?\\"): - s = s[4:] - if s.startswith("UNC"): - s = "\\" + s[3:] - return s - -prefix = os.path.join(sys.base_prefix,"tcl") -if not os.path.exists(prefix): - # devdir/../tcltk/lib - prefix = os.path.join(sys.base_prefix, os.path.pardir, "tcltk", "lib") - prefix = os.path.abspath(prefix) -# if this does not exist, no further search is needed -if os.path.exists(prefix): - prefix = convert_path(prefix) - if "TCL_LIBRARY" not in os.environ: - for name in os.listdir(prefix): - if name.startswith("tcl"): - tcldir = os.path.join(prefix,name) - if os.path.isdir(tcldir): - os.environ["TCL_LIBRARY"] = tcldir - # Compute TK_LIBRARY, knowing that it has the same version - # as Tcl - import _tkinter - ver = str(_tkinter.TCL_VERSION) - if "TK_LIBRARY" not in os.environ: - v = os.path.join(prefix, 'tk'+ver) - if os.path.exists(os.path.join(v, "tclIndex")): - os.environ['TK_LIBRARY'] = v - # We don't know the Tix version, so we must search the entire - # directory - if "TIX_LIBRARY" not in os.environ: - for name in os.listdir(prefix): - if name.startswith("tix"): - tixdir = os.path.join(prefix,name) - if os.path.isdir(tixdir): - os.environ["TIX_LIBRARY"] = tixdir diff -r 3f9a81297b39 Modules/_tkinter.c --- a/Modules/_tkinter.c Thu Mar 27 12:41:53 2014 -0400 +++ b/Modules/_tkinter.c Sat Mar 29 16:31:32 2014 -0500 @@ -651,6 +651,58 @@ ckfree(args); } +#ifdef MS_WINDOWS + +#ifdef MS_WIN64 +#define Py_TCLTK_DIR "tcltk64" +#else +#define Py_TCLTK_DIR "tcltk" +#endif + + /* XXX Something to consider: Py_GETENV instead of getenv to respect -E? + Would have to set tk/tix_library as well, though, or just make sure + the TK/TIX_LIBRARY env vars are unset + */ + if (getenv("TCL_LIBRARY") == NULL) { + wchar_t *prefix = Py_GetPrefix(); + size_t prefix_len; + struct _stat stat_buf; + char tcl_library[MAX_PATH + 25]; + int found_lib = 0; + + wcstombs(tcl_library, prefix, wcslen(prefix) + 1); + prefix_len = strlen(tcl_library); + + strcat(tcl_library, "\\tcl\\tcl" TCL_VERSION); + + if (_stat(tcl_library, &stat_buf) == -1) { + /* \tcl\tcl8.6 doesn't exist, reset errno and see if + we're a repository build */ + errno = 0; + tcl_library[prefix_len] = '\0'; + strcat(tcl_library, + "\\..\\" Py_TCLTK_DIR "\\lib\\tcl" TCL_VERSION); + + if (_stat(tcl_library, &stat_buf) == -1) + /* tcltkDir for a repository build doesn't exist either, + reset errno and leave Tcl to its own devices */ + errno = 0; + else + /* looks like we're a repository build */ + found_lib = 1; + } else + /* looks like we're installed */ + found_lib = 1; + + if (found_lib) + Tcl_SetVar(v->interp, + "tcl_library", + tcl_library, + TCL_GLOBAL_ONLY); + } +#undef Py_TCLTK_DIR +#endif /* MS_WINDOWS */ + if (Tcl_AppInit(v->interp) != TCL_OK) { PyObject *result = Tkinter_Error((PyObject *)v); #ifdef TKINTER_PROTECT_LOADTK diff -r 3f9a81297b39 PCbuild/rt.bat --- a/PCbuild/rt.bat Thu Mar 27 12:41:53 2014 -0400 +++ b/PCbuild/rt.bat Sat Mar 29 16:31:32 2014 -0500 @@ -30,15 +30,13 @@ set suffix= set qmode= set dashO= -set tcltk=tcltk :CheckOpts if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts if "%1"=="-d" (set suffix=_d) & shift & goto CheckOpts -if "%1"=="-x64" (set prefix=amd64) & (set tcltk=tcltk64) & shift & goto CheckOpts +if "%1"=="-x64" (set prefix=amd64) & shift & goto CheckOpts -PATH %PATH%;%~dp0..\..\%tcltk%\bin set exe=%prefix%\python%suffix% set cmd=%exe% %dashO% -Wd -E -bb ../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9 if defined qmode goto Qmode