[Python-checkins] r73341 - in python/trunk: Lib/distutils/sysconfig.py Lib/distutils/tests/test_sysconfig.py Misc/NEWS

tarek.ziade python-checkins at python.org
Thu Jun 11 10:12:20 CEST 2009


Author: tarek.ziade
Date: Thu Jun 11 10:12:20 2009
New Revision: 73341

Log:
Fixed #5201: now distutils.sysconfig.parse_makefile() understands '53264' in Makefiles

Modified:
   python/trunk/Lib/distutils/sysconfig.py
   python/trunk/Lib/distutils/tests/test_sysconfig.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/distutils/sysconfig.py
==============================================================================
--- python/trunk/Lib/distutils/sysconfig.py	(original)
+++ python/trunk/Lib/distutils/sysconfig.py	Thu Jun 11 10:12:20 2009
@@ -285,18 +285,25 @@
 
     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 @@
                     else:
                         try: value = int(value)
                         except ValueError:
-                            done[name] = string.strip(value)
+                            done[name] = value.strip()
                         else:
                             done[name] = value
                         del notdone[name]

Modified: python/trunk/Lib/distutils/tests/test_sysconfig.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_sysconfig.py	(original)
+++ python/trunk/Lib/distutils/tests/test_sysconfig.py	Thu Jun 11 10:12:20 2009
@@ -1,5 +1,6 @@
 """Tests for distutils.sysconfig."""
 import os
+import test
 import unittest
 
 from distutils import sysconfig
@@ -9,6 +10,14 @@
 
 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 @@
         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())

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Thu Jun 11 10:12:20 2009
@@ -317,6 +317,10 @@
 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.


More information about the Python-checkins mailing list