summaryrefslogtreecommitdiffstats
path: root/Mac/BuildScript/build-installer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/BuildScript/build-installer.py')
-rwxr-xr-xMac/BuildScript/build-installer.py56
1 files changed, 44 insertions, 12 deletions
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index ddb067d..69f3ff7 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -565,11 +565,11 @@ def checkEnvironment():
]
# For 10.6+ builds, we build two versions of _tkinter:
- # - the traditional version (renamed to _tkinter.so.framework) linked
+ # - the traditional version (renamed to _tkinter_library.so) linked
# with /Library/Frameworks/{Tcl,Tk}.framework
- # - the default version linked with our private copies of Tcl and Tk
+ # - the default version linked with our builtin copies of Tcl and Tk
if DEPTARGET > '10.5':
- EXPECTED_SHARED_LIBS['_tkinter.so.framework'] = \
+ 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"
@@ -966,18 +966,18 @@ def buildPython():
# 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.
+ # another _tkinter.so linked with our builtin Tcl and Tk libs.
if DEPTARGET > '10.5':
runCommand("find build -name '_tkinter.so' "
- " -execdir mv '{}' '{}'.framework \;")
- print("Running make to rebuild _tkinter")
+ " -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 backup copy, just in case
+ # make a copy which will be moved to lib-tkinter later
runCommand("find build -name '_tkinter.so' "
- " -execdir cp -p '{}' '{}'.private \;")
+ " -execdir cp -p '{}' _tkinter_builtin.so \;")
print("Running make install")
runCommand("make install DESTDIR=%s"%(
@@ -999,11 +999,31 @@ def buildPython():
'Python.framework', 'Versions', getVersion(),
'lib'))))
+ path_to_lib = os.path.join(rootDir, 'Library', 'Frameworks',
+ 'Python.framework', 'Versions',
+ 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':
+ 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")
frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework')
gid = grp.getgrnam('admin').gr_gid
shared_lib_error = False
+ moves_list = []
for dirpath, dirnames, filenames in os.walk(frmDir):
for dn in dirnames:
os.chmod(os.path.join(dirpath, dn), STAT_0o775)
@@ -1029,9 +1049,25 @@ def buildPython():
% (sl, p))
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':
+ for tkm in tkinter_moves:
+ if fn == tkm[0]:
+ moves_list.append(
+ (p, os.path.join(tkm[1], '_tkinter.so')))
+
if shared_lib_error:
fatal("Unexpected shared library errors.")
+ # Now do the moves.
+ for ml in moves_list:
+ shutil.move(ml[0], ml[1])
+
if PYTHON_3:
LDVERSION=None
VERSION=None
@@ -1061,10 +1097,6 @@ def buildPython():
include_path = '-I%s/libraries/usr/local/include' % (WORKDIR,)
lib_path = '-L%s/libraries/usr/local/lib' % (WORKDIR,)
- path_to_lib = os.path.join(rootDir, 'Library', 'Frameworks',
- 'Python.framework', 'Versions',
- version, 'lib', 'python%s'%(version,))
-
# fix Makefile
path = os.path.join(path_to_lib, 'config' + config_suffix, 'Makefile')
fp = open(path, 'r')