diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-24 21:37:07 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-24 21:37:07 (GMT) |
commit | 1273b7cd9ccd19a168d3def5c7d1479c5fb6119a (patch) | |
tree | 3d4a58fd5919023cc7db0ff2ceff8e7a4103d53e /Lib | |
parent | d48ba0bde5bd535e9aa4c90cb122c0197f862e68 (diff) | |
download | cpython-1273b7cd9ccd19a168d3def5c7d1479c5fb6119a.zip cpython-1273b7cd9ccd19a168d3def5c7d1479c5fb6119a.tar.gz cpython-1273b7cd9ccd19a168d3def5c7d1479c5fb6119a.tar.bz2 |
Issue #12070: Fix the Makefile parser of the sysconfig module to handle
correctly references to "bogus variable" (e.g. "prefix=$/opt/python").
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/sysconfig.py | 6 | ||||
-rw-r--r-- | Lib/test/test_sysconfig.py | 34 |
2 files changed, 28 insertions, 12 deletions
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 41bccf3..2279a51 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -294,7 +294,7 @@ def _parse_makefile(filename, vars=None): variables.remove(name) if name.startswith('PY_') \ - and name[3:] in renamed_variables: + and name[3:] in renamed_variables: name = name[3:] if name not in done: @@ -302,7 +302,9 @@ def _parse_makefile(filename, vars=None): 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) # strip spurious spaces diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index a97b388..2ea8819 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -26,7 +26,6 @@ class TestSysConfig(unittest.TestCase): """Make a copy of sys.path""" super(TestSysConfig, self).setUp() self.sys_path = sys.path[:] - self.makefile = None # patching os.uname if hasattr(os, 'uname'): self.uname = os.uname @@ -49,8 +48,6 @@ class TestSysConfig(unittest.TestCase): def tearDown(self): """Restore sys.path""" sys.path[:] = self.sys_path - if self.makefile is not None: - os.unlink(self.makefile) self._cleanup_testfn() if self.uname is not None: os.uname = self.uname @@ -236,12 +233,6 @@ class TestSysConfig(unittest.TestCase): config_h = sysconfig.get_config_h_filename() 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): wanted = ('nt', 'nt_user', 'os2', 'os2_home', 'osx_framework_user', 'posix_home', 'posix_prefix', 'posix_user') @@ -339,10 +330,33 @@ class TestSysConfig(unittest.TestCase): 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(): - run_unittest(TestSysConfig) + run_unittest(TestSysConfig, MakefileTests) if __name__ == "__main__": test_main() |