3 # Delay import _tkinter until we have set TCL_LIBRARY,
4 # so that Tcl_FindExecutable has a chance to locate its
7 # Unfortunately, we cannot know the TCL_LIBRARY directory
8 # if we don't know the tcl version, which we cannot find out
9 # without import Tcl. Fortunately, Tcl will itself look in
10 # <TCL_LIBRARY>\..\tcl<TCL_VERSION>, so anything close to
11 # the real Tcl library will do.
13 # Expand symbolic links on Vista
16 ctypes
.windll
.kernel32
.GetFinalPathNameByHandleW
17 except (ImportError, AttributeError):
22 if isinstance(s
, str):
24 hdir
= ctypes
.windll
.kernel32
.\
25 CreateFileW(s
, 0x80, # FILE_READ_ATTRIBUTES
27 None, 3, # OPEN_EXISTING
28 0x02000000, # FILE_FLAG_BACKUP_SEMANTICS
31 # Cannot open directory, give up
33 buf
= ctypes
.create_unicode_buffer(u
"", 32768)
34 res
= ctypes
.windll
.kernel32
.\
35 GetFinalPathNameByHandleW(hdir
, buf
, len(buf
),
37 ctypes
.windll
.kernel32
.CloseHandle(hdir
)
39 # Conversion failed (e.g. network location)
43 if s
.startswith(u
"\\\\?\\"):
47 prefix
= os
.path
.join(sys
.prefix
,"tcl")
48 if not os
.path
.exists(prefix
):
50 prefix
= os
.path
.join(sys
.prefix
, os
.path
.pardir
, "tcltk", "lib")
51 prefix
= os
.path
.abspath(prefix
)
52 # if this does not exist, no further search is needed
53 if os
.path
.exists(prefix
):
54 prefix
= convert_path(prefix
)
55 if "TCL_LIBRARY" not in os
.environ
:
56 for name
in os
.listdir(prefix
):
57 if name
.startswith("tcl"):
58 tcldir
= os
.path
.join(prefix
,name
)
59 if os
.path
.isdir(tcldir
):
60 os
.environ
["TCL_LIBRARY"] = tcldir
61 # Compute TK_LIBRARY, knowing that it has the same version
64 ver
= str(_tkinter
.TCL_VERSION
)
65 if "TK_LIBRARY" not in os
.environ
:
66 v
= os
.path
.join(prefix
, 'tk'+ver
)
67 if os
.path
.exists(os
.path
.join(v
, "tclIndex")):
68 os
.environ
['TK_LIBRARY'] = v
69 # We don't know the Tix version, so we must search the entire
71 if "TIX_LIBRARY" not in os
.environ
:
72 for name
in os
.listdir(prefix
):
73 if name
.startswith("tix"):
74 tixdir
= os
.path
.join(prefix
,name
)
75 if os
.path
.isdir(tixdir
):
76 os
.environ
["TIX_LIBRARY"] = tixdir