mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #15663: Tcl/Tk 8.5.15 is now included with the OS X 10.6+
64-bit/32-bit installer for 10.6+. It is no longer necessary to install a third-party version of Tcl/Tk 8.5 to work around the problems in the Apple-supplied Tcl/Tk 8.5 shipped in OS X 10.6 and later releases.
This commit is contained in:
		
							parent
							
								
									65657c27fa
								
							
						
					
					
						commit
						5b3582c919
					
				
					 5 changed files with 150 additions and 27 deletions
				
			
		|  | @ -57,13 +57,40 @@ for each release. | ||||||
| 
 | 
 | ||||||
|         * NCurses 5.9 (http://bugs.python.org/issue15037) |         * NCurses 5.9 (http://bugs.python.org/issue15037) | ||||||
|         * SQLite 3.7.13 |         * SQLite 3.7.13 | ||||||
|  |         * Tcl 8.5.15 | ||||||
|  |         * Tk 8.5.15 | ||||||
|         * XZ 5.0.3 |         * XZ 5.0.3 | ||||||
| 
 | 
 | ||||||
|     - uses system-supplied versions of third-party libraries |     - uses system-supplied versions of third-party libraries | ||||||
| 
 | 
 | ||||||
|         * readline module links with Apple BSD editline (libedit) |         * readline module links with Apple BSD editline (libedit) | ||||||
| 
 | 
 | ||||||
|     - requires ActiveState Tcl/Tk 8.5.9 (or later) to be installed for building |     - requires ActiveState Tcl/Tk 8.5.14 (or later) to be installed for building | ||||||
|  | 
 | ||||||
|  |         * Beginning with Python 3.3.3, this installer now includes its own | ||||||
|  |           private copy of Tcl and Tk 8.5.15 libraries and thus is no longer | ||||||
|  |           dependent on the buggy releases of Aqua Cocoa Tk 8.5 shipped with | ||||||
|  |           OS X 10.6 or on installing a newer third-party version of Tcl/Tk | ||||||
|  |           in /Library/Frameworks, such as from ActiveState.  If it is | ||||||
|  |           necessary to fallback to using a third-party Tcl/Tk because of | ||||||
|  |           a problem with the private Tcl/Tk, there is a backup version of | ||||||
|  |           the _tkinter extension included which will dynamically link to | ||||||
|  |           Tcl and Tk frameworks in /Library/Frameworks as in previous releases. | ||||||
|  |           To enable (for all users of this Python 3.3):: | ||||||
|  | 
 | ||||||
|  |               sudo bash | ||||||
|  |               cd /Library/Frameworks/Python.framework/Versions/3.3 | ||||||
|  |               cd ./lib/python3.3/lib-dynload | ||||||
|  |               cp -p _tkinter.so.framework _tkinter.so | ||||||
|  |               exit | ||||||
|  | 
 | ||||||
|  |           To restore using Python's private versions of Tcl and Tk:: | ||||||
|  | 
 | ||||||
|  |               sudo bash | ||||||
|  |               cd /Library/Frameworks/Python.framework/Versions/3.3 | ||||||
|  |               cd ./lib/python3.3/lib-dynload | ||||||
|  |               cp -p _tkinter.so.private _tkinter.so | ||||||
|  |               exit | ||||||
| 
 | 
 | ||||||
|     - recommended build environment: |     - recommended build environment: | ||||||
| 
 | 
 | ||||||
|  | @ -82,7 +109,7 @@ for each release. | ||||||
|           considered a migration aid by Apple and is not likely to be fixed, |           considered a migration aid by Apple and is not likely to be fixed, | ||||||
|           its use should be avoided.  The other compiler, ``clang``, has been |           its use should be avoided.  The other compiler, ``clang``, has been | ||||||
|           undergoing rapid development.  While it appears to have become |           undergoing rapid development.  While it appears to have become | ||||||
|           production-ready in the most recent Xcode 4 releases (Xcode 4.4.1 |           production-ready in the most recent Xcode 4 releases (Xcode 4.6.3 | ||||||
|           as of this writing), there are still some open issues when |           as of this writing), there are still some open issues when | ||||||
|           building Python and there has not yet been the level of exposure in |           building Python and there has not yet been the level of exposure in | ||||||
|           production environments that the Xcode 3 gcc-4.2 compiler has had. |           production environments that the Xcode 3 gcc-4.2 compiler has had. | ||||||
|  |  | ||||||
|  | @ -193,6 +193,44 @@ def library_recipes(): | ||||||
| 
 | 
 | ||||||
|     LT_10_5 = bool(DEPTARGET < '10.5') |     LT_10_5 = bool(DEPTARGET < '10.5') | ||||||
| 
 | 
 | ||||||
|  |     if DEPTARGET > '10.5': | ||||||
|  |         result.extend([ | ||||||
|  |           dict( | ||||||
|  |               name="Tcl 8.5.15", | ||||||
|  |               url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tcl8.5.15-src.tar.gz", | ||||||
|  |               checksum='f3df162f92c69b254079c4d0af7a690f', | ||||||
|  |               buildDir="unix", | ||||||
|  |               configure_pre=[ | ||||||
|  |                     '--enable-shared', | ||||||
|  |                     '--enable-threads', | ||||||
|  |                     '--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib'%(getVersion(),), | ||||||
|  |               ], | ||||||
|  |               useLDFlags=False, | ||||||
|  |               install='make TCL_LIBRARY=%(TCL_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s DESTDIR=%(DESTDIR)s'%{ | ||||||
|  |                   "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')), | ||||||
|  |                   "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.5'%(getVersion())), | ||||||
|  |                   }, | ||||||
|  |               ), | ||||||
|  |           dict( | ||||||
|  |               name="Tk 8.5.15", | ||||||
|  |               url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tk8.5.15-src.tar.gz", | ||||||
|  |               checksum='55b8e33f903210a4e1c8bce0f820657f', | ||||||
|  |               buildDir="unix", | ||||||
|  |               configure_pre=[ | ||||||
|  |                     '--enable-aqua', | ||||||
|  |                     '--enable-shared', | ||||||
|  |                     '--enable-threads', | ||||||
|  |                     '--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib'%(getVersion(),), | ||||||
|  |               ], | ||||||
|  |               useLDFlags=False, | ||||||
|  |               install='make TCL_LIBRARY=%(TCL_LIBRARY)s TK_LIBRARY=%(TK_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s TK_LIBRARY=%(TK_LIBRARY)s DESTDIR=%(DESTDIR)s'%{ | ||||||
|  |                   "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')), | ||||||
|  |                   "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.5'%(getVersion())), | ||||||
|  |                   "TK_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tk8.5'%(getVersion())), | ||||||
|  |                   }, | ||||||
|  |                 ), | ||||||
|  |         ]) | ||||||
|  | 
 | ||||||
|     if getVersionTuple() >= (3, 3): |     if getVersionTuple() >= (3, 3): | ||||||
|         result.extend([ |         result.extend([ | ||||||
|           dict( |           dict( | ||||||
|  | @ -526,6 +564,20 @@ def checkEnvironment(): | ||||||
|                 % frameworks['Tk'], |                 % frameworks['Tk'], | ||||||
|             ] |             ] | ||||||
| 
 | 
 | ||||||
|  |     # For 10.6+ builds, we build two versions of _tkinter: | ||||||
|  |     #    - the traditional version (renamed to _tkinter.so.framework) linked | ||||||
|  |     #       with /Library/Frameworks/{Tcl,Tk}.framework | ||||||
|  |     #    - the default version linked with our private copies of Tcl and Tk | ||||||
|  |     if DEPTARGET > '10.5': | ||||||
|  |         EXPECTED_SHARED_LIBS['_tkinter.so.framework'] = \ | ||||||
|  |             EXPECTED_SHARED_LIBS['_tkinter.so'] | ||||||
|  |         EXPECTED_SHARED_LIBS['_tkinter.so'] = [ | ||||||
|  |                 "/Library/Frameworks/Python.framework/Versions/%s/lib/libtcl%s.dylib" | ||||||
|  |                     % (getVersion(), frameworks['Tcl']), | ||||||
|  |                 "/Library/Frameworks/Python.framework/Versions/%s/lib/libtk%s.dylib" | ||||||
|  |                     % (getVersion(), frameworks['Tk']), | ||||||
|  |                 ] | ||||||
|  | 
 | ||||||
|     # Remove inherited environment variables which might influence build |     # Remove inherited environment variables which might influence build | ||||||
|     environ_var_prefixes = ['CPATH', 'C_INCLUDE_', 'DYLD_', 'LANG', 'LC_', |     environ_var_prefixes = ['CPATH', 'C_INCLUDE_', 'DYLD_', 'LANG', 'LC_', | ||||||
|                             'LD_', 'LIBRARY_', 'PATH', 'PYTHON'] |                             'LD_', 'LIBRARY_', 'PATH', 'PYTHON'] | ||||||
|  | @ -634,13 +686,19 @@ def extractArchive(builddir, archiveName): | ||||||
| 
 | 
 | ||||||
|     XXX: This function assumes that archives contain a toplevel directory |     XXX: This function assumes that archives contain a toplevel directory | ||||||
|     that is has the same name as the basename of the archive. This is |     that is has the same name as the basename of the archive. This is | ||||||
|     save enough for anything we use. |     safe enough for almost anything we use.  Unfortunately, it does not | ||||||
|  |     work for current Tcl and Tk source releases where the basename of | ||||||
|  |     the archive ends with "-src" but the uncompressed directory does not. | ||||||
|  |     For now, just special case Tcl and Tk tar.gz downloads. | ||||||
|     """ |     """ | ||||||
|     curdir = os.getcwd() |     curdir = os.getcwd() | ||||||
|     try: |     try: | ||||||
|         os.chdir(builddir) |         os.chdir(builddir) | ||||||
|         if archiveName.endswith('.tar.gz'): |         if archiveName.endswith('.tar.gz'): | ||||||
|             retval = os.path.basename(archiveName[:-7]) |             retval = os.path.basename(archiveName[:-7]) | ||||||
|  |             if ((retval.startswith('tcl') or retval.startswith('tk')) | ||||||
|  |                     and retval.endswith('-src')): | ||||||
|  |                 retval = retval[:-4] | ||||||
|             if os.path.exists(retval): |             if os.path.exists(retval): | ||||||
|                 shutil.rmtree(retval) |                 shutil.rmtree(retval) | ||||||
|             fp = os.popen("tar zxf %s 2>&1"%(shellQuote(archiveName),), 'r') |             fp = os.popen("tar zxf %s 2>&1"%(shellQuote(archiveName),), 'r') | ||||||
|  | @ -904,6 +962,23 @@ def buildPython(): | ||||||
|     print("Running make") |     print("Running make") | ||||||
|     runCommand("make") |     runCommand("make") | ||||||
| 
 | 
 | ||||||
|  |     # For deployment targets of 10.6 and higher, we build our own version | ||||||
|  |     # of Tcl and Cocoa Aqua Tk libs because the Apple-supplied Tk 8.5 is | ||||||
|  |     # out-of-date and has critical bugs.  Save the _tkinter.so that was | ||||||
|  |     # linked with /Library/Frameworks/{Tck,Tk}.framework and build | ||||||
|  |     # another _tkinter.so linked with our private Tcl and Tk libs. | ||||||
|  |     if DEPTARGET > '10.5': | ||||||
|  |         runCommand("find build -name '_tkinter.so' " | ||||||
|  |                         " -execdir mv '{}' '{}'.framework \;") | ||||||
|  |         print("Running make to rebuild _tkinter") | ||||||
|  |         runCommand("make TCLTK_INCLUDES='-I%s/libraries/usr/local/include' " | ||||||
|  |                 "TCLTK_LIBS='-L%s/libraries/usr/local/lib -ltcl8.5 -ltk8.5'"%( | ||||||
|  |             shellQuote(WORKDIR)[1:-1], | ||||||
|  |             shellQuote(WORKDIR)[1:-1])) | ||||||
|  |         # make a backup copy, just in case | ||||||
|  |         runCommand("find build -name '_tkinter.so' " | ||||||
|  |                         " -execdir cp -p '{}' '{}'.private \;") | ||||||
|  | 
 | ||||||
|     print("Running make install") |     print("Running make install") | ||||||
|     runCommand("make install DESTDIR=%s"%( |     runCommand("make install DESTDIR=%s"%( | ||||||
|         shellQuote(rootDir))) |         shellQuote(rootDir))) | ||||||
|  |  | ||||||
|  | @ -2,10 +2,12 @@ This package will install Python $FULL_VERSION for Mac OS X | ||||||
| $MACOSX_DEPLOYMENT_TARGET for the following architecture(s): | $MACOSX_DEPLOYMENT_TARGET for the following architecture(s): | ||||||
| $ARCHITECTURES. | $ARCHITECTURES. | ||||||
| 
 | 
 | ||||||
| Installation requires approximately $INSTALL_SIZE MB of disk space, |                **** IMPORTANT **** | ||||||
| ignore the message that it will take zero bytes. |  | ||||||
| 
 | 
 | ||||||
| If you are attempting to install on an OS X 10.8 system, you may | Installing on OS X 10.8 (Mountain Lion) or later systems | ||||||
|  | ======================================================== | ||||||
|  | 
 | ||||||
|  | If you are attempting to install on an OS X 10.8+ system, you may | ||||||
| see a message that Python can't be installed because it is from an | see a message that Python can't be installed because it is from an | ||||||
| unidentified developer.  This is because this Python installer | unidentified developer.  This is because this Python installer | ||||||
| package is not yet compatible with the Gatekeeper security feature | package is not yet compatible with the Gatekeeper security feature | ||||||
|  | @ -15,22 +17,36 @@ instead of double-clicking, control-click or right click the "Python" | ||||||
| installer package icon.  Then select "Open using ... Installer" from | installer package icon.  Then select "Open using ... Installer" from | ||||||
| the contextual menu that appears. | the contextual menu that appears. | ||||||
| 
 | 
 | ||||||
|  |        **** IMPORTANT changes if you use IDLE and Tkinter **** | ||||||
|  | 
 | ||||||
|  | Installing a third-party version of Tcl/Tk is no longer required | ||||||
|  | ================================================================ | ||||||
|  | 
 | ||||||
|  | As of Python 3.3.3, the 10.6+ 64-bit installer now | ||||||
|  | comes with its own private copy of Tcl and Tk 8.5 libraries.  For | ||||||
|  | this version of Python, it is no longer necessary to install | ||||||
|  | a third-party version of Tcl/Tk 8.5, such as those from ActiveState, | ||||||
|  | to work around the problematic versions of Tcl/Tk 8.5 shipped by | ||||||
|  | Apple in OS X 10.6 and later.  (This does not change the requirements | ||||||
|  | for older versions of Python installed from python.org.)  By default, | ||||||
|  | this version of Python will always use its own private version, | ||||||
|  | regardless of whether a third-party Tcl/Tk is installed. | ||||||
|  | The 10.5+ 32-bit-only installer continues to use Tcl/Tk 8.4, | ||||||
|  | either a third-party or system-supplied version. | ||||||
|  | 
 | ||||||
|  | Visit http://www.python.org/download/mac/tcltk/ | ||||||
|  | for current information about supported and recommended versions of | ||||||
|  | Tcl/Tk for this version of Python and of Mac OS X. | ||||||
|  | 
 | ||||||
|  | Using this version of Python on OS X | ||||||
|  | ==================================== | ||||||
|  | 
 | ||||||
| Python consists of the Python programming language interpreter, plus | Python consists of the Python programming language interpreter, plus | ||||||
| a set of programs to allow easy access to it for Mac users including | a set of programs to allow easy access to it for Mac users including | ||||||
| an integrated development environment, IDLE, plus a set of pre-built | an integrated development environment, IDLE, plus a set of pre-built | ||||||
| extension modules that open up specific Macintosh technologies to | extension modules that open up specific Macintosh technologies to | ||||||
| Python programs. | Python programs. | ||||||
| 
 | 
 | ||||||
|                     **** IMPORTANT **** |  | ||||||
|                      |  | ||||||
| To use IDLE or other programs that use the tkinter graphical user |  | ||||||
| interface toolkit, you may need to install a third-party version of |  | ||||||
| the Tcl/Tk frameworks.  Visit http://www.python.org/download/mac/tcltk/ |  | ||||||
| for current information about supported and recommended versions of |  | ||||||
| Tcl/Tk for this version of Python and of Mac OS X. |  | ||||||
| 
 |  | ||||||
|                     ******************* |  | ||||||
| 
 |  | ||||||
| The installer puts applications, an "Update Shell Profile" command, | The installer puts applications, an "Update Shell Profile" command, | ||||||
| and a link to the optionally installed Python Documentation into the | and a link to the optionally installed Python Documentation into the | ||||||
| "Python $VERSION" subfolder of the system Applications folder, | "Python $VERSION" subfolder of the system Applications folder, | ||||||
|  | @ -41,12 +57,15 @@ well. Double-click on the "Update Shell Profile" command to add the | ||||||
| "bin" directory inside the framework to your shell's search path. | "bin" directory inside the framework to your shell's search path. | ||||||
| 
 | 
 | ||||||
| You must install onto your current boot disk, even though the | You must install onto your current boot disk, even though the | ||||||
| installer does not enforce this, otherwise things will not work. | installer may not enforce this, otherwise things will not work. | ||||||
| 
 | 
 | ||||||
| You can verify the integrity of the disk image file containing the | You can verify the integrity of the disk image file containing the | ||||||
| installer package and this ReadMe file by comparing its md5 checksum | installer package and this ReadMe file by comparing its md5 checksum | ||||||
| and size with the values published on the release page linked at | and size with the values published on the release page linked at | ||||||
| http://www.python.org/download/ | http://www.python.org/download/ | ||||||
| 
 | 
 | ||||||
|  | Installation requires approximately $INSTALL_SIZE MB of disk space, | ||||||
|  | ignore the message that it will take zero bytes. | ||||||
|  | 
 | ||||||
| More information on Python in general can be found at | More information on Python in general can be found at | ||||||
| http://www.python.org. | http://www.python.org. | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 | ||||||
| {\fonttbl\f0\fswiss\fcharset0 Helvetica;} | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} | ||||||
| {\colortbl;\red255\green255\blue255;} | {\colortbl;\red255\green255\blue255;} | ||||||
| \paperw11904\paperh16836\margl1440\margr1440\vieww9640\viewh10620\viewkind0 | \paperw11905\paperh16837\margl1440\margr1440\vieww9640\viewh10620\viewkind0 | ||||||
| \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640 | ||||||
| 
 | 
 | ||||||
| \f0\fs24 \cf0 This package will install  | \f0\fs24 \cf0 This package will install  | ||||||
|  | @ -25,11 +25,7 @@ See the ReadMe file and the Python documentation for more information.\ | ||||||
| \b0  at any time to make $FULL_VERSION the default Python 3 version.  This version can co-exist with other installed versions of Python 3 and Python 2.\ | \b0  at any time to make $FULL_VERSION the default Python 3 version.  This version can co-exist with other installed versions of Python 3 and Python 2.\ | ||||||
| \ | \ | ||||||
| 
 | 
 | ||||||
| \b IMPORTANT: | \b IMPORTANT for users of IDLE and tkinter: | ||||||
| \b0   | \b0  As of Python 3.3.3, it is no longer necessary to install third-party versions of the  | ||||||
| \b IDLE |  | ||||||
| \b0  and other programs using the  |  | ||||||
| \b tkinter |  | ||||||
| \b0  graphical user interface toolkit require specific versions of the  |  | ||||||
| \b Tcl/Tk | \b Tcl/Tk | ||||||
| \b0  platform independent windowing toolkit.  Visit {\field{\*\fldinst{HYPERLINK "http://www.python.org/download/mac/tcltk/"}}{\fldrslt http://www.python.org/download/mac/tcltk/}} for current information on supported and recommended versions of Tcl/Tk for this version of Python and Mac OS X.} | \b0  platform independent windowing toolkit.  Please read the ReadMe file and visit {\field{\*\fldinst{HYPERLINK "http://www.python.org/download/mac/tcltk/"}}{\fldrslt http://www.python.org/download/mac/tcltk/}} for more information on supported and recommended versions of Tcl/Tk for this version of Python and Mac OS X.} | ||||||
|  | @ -595,6 +595,12 @@ Build | ||||||
| - Issue #1584: Provide options to override default search paths for | - Issue #1584: Provide options to override default search paths for | ||||||
|   Tcl and Tk when building _tkinter. |   Tcl and Tk when building _tkinter. | ||||||
| 
 | 
 | ||||||
|  | - Issue #15663: Tcl/Tk 8.5.15 is now included with the OS X 10.6+ | ||||||
|  |   64-bit/32-bit installer for 10.6+.  It is no longer necessary | ||||||
|  |   to install a third-party version of Tcl/Tk 8.5 to work around the | ||||||
|  |   problems in the Apple-supplied Tcl/Tk 8.5 shipped in OS X 10.6 | ||||||
|  |   and later releases. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| What's New in Python 3.3.2? | What's New in Python 3.3.2? | ||||||
| =========================== | =========================== | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ned Deily
						Ned Deily