| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  | import sys, os | 
					
						
							| 
									
										
										
										
											2001-10-12 15:34:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  | # 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_LIBRARY>\..\tcl<TCL_VERSION>, so anything close to | 
					
						
							|  |  |  | # the real Tcl library will do. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-24 16:19:45 +00:00
										 |  |  | # 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:] | 
					
						
							| 
									
										
										
										
											2010-06-04 19:50:26 +00:00
										 |  |  |         if s.startswith("UNC"): | 
					
						
							|  |  |  |             s = "\\" + s[3:] | 
					
						
							| 
									
										
										
										
											2009-01-24 16:19:45 +00:00
										 |  |  |         return s | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  | prefix = os.path.join(sys.prefix,"tcl") | 
					
						
							| 
									
										
											  
											
												Merged revisions 59541-59561 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59544 | raymond.hettinger | 2007-12-18 01:13:45 +0100 (Tue, 18 Dec 2007) | 1 line
  Add more namedtuple() test cases.  Neaten the code and comments.
........
  r59545 | christian.heimes | 2007-12-18 04:38:03 +0100 (Tue, 18 Dec 2007) | 3 lines
  Fixed for #1601: IDLE not working correctly on Windows (Py30a2/IDLE30a1)
  Amaury's ideas works great. Should we build the Python core with WINVER=0x0500 and _WIN32_WINNT=0x0500, too?
........
  r59546 | christian.heimes | 2007-12-18 10:00:13 +0100 (Tue, 18 Dec 2007) | 1 line
  Make it a bit easier to test Tcl/Tk and idle from a build dir.
........
  r59547 | christian.heimes | 2007-12-18 10:12:10 +0100 (Tue, 18 Dec 2007) | 1 line
  Removed several unused files from the PCbuild9 directory. They are relics from the past.
........
  r59548 | raymond.hettinger | 2007-12-18 19:26:18 +0100 (Tue, 18 Dec 2007) | 29 lines
  Speed-up dictionary constructor by about 10%.
  New opcode, STORE_MAP saves the compiler from awkward stack manipulations
  and specializes for dicts using PyDict_SetItem instead of PyObject_SetItem.
  Old disassembly:
                0 BUILD_MAP                0
                3 DUP_TOP
                4 LOAD_CONST               1 (1)
                7 ROT_TWO
                8 LOAD_CONST               2 ('x')
               11 STORE_SUBSCR
               12 DUP_TOP
               13 LOAD_CONST               3 (2)
               16 ROT_TWO
               17 LOAD_CONST               4 ('y')
               20 STORE_SUBSCR
  New disassembly:
                0 BUILD_MAP                0
                3 LOAD_CONST               1 (1)
                6 LOAD_CONST               2 ('x')
                9 STORE_MAP
               10 LOAD_CONST               3 (2)
               13 LOAD_CONST               4 ('y')
               16 STORE_MAP
........
  r59549 | thomas.heller | 2007-12-18 20:00:34 +0100 (Tue, 18 Dec 2007) | 2 lines
  Issue #1642: Fix segfault in ctypes when trying to delete attributes.
........
  r59551 | guido.van.rossum | 2007-12-18 21:10:42 +0100 (Tue, 18 Dec 2007) | 2 lines
  Issue #1645 by Alberto Bertogli.  Fix a comment.
........
  r59553 | raymond.hettinger | 2007-12-18 22:24:09 +0100 (Tue, 18 Dec 2007) | 12 lines
  Give meaning to the oparg for BUILD_MAP:  estimated size of the dictionary.
  Allows dictionaries to be pre-sized (upto 255 elements) saving time lost
  to re-sizes with their attendant mallocs and re-insertions.
  Has zero effect on small dictionaries (5 elements or fewer), a slight
  benefit for dicts upto 22 elements (because they had to resize once
  anyway), and more benefit for dicts upto 255 elements (saving multiple
  resizes during the build-up and reducing the number of collisions on
  the first insertions).  Beyond 255 elements, there is no addional benefit.
........
  r59554 | christian.heimes | 2007-12-18 22:56:09 +0100 (Tue, 18 Dec 2007) | 1 line
  Fixed #1649: IDLE error: dictionary changed size during iteration
........
  r59557 | raymond.hettinger | 2007-12-18 23:21:27 +0100 (Tue, 18 Dec 2007) | 1 line
  Simplify and speedup _asdict() for named tuples.
........
  r59558 | christian.heimes | 2007-12-19 00:22:54 +0100 (Wed, 19 Dec 2007) | 3 lines
  Applied patch #1635: Float patch for inf and nan on Windows (and other platforms).
  The patch unifies float("inf") and repr(float("inf")) on all platforms.
........
  r59559 | raymond.hettinger | 2007-12-19 00:51:15 +0100 (Wed, 19 Dec 2007) | 1 line
  Users demand iterable input for named tuples. The author capitulates.
........
  r59560 | raymond.hettinger | 2007-12-19 01:21:06 +0100 (Wed, 19 Dec 2007) | 1 line
  Beef-up tests for dict literals
........
  r59561 | raymond.hettinger | 2007-12-19 01:27:21 +0100 (Wed, 19 Dec 2007) | 1 line
  Zap a duplicate line
........
											
										 
											2007-12-19 02:07:34 +00:00
										 |  |  | if not os.path.exists(prefix): | 
					
						
							|  |  |  |     # devdir/../tcltk/lib | 
					
						
							|  |  |  |     prefix = os.path.join(sys.prefix, os.path.pardir, "tcltk", "lib") | 
					
						
							|  |  |  |     prefix = os.path.abspath(prefix) | 
					
						
							| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  | # if this does not exist, no further search is needed | 
					
						
							|  |  |  | if os.path.exists(prefix): | 
					
						
							| 
									
										
										
										
											2009-01-24 16:19:45 +00:00
										 |  |  |     prefix = convert_path(prefix) | 
					
						
							| 
									
										
										
										
											2006-08-19 16:53:45 +00:00
										 |  |  |     if "TCL_LIBRARY" not in os.environ: | 
					
						
							| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2002-11-09 19:01:44 +00:00
										 |  |  |     # Compute TK_LIBRARY, knowing that it has the same version | 
					
						
							|  |  |  |     # as Tcl | 
					
						
							| 
									
										
										
										
											2002-02-24 16:51:45 +00:00
										 |  |  |     import _tkinter | 
					
						
							|  |  |  |     ver = str(_tkinter.TCL_VERSION) | 
					
						
							| 
									
										
										
										
											2006-08-19 16:53:45 +00:00
										 |  |  |     if "TK_LIBRARY" not in os.environ: | 
					
						
							| 
									
										
										
										
											2002-11-09 19:01:44 +00:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2006-08-19 16:53:45 +00:00
										 |  |  |     if "TIX_LIBRARY" not in os.environ: | 
					
						
							| 
									
										
										
										
											2002-11-09 19:01:44 +00:00
										 |  |  |         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 |