Add check to build-installer.py to ensure that

the right version of Tcl/Tk is available (on OSX)

Fixes issue #5651
This commit is contained in:
Ronald Oussoren 2010-04-18 14:01:05 +00:00
parent 37805e5c1f
commit 287128aadc
1 changed files with 51 additions and 0 deletions

View File

@ -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()