summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2010-04-18 14:01:05 (GMT)
committerRonald Oussoren <ronaldoussoren@mac.com>2010-04-18 14:01:05 (GMT)
commit287128aadca2688475576a17d69a56c0cb064d6a (patch)
tree2cfb46c5173ee308ed2cf83fb655005b4db79d2a /Mac
parent37805e5c1f082c753f9088e48dc945afdba29779 (diff)
downloadcpython-287128aadca2688475576a17d69a56c0cb064d6a.zip
cpython-287128aadca2688475576a17d69a56c0cb064d6a.tar.gz
cpython-287128aadca2688475576a17d69a56c0cb064d6a.tar.bz2
Add check to build-installer.py to ensure that
the right version of Tcl/Tk is available (on OSX) Fixes issue #5651
Diffstat (limited to 'Mac')
-rwxr-xr-xMac/BuildScript/build-installer.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 14a3a8e..f120adaa 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -371,6 +371,23 @@ def captureCommand(commandline):
return data
+def getTclTkVersion(configfile, versionline):
+ """
+ search Tcl or Tk configuration file for version line
+ """
+ try:
+ f = open(configfile, "r")
+ except:
+ fatal("Framework configuration file not found: %s" % configfile)
+
+ for l in f:
+ if l.startswith(versionline):
+ f.close()
+ return l
+
+ fatal("Version variable %s not found in framework configuration file: %s"
+ % (versionline, configfile))
+
def checkEnvironment():
"""
Check that we're running on a supported system.
@@ -386,6 +403,38 @@ def checkEnvironment():
fatal("Please install the latest version of Xcode and the %s SDK"%(
os.path.basename(SDKPATH[:-4])))
+ # Because we only support dynamic load of only one major/minor version of
+ # Tcl/Tk, ensure:
+ # 1. there are no user-installed frameworks of Tcl/Tk with version
+ # higher than the Apple-supplied system version
+ # 2. there is a user-installed framework in /Library/Frameworks with the
+ # same version as the system version. This allows users to choose
+ # to install a newer patch level.
+
+ for framework in ['Tcl', 'Tk']:
+ fw = dict(lower=framework.lower(),
+ upper=framework.upper(),
+ cap=framework.capitalize())
+ fwpth = "Library/Frameworks/%(cap)s.framework/%(lower)sConfig.sh" % fw
+ sysfw = os.path.join('/System', fwpth)
+ libfw = os.path.join('/', fwpth)
+ usrfw = os.path.join(os.getenv('HOME'), fwpth)
+ version = "%(upper)s_VERSION" % fw
+ if getTclTkVersion(libfw, version) != getTclTkVersion(sysfw, version):
+ fatal("Version of %s must match %s" % (libfw, sysfw) )
+ if os.path.exists(usrfw):
+ fatal("Please rename %s to avoid possible dynamic load issues."
+ % usrfw)
+
+ # Remove inherited environment variables which might influence build
+ environ_var_prefixes = ['CPATH', 'C_INCLUDE_', 'DYLD_', 'LANG', 'LC_',
+ 'LD_', 'LIBRARY_', 'PATH', 'PYTHON']
+ for ev in list(os.environ):
+ for prefix in environ_var_prefixes:
+ if ev.startswith(prefix) :
+ print "INFO: deleting environment variable %s=%s" % (
+ ev, os.environ[ev])
+ del os.environ[ev]
def parseOptions(args=None):
@@ -1072,6 +1121,8 @@ def main():
shutil.rmtree(WORKDIR)
os.mkdir(WORKDIR)
+ os.environ['LC_ALL'] = 'C'
+
# Then build third-party libraries such as sleepycat DB4.
buildLibraries()