diff options
author | Jason Tishler <jason@tishler.net> | 2002-12-31 20:30:46 (GMT) |
---|---|---|
committer | Jason Tishler <jason@tishler.net> | 2002-12-31 20:30:46 (GMT) |
commit | bbe8961698de3a4e3e17512b6e88e9d7fcd52d4e (patch) | |
tree | 23db603f8eb14d8818ef01e03a38705c0cc5ed56 | |
parent | 8f1f8f13e4046bdb1eb0e4d7d54fe9b345e78ac0 (diff) | |
download | cpython-bbe8961698de3a4e3e17512b6e88e9d7fcd52d4e.zip cpython-bbe8961698de3a4e3e17512b6e88e9d7fcd52d4e.tar.gz cpython-bbe8961698de3a4e3e17512b6e88e9d7fcd52d4e.tar.bz2 |
Patch #660485: Cygwin _tkinter Tcl/Tk 8.3 patch
The attached patch enables Cygwin Python to
build cleanly against the latest Cygwin Tcl/Tk
which is based on Tcl/Tk 8.3. It also prevents
building against the real X headers, if installed.
-rw-r--r-- | Modules/_tkinter.c | 6 | ||||
-rw-r--r-- | setup.py | 26 |
2 files changed, 19 insertions, 13 deletions
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 0c3d088..212bbad 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -57,9 +57,10 @@ Copyright (C) 1994 Steen Lumholt. #include <tk.h> #endif -/* For Tcl 8.2 and 8.3, CONST* is not defined. */ +/* For Tcl 8.2 and 8.3, CONST* is not defined (except on Cygwin). */ #ifndef CONST84_RETURN #define CONST84_RETURN +#undef CONST #define CONST #endif @@ -752,7 +753,7 @@ statichere PyTypeObject PyTclObject_Type = { 0, /*tp_hash*/ 0, /*tp_call*/ (reprfunc)PyTclObject_str, /*tp_str*/ - PyObject_GenericGetAttr,/*tp_getattro*/ + 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ @@ -2838,6 +2839,7 @@ init_tkinter(void) PyDict_SetItemString(d, "TkttType", (PyObject *)&Tktt_Type); PyTclObject_Type.ob_type = &PyType_Type; + PyTclObject_Type.tp_getattro = &PyObject_GenericGetAttr; PyDict_SetItemString(d, "Tcl_Obj", (PyObject *)&PyTclObject_Type); #ifdef TK_AQUA @@ -887,6 +887,12 @@ class PyBuildExt(build_ext): self.detect_tkinter_darwin(inc_dirs, lib_dirs): return + # Set platform specific library prefix, if any + if platform == 'cygwin': + lib_prefix = 'cyg' + else: + lib_prefix = '' + # Assume we haven't found any of the libraries or include files # The versions with dots are used on Unix, and the versions without # dots on Windows, for detection by cygwin. @@ -894,9 +900,9 @@ class PyBuildExt(build_ext): for version in ['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 ) + lib_prefix + 'tk' + version) tcllib = self.compiler.find_library_file(lib_dirs, - 'tcl' + version ) + lib_prefix + 'tcl' + version) if tklib and tcllib: # Exit the loop when we've found the Tcl/Tk libraries break @@ -927,6 +933,11 @@ class PyBuildExt(build_ext): if platform == 'sunos5': include_dirs.append('/usr/openwin/include') added_lib_dirs.append('/usr/openwin/lib') + elif platform == 'cygwin': + # Verify that the pseudo-X headers are installed before proceeding + x11_inc = find_file('X11/Xlib.h', [], inc_dirs) + if x11_inc is None: + return elif os.path.exists('/usr/X11R6/include'): include_dirs.append('/usr/X11R6/include') added_lib_dirs.append('/usr/X11R6/lib') @@ -938,13 +949,6 @@ class PyBuildExt(build_ext): include_dirs.append('/usr/X11/include') added_lib_dirs.append('/usr/X11/lib') - # If Cygwin, then verify that X is installed before proceeding - if platform == 'cygwin': - x11_inc = find_file('X11/Xlib.h', [], inc_dirs) - if x11_inc is None: - # X header files missing, so give up - return - # Check for BLT extension if self.compiler.find_library_file(lib_dirs + added_lib_dirs, 'BLT8.0'): @@ -956,8 +960,8 @@ class PyBuildExt(build_ext): libs.append('BLT') # Add the Tcl/Tk libraries - libs.append('tk'+version) - libs.append('tcl'+version) + libs.append(lib_prefix + 'tk'+ version) + libs.append(lib_prefix + 'tcl'+ version) if platform in ['aix3', 'aix4']: libs.append('ld') |