home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Bureautique / OpenOffice / Apache_OpenOffice_4.1.1_Win_x86_install_fr.exe / openoffice1.cab / FixTk.py < prev    next >
Text File  |  2014-07-29  |  3KB  |  79 lines

  1. import sys, os
  2.  
  3. # Delay import _tkinter until we have set TCL_LIBRARY,
  4. # so that Tcl_FindExecutable has a chance to locate its
  5. # encoding directory.
  6.  
  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.
  12.  
  13. # Expand symbolic links on Vista
  14. try:
  15.     import ctypes
  16.     ctypes.windll.kernel32.GetFinalPathNameByHandleW
  17. except (ImportError, AttributeError):
  18.     def convert_path(s):
  19.         return s
  20. else:
  21.     def convert_path(s):
  22.         assert isinstance(s, str)   # sys.prefix contains only bytes
  23.         udir = s.decode("mbcs")
  24.         hdir = ctypes.windll.kernel32.\
  25.             CreateFileW(udir, 0x80, # FILE_READ_ATTRIBUTES
  26.                         1,          # FILE_SHARE_READ
  27.                         None, 3,    # OPEN_EXISTING
  28.                         0x02000000, # FILE_FLAG_BACKUP_SEMANTICS
  29.                         None)
  30.         if hdir == -1:
  31.             # Cannot open directory, give up
  32.             return s
  33.         buf = ctypes.create_unicode_buffer(u"", 32768)
  34.         res = ctypes.windll.kernel32.\
  35.             GetFinalPathNameByHandleW(hdir, buf, len(buf),
  36.                                       0) # VOLUME_NAME_DOS
  37.         ctypes.windll.kernel32.CloseHandle(hdir)
  38.         if res == 0:
  39.             # Conversion failed (e.g. network location)
  40.             return s
  41.         s = buf[:res].encode("mbcs")
  42.         # Ignore leading \\?\
  43.         if s.startswith("\\\\?\\"):
  44.             s = s[4:]
  45.         if s.startswith("UNC"):
  46.             s = "\\" + s[3:]
  47.         return s
  48.  
  49. prefix = os.path.join(sys.prefix,"tcl")
  50. if not os.path.exists(prefix):
  51.     # devdir/../tcltk/lib
  52.     prefix = os.path.join(sys.prefix, os.path.pardir, "tcltk", "lib")
  53.     prefix = os.path.abspath(prefix)
  54. # if this does not exist, no further search is needed
  55. if os.path.exists(prefix):
  56.     prefix = convert_path(prefix)
  57.     if "TCL_LIBRARY" not in os.environ:
  58.         for name in os.listdir(prefix):
  59.             if name.startswith("tcl"):
  60.                 tcldir = os.path.join(prefix,name)
  61.                 if os.path.isdir(tcldir):
  62.                     os.environ["TCL_LIBRARY"] = tcldir
  63.     # Compute TK_LIBRARY, knowing that it has the same version
  64.     # as Tcl
  65.     import _tkinter
  66.     ver = str(_tkinter.TCL_VERSION)
  67.     if "TK_LIBRARY" not in os.environ:
  68.         v = os.path.join(prefix, 'tk'+ver)
  69.         if os.path.exists(os.path.join(v, "tclIndex")):
  70.             os.environ['TK_LIBRARY'] = v
  71.     # We don't know the Tix version, so we must search the entire
  72.     # directory
  73.     if "TIX_LIBRARY" not in os.environ:
  74.         for name in os.listdir(prefix):
  75.             if name.startswith("tix"):
  76.                 tixdir = os.path.join(prefix,name)
  77.                 if os.path.isdir(tixdir):
  78.                     os.environ["TIX_LIBRARY"] = tixdir
  79.