]> granicus.if.org Git - python/commitdiff
Issue #12070: Fix the Makefile parser of the sysconfig module to handle
authorVictor Stinner <victor.stinner@haypocalc.com>
Tue, 24 May 2011 21:37:07 +0000 (23:37 +0200)
committerVictor Stinner <victor.stinner@haypocalc.com>
Tue, 24 May 2011 21:37:07 +0000 (23:37 +0200)
correctly references to "bogus variable" (e.g. "prefix=$/opt/python").

Lib/sysconfig.py
Lib/test/test_sysconfig.py
Misc/NEWS

index 41bccf37de45395e527f878af3fcfb156c54eb8d..2279a51d5ea21db3c8a2a325580cc7f5bc68c3c1 100644 (file)
@@ -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
index a97b38848ec38c0e6167c8f23b8248967a660255..2ea8819dc1f2302c2ad9498d172bbc1a2c8a53b4 100644 (file)
@@ -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()
index bca13127d4be0d9e922c70f6ac698a909cf59ed3..8d19f7a2c142a686f1e986b2e8592c6ef383440a 100644 (file)
--- 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.