summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-05-24 21:37:07 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-05-24 21:37:07 (GMT)
commit1273b7cd9ccd19a168d3def5c7d1479c5fb6119a (patch)
tree3d4a58fd5919023cc7db0ff2ceff8e7a4103d53e
parentd48ba0bde5bd535e9aa4c90cb122c0197f862e68 (diff)
downloadcpython-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").
-rw-r--r--Lib/sysconfig.py6
-rw-r--r--Lib/test/test_sysconfig.py34
-rw-r--r--Misc/NEWS3
3 files changed, 31 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()
diff --git a/Misc/NEWS b/Misc/NEWS
index bca1312..8d19f7a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,9 @@ Core and Builtins
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
their encode() method anymore, but continue to call the reset() method if the
final argument is True.