]> granicus.if.org Git - python/commitdiff
Fixed #5201: now distutils.sysconfig.parse_makefile() understands '53264' in Makefiles
authorTarek Ziadé <ziade.tarek@gmail.com>
Thu, 11 Jun 2009 08:12:20 +0000 (08:12 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Thu, 11 Jun 2009 08:12:20 +0000 (08:12 +0000)
Lib/distutils/sysconfig.py
Lib/distutils/tests/test_sysconfig.py
Misc/NEWS

index 099e0586fd7b9a2f10f566c0e9076687ae5df069..4a4fadde92834af767ef03a6422e668d646149c2 100644 (file)
@@ -285,18 +285,25 @@ def parse_makefile(fn, g=None):
 
     while 1:
         line = fp.readline()
-        if line is None:                # eof
+        if line is None:  # eof
             break
         m = _variable_rx.match(line)
         if m:
             n, v = m.group(1, 2)
-            v = string.strip(v)
-            if "$" in v:
+            v = v.strip()
+            # `$$' is a literal `$' in make
+            tmpv = v.replace('$$', '')
+
+            if "$" in tmpv:
                 notdone[n] = v
             else:
-                try: v = int(v)
-                except ValueError: pass
-                done[n] = v
+                try:
+                    v = int(v)
+                except ValueError:
+                    # insert literal `$'
+                    done[n] = v.replace('$$', '$')
+                else:
+                    done[n] = v
 
     # do variable interpolation here
     while notdone:
@@ -324,7 +331,7 @@ def parse_makefile(fn, g=None):
                     else:
                         try: value = int(value)
                         except ValueError:
-                            done[name] = string.strip(value)
+                            done[name] = value.strip()
                         else:
                             done[name] = value
                         del notdone[name]
index 0a5ac2944a27ef4c68963b60c8edb600735edd23..8534881c3291176ebe628053cae92cbf911a7a69 100644 (file)
@@ -1,5 +1,6 @@
 """Tests for distutils.sysconfig."""
 import os
+import test
 import unittest
 
 from distutils import sysconfig
@@ -9,6 +10,14 @@ from test.test_support import TESTFN
 
 class SysconfigTestCase(support.EnvironGuard,
                         unittest.TestCase):
+    def setUp(self):
+        super(SysconfigTestCase, self).setUp()
+        self.makefile = None
+
+    def tearDown(self):
+        if self.makefile is not None:
+            os.unlink(self.makefile)
+        super(SysconfigTestCase, self).tearDown()
 
     def test_get_config_h_filename(self):
         config_h = sysconfig.get_config_h_filename()
@@ -56,8 +65,32 @@ class SysconfigTestCase(support.EnvironGuard,
         sysconfig.customize_compiler(comp)
         self.assertEquals(comp.exes['archiver'], 'my_ar -arflags')
 
+    def test_parse_makefile_base(self):
+        self.makefile = test.test_support.TESTFN
+        fd = open(self.makefile, 'w')
+        fd.write(r"CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'" '\n')
+        fd.write('VAR=$OTHER\nOTHER=foo')
+        fd.close()
+        d = sysconfig.parse_makefile(self.makefile)
+        self.assertEquals(d, {'CONFIG_ARGS': "'--arg1=optarg1' 'ENV=LIB'",
+                              'OTHER': 'foo'})
+
+    def test_parse_makefile_literal_dollar(self):
+        self.makefile = test.test_support.TESTFN
+        fd = open(self.makefile, 'w')
+        fd.write(r"CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'" '\n')
+        fd.write('VAR=$OTHER\nOTHER=foo')
+        fd.close()
+        d = sysconfig.parse_makefile(self.makefile)
+        self.assertEquals(d, {'CONFIG_ARGS': r"'--arg1=optarg1' 'ENV=\$LIB'",
+                              'OTHER': 'foo'})
+
 
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(SysconfigTestCase))
     return suite
+
+
+if __name__ == '__main__':
+    test.test_support.run_unittest(test_suite())
index df6f5b329294badfba7a02b20d945fca628e1e1d..f4fb3fc192af16e2a85e93eae358c8e911538037 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -317,6 +317,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #5201: distutils.sysconfig.parse_makefile() now understands `$$`
+  in Makefiles. This prevents compile errors when using syntax like:
+  `LDFLAGS='-rpath=\$$LIB:/some/other/path'`. Patch by Floris Bruynooghe.
+
 - Issue #5767: Removed sgmlop support from xmlrpclib.
 
 - Issue #6131: test_modulefinder leaked when run after test_distutils.