Ensure that the Makefile variable expansion

in distutils.sysconfig matches that in the
toplevel sysconfig module.

Without this patch universal builds on OSX are
broken.

Als add a test that checks that the two version
of get_config_vars agree on important values.
This commit is contained in:
Ronald Oussoren 2010-07-23 09:43:17 +00:00
parent 599b65deca
commit e8d252dbcb
2 changed files with 32 additions and 0 deletions

View File

@ -300,6 +300,12 @@ def parse_makefile(fn, g=None):
else:
done[n] = v
# Variables with a 'PY_' prefix in the makefile. These need to
# be made available without that prefix through sysconfig.
# Special care is needed to ensure that variable expansion works, even
# if the expansion uses the name without a prefix.
renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS')
# do variable interpolation here
while notdone:
for name in list(notdone):
@ -316,6 +322,16 @@ def parse_makefile(fn, g=None):
elif n in os.environ:
# do it like make: fall back to environment
item = os.environ[n]
elif n in renamed_variables:
if name.startswith('PY_') and name[3:] in renamed_variables:
item = ""
elif 'PY_' + n in notdone:
found = False
else:
item = str(done['PY_' + n])
else:
done[n] = item = ""
if found:
@ -330,6 +346,13 @@ def parse_makefile(fn, g=None):
else:
done[name] = value
del notdone[name]
if name.startswith('PY_') \
and name[3:] in renamed_variables:
name = name[3:]
if name not in done:
done[name] = value
else:
# bogus variable reference; just drop it since we can't deal
del notdone[name]

View File

@ -93,6 +93,15 @@ class SysconfigTestCase(support.EnvironGuard,
'OTHER': 'foo'})
def test_sysconfig_module(self):
import sysconfig as global_sysconfig
self.assertEquals(global_sysconfig.get_config_var('CFLAGS'), sysconfig.get_config_var('CFLAGS'))
self.assertEquals(global_sysconfig.get_config_var('LDFLAGS'), sysconfig.get_config_var('LDFLAGS'))
self.assertEquals(global_sysconfig.get_config_var('LDSHARED'),sysconfig.get_config_var('LDSHARED'))
self.assertEquals(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC'))
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(SysconfigTestCase))