Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.4.0b1.

This commit is contained in:
Ned Deily 2013-11-23 03:30:11 -08:00
parent 2427b50fdd
commit aa6a212a4e
5 changed files with 25 additions and 122 deletions

View File

@ -57,8 +57,6 @@ for each release.
* NCurses 5.9 (http://bugs.python.org/issue15037) * NCurses 5.9 (http://bugs.python.org/issue15037)
* SQLite 3.8.1 * SQLite 3.8.1
* Tcl 8.5.15
* Tk 8.5.15
* XZ 5.0.5 * XZ 5.0.5
- uses system-supplied versions of third-party libraries - uses system-supplied versions of third-party libraries
@ -67,33 +65,6 @@ for each release.
- requires ActiveState Tcl/Tk 8.5.15 (or later) to be installed for building - requires ActiveState Tcl/Tk 8.5.15 (or later) to be installed for building
* Beginning with Python 3.4 alpha2, this installer now includes its own
builtin 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. 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 builtin 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
cp -p ./lib-tkinter/library/_tkinter.so ./lib-dynload
exit
To restore using Python's builtin versions of Tcl and Tk::
sudo bash
cd /Library/Frameworks/Python.framework/Versions/3.4
cd ./lib/python3.4
cp -p ./lib-tkinter/builtin/_tkinter.so ./lib-dynload
exit
- recommended build environment: - recommended build environment:
* Mac OS X 10.6.8 (or later) * Mac OS X 10.6.8 (or later)

View File

@ -193,7 +193,8 @@ def library_recipes():
LT_10_5 = bool(DEPTARGET < '10.5') LT_10_5 = bool(DEPTARGET < '10.5')
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): # Disable for now
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 5)):
result.extend([ result.extend([
dict( dict(
name="Tcl 8.5.15", name="Tcl 8.5.15",
@ -586,20 +587,6 @@ def checkEnvironment():
% frameworks['Tk'], % frameworks['Tk'],
] ]
# For 10.6+ builds, we build two versions of _tkinter:
# - the traditional version (renamed to _tkinter_library.so) linked
# with /Library/Frameworks/{Tcl,Tk}.framework
# - the default version linked with our builtin copies of Tcl and Tk
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
EXPECTED_SHARED_LIBS['_tkinter_library.so'] = \
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']
@ -987,23 +974,6 @@ 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 builtin Tcl and Tk libs.
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
runCommand("find build -name '_tkinter.so' "
" -execdir mv '{}' _tkinter_library.so \;")
print("Running make to build builtin _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 copy which will be moved to lib-tkinter later
runCommand("find build -name '_tkinter.so' "
" -execdir cp -p '{}' _tkinter_builtin.so \;")
print("Running make install") print("Running make install")
runCommand("make install DESTDIR=%s"%( runCommand("make install DESTDIR=%s"%(
shellQuote(rootDir))) shellQuote(rootDir)))
@ -1028,27 +998,11 @@ def buildPython():
'Python.framework', 'Versions', 'Python.framework', 'Versions',
version, 'lib', 'python%s'%(version,)) version, 'lib', 'python%s'%(version,))
# If we made multiple versions of _tkinter, move them to
# their own directories under python lib. This allows
# users to select which to import by manipulating sys.path
# directly or with PYTHONPATH.
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
TKINTERS = ['builtin', 'library']
tkinter_moves = [('_tkinter_' + tkn + '.so',
os.path.join(path_to_lib, 'lib-tkinter', tkn))
for tkn in TKINTERS]
# Create the destination directories under lib-tkinter.
# The permissions and uid/gid will be fixed up next.
for tkm in tkinter_moves:
os.makedirs(tkm[1])
print("Fix file modes") print("Fix file modes")
frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework') frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
gid = grp.getgrnam('admin').gr_gid gid = grp.getgrnam('admin').gr_gid
shared_lib_error = False shared_lib_error = False
moves_list = []
for dirpath, dirnames, filenames in os.walk(frmDir): for dirpath, dirnames, filenames in os.walk(frmDir):
for dn in dirnames: for dn in dirnames:
os.chmod(os.path.join(dirpath, dn), STAT_0o775) os.chmod(os.path.join(dirpath, dn), STAT_0o775)
@ -1074,25 +1028,9 @@ def buildPython():
% (sl, p)) % (sl, p))
shared_lib_error = True shared_lib_error = True
# If this is a _tkinter variant, move it to its own directory
# now that we have fixed its permissions and checked that it
# was linked properly. The directory was created earlier.
# The files are moved after the entire tree has been walked
# since the shared library checking depends on the files
# having unique names.
if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)):
for tkm in tkinter_moves:
if fn == tkm[0]:
moves_list.append(
(p, os.path.join(tkm[1], '_tkinter.so')))
if shared_lib_error: if shared_lib_error:
fatal("Unexpected shared library errors.") fatal("Unexpected shared library errors.")
# Now do the moves.
for ml in moves_list:
shutil.move(ml[0], ml[1])
if PYTHON_3: if PYTHON_3:
LDVERSION=None LDVERSION=None
VERSION=None VERSION=None

View File

@ -17,6 +17,17 @@ 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 ****
Update your version of Tcl/Tk to use IDLE or other Tk applications
==================================================================
To use IDLE or other programs that use the Tkinter graphical user
interface toolkit, you may need to install a newer 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.
**NEW* As of Python 3.4.0b1: **NEW* As of Python 3.4.0b1:
New Installation Options and Defaults New Installation Options and Defaults
@ -47,32 +58,6 @@ use pip with Python 2.7.x, you will need to download and install a
separate copy of it from the Python Package Index separate copy of it from the Python Package Index
(https://pypi.python.org/pypi). (https://pypi.python.org/pypi).
**** 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 Using this version of Python on OS X
==================================== ====================================

View File

@ -29,7 +29,11 @@
for an overview. See the ReadMe file and the Python documentation for more information.\ for an overview. See the ReadMe file and the Python documentation for more information.\
\ \
\b IMPORTANT for users of IDLE and tkinter: \b IMPORTANT:
\b0 Beginning with Python 3.4 alpha 2, it is no longer necessary to install third-party versions of the \b0
\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. 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.} \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.}

View File

@ -401,6 +401,11 @@ Build
xz 5.0.3 -> 5.0.5 xz 5.0.3 -> 5.0.5
SQLite 3.7.13 -> 3.8.1 SQLite 3.7.13 -> 3.8.1
- Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.4.0b1.
Some third-party projects, such as Matplotlib and PIL/Pillow,
depended on being able to build with Tcl and Tk frameworks in
/Library/Frameworks.
Tools/Demos Tools/Demos
----------- -----------