Issue #15663: Tcl/Tk 8.5.14 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:
Ned Deily 2013-09-06 01:18:36 -07:00
parent d819b931f3
commit 981b69318d
5 changed files with 155 additions and 27 deletions

View File

@ -57,13 +57,42 @@ 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.14
* Tk 8.5.14
* 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.4 alpha2, this installer now includes its own
private copy of Tcl and Tk 8.5.14 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. Because this
is a new feature, it should be considered somewhat experimental and
subject to change prior to the final release of Python 3.4. 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.4)::
sudo bash
cd /Library/Frameworks/Python.framework/Versions/3.4
cd ./lib/python3.4/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.4
cd ./lib/python3.4/lib-dynload
cp -p _tkinter.so.private _tkinter.so
exit
- recommended build environment: - recommended build environment:
@ -82,7 +111,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.

View File

@ -192,6 +192,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.14",
url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tcl8.5.14-src.tar.gz",
checksum='44b50e58ab45dd272f6714dce2129123',
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.14",
url="ftp://ftp.tcl.tk/pub/tcl//tcl8_5/tk8.5.14-src.tar.gz",
checksum='a9c48921b3688020470cd3a6dd4e867d',
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(
@ -525,6 +563,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']
@ -633,13 +685,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')
@ -903,6 +961,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)))

View File

@ -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,40 @@ 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
================================================================
Beginning with Python 3.4 alpha2, 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.
Since this is a new feature, it should be considered somewhat
experimental and subject to change prior to the final release of
Python 3.4. Please report any problems found to the Python bug
tracker at http://bugs.python.org.
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 +61,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.

View File

@ -1,7 +1,7 @@
{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470 {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf390
{\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 Beginning with Python 3.4 alpha 2, 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.}

View File

@ -225,6 +225,11 @@ Build
- Issue #1584: Provide configure options to override default search paths for - Issue #1584: Provide configure 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.14 is now included with the OS X 10.6+ 64-/32-bit
installer. 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.
Tools/Demos Tools/Demos
----------- -----------