Issue #12070: Fix the Makefile parser of the sysconfig module to handle

correctly references to "bogus variable" (e.g. "prefix=$/opt/python").
This commit is contained in:
Victor Stinner 2011-05-24 23:37:07 +02:00
parent d48ba0bde5
commit 1273b7cd9c
3 changed files with 31 additions and 12 deletions

View file

@ -294,7 +294,7 @@ def _parse_makefile(filename, vars=None):
variables.remove(name) variables.remove(name)
if name.startswith('PY_') \ if name.startswith('PY_') \
and name[3:] in renamed_variables: and name[3:] in renamed_variables:
name = name[3:] name = name[3:]
if name not in done: if name not in done:
@ -302,7 +302,9 @@ def _parse_makefile(filename, vars=None):
else: else:
# bogus variable reference; just drop it since we can't deal # bogus variable reference (e.g. "prefix=$/opt/python");
# just drop it since we can't deal
done[name] = value
variables.remove(name) variables.remove(name)
# strip spurious spaces # strip spurious spaces

View file

@ -26,7 +26,6 @@ class TestSysConfig(unittest.TestCase):
"""Make a copy of sys.path""" """Make a copy of sys.path"""
super(TestSysConfig, self).setUp() super(TestSysConfig, self).setUp()
self.sys_path = sys.path[:] self.sys_path = sys.path[:]
self.makefile = None
# patching os.uname # patching os.uname
if hasattr(os, 'uname'): if hasattr(os, 'uname'):
self.uname = os.uname self.uname = os.uname
@ -49,8 +48,6 @@ class TestSysConfig(unittest.TestCase):
def tearDown(self): def tearDown(self):
"""Restore sys.path""" """Restore sys.path"""
sys.path[:] = self.sys_path sys.path[:] = self.sys_path
if self.makefile is not None:
os.unlink(self.makefile)
self._cleanup_testfn() self._cleanup_testfn()
if self.uname is not None: if self.uname is not None:
os.uname = self.uname os.uname = self.uname
@ -236,12 +233,6 @@ class TestSysConfig(unittest.TestCase):
config_h = sysconfig.get_config_h_filename() config_h = sysconfig.get_config_h_filename()
self.assertTrue(os.path.isfile(config_h), config_h) self.assertTrue(os.path.isfile(config_h), config_h)
@unittest.skipIf(sys.platform.startswith('win'),
'Test is not Windows compatible')
def test_get_makefile_filename(self):
makefile = sysconfig.get_makefile_filename()
self.assertTrue(os.path.isfile(makefile), makefile)
def test_get_scheme_names(self): def test_get_scheme_names(self):
wanted = ('nt', 'nt_user', 'os2', 'os2_home', 'osx_framework_user', wanted = ('nt', 'nt_user', 'os2', 'os2_home', 'osx_framework_user',
'posix_home', 'posix_prefix', 'posix_user') 'posix_home', 'posix_prefix', 'posix_user')
@ -339,10 +330,33 @@ class TestSysConfig(unittest.TestCase):
self.assertEqual(my_platform, test_platform) self.assertEqual(my_platform, test_platform)
class MakefileTests(unittest.TestCase):
@unittest.skipIf(sys.platform.startswith('win'),
'Test is not Windows compatible')
def test_get_makefile_filename(self):
makefile = sysconfig.get_makefile_filename()
self.assertTrue(os.path.isfile(makefile), makefile)
def test_parse_makefile(self):
self.addCleanup(unlink, TESTFN)
with open(TESTFN, "w") as makefile:
print("var1=a$(VAR2)", file=makefile)
print("VAR2=b$(var3)", file=makefile)
print("var3=42", file=makefile)
print("var4=$/invalid", file=makefile)
print("var5=dollar$$5", file=makefile)
vars = sysconfig._parse_makefile(TESTFN)
self.assertEqual(vars, {
'var1': 'ab42',
'VAR2': 'b42',
'var3': 42,
'var4': '$/invalid',
'var5': 'dollar$5',
})
def test_main(): def test_main():
run_unittest(TestSysConfig) run_unittest(TestSysConfig, MakefileTests)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()

View file

@ -13,6 +13,9 @@ Core and Builtins
Library Library
------- -------
- Issue #12070: Fix the Makefile parser of the sysconfig module to handle
correctly references to "bogus variable" (e.g. "prefix=$/opt/python").
- Issue #12100: Don't reset incremental encoders of CJK codecs at each call to - Issue #12100: Don't reset incremental encoders of CJK codecs at each call to
their encode() method anymore, but continue to call the reset() method if the their encode() method anymore, but continue to call the reset() method if the
final argument is True. final argument is True.