diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 740e45e..b077114 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -365,6 +365,23 @@
 
     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.
@@ -380,6 +397,38 @@
         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):
@@ -1066,6 +1115,8 @@
         shutil.rmtree(WORKDIR)
     os.mkdir(WORKDIR)
 
+    os.environ['LC_ALL'] = 'C'
+
     # Then build third-party libraries such as sleepycat DB4.
     buildLibraries()
 
