]> granicus.if.org Git - python/commitdiff
Merged revisions 80185 via svnmerge from
authorRonald Oussoren <ronaldoussoren@mac.com>
Sun, 18 Apr 2010 15:25:17 +0000 (15:25 +0000)
committerRonald Oussoren <ronaldoussoren@mac.com>
Sun, 18 Apr 2010 15:25:17 +0000 (15:25 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r80185 | ronald.oussoren | 2010-04-18 17:24:17 +0200 (Sun, 18 Apr 2010) | 12 lines

  Merged revisions 80179 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r80179 | ronald.oussoren | 2010-04-18 16:01:05 +0200 (Sun, 18 Apr 2010) | 5 lines

    Add check to build-installer.py to ensure that
    the right version of Tcl/Tk is available (on OSX)

    Fixes issue #5651
  ........
................

Mac/BuildScript/build-installer.py

index 8f58dbbdac986a1bf806c3e603639c2a96a6f7de..ec7b8c39e372ea97d56c2e84ca9ff418c606116c 100755 (executable)
@@ -377,6 +377,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.
@@ -392,6 +409,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):
@@ -1084,6 +1133,8 @@ def main():
         shutil.rmtree(WORKDIR)
     os.mkdir(WORKDIR)
 
+    os.environ['LC_ALL'] = 'C'
+
     # Then build third-party libraries such as sleepycat DB4.
     buildLibraries()