diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 3e728e0..ddb067d 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -1058,22 +1058,62 @@
     # the end-users system. Also remove the directories from _sysconfigdata.py
     # (added in 3.3) if it exists.
 
+    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,))
-    paths = [os.path.join(path_to_lib, 'config' + config_suffix, 'Makefile'),
-             os.path.join(path_to_lib, '_sysconfigdata.py')]
-    for path in paths:
-        if not os.path.exists(path):
-            continue
+
+    # fix Makefile
+    path = os.path.join(path_to_lib, 'config' + config_suffix, 'Makefile')
+    fp = open(path, 'r')
+    data = fp.read()
+    fp.close()
+
+    for p in (include_path, lib_path):
+        data = data.replace(" " + p, '')
+        data = data.replace(p + " ", '')
+
+    fp = open(path, 'w')
+    fp.write(data)
+    fp.close()
+
+    # fix _sysconfigdata if it exists
+    #
+    # TODO: make this more robust!  test_sysconfig_module of
+    # distutils.tests.test_sysconfig.SysconfigTestCase tests that
+    # the output from get_config_var in both sysconfig and
+    # distutils.sysconfig is exactly the same for both CFLAGS and
+    # LDFLAGS.  The fixing up is now complicated by the pretty
+    # printing in _sysconfigdata.py.  Also, we are using the
+    # pprint from the Python running the installer build which
+    # may not cosmetically format the same as the pprint in the Python
+    # being built (and which is used to originally generate
+    # _sysconfigdata.py).
+
+    import pprint
+    path = os.path.join(path_to_lib, '_sysconfigdata.py')
+    if os.path.exists(path):
         fp = open(path, 'r')
         data = fp.read()
         fp.close()
+        # create build_time_vars dict
+        exec(data)
+        vars = {}
+        for k, v in build_time_vars.items():
+            if type(v) == type(''):
+                for p in (include_path, lib_path):
+                    v = v.replace(' ' + p, '')
+                    v = v.replace(p + ' ', '')
+            vars[k] = v
 
-        data = data.replace(' -L%s/libraries/usr/local/lib'%(WORKDIR,), '')
-        data = data.replace(' -I%s/libraries/usr/local/include'%(WORKDIR,), '')
         fp = open(path, 'w')
-        fp.write(data)
+        # duplicated from sysconfig._generate_posix_vars()
+        fp.write('# system configuration generated and used by'
+                    ' the sysconfig module\n')
+        fp.write('build_time_vars = ')
+        pprint.pprint(vars, stream=fp)
         fp.close()
 
     # Add symlinks in /usr/local/bin, using relative links
