From 1674aa24c7904a336b0d36a5ea40d02eac0efba2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tarek=20Ziad=C3=A9?= Date: Thu, 11 Jun 2009 08:35:26 +0000 Subject: [PATCH] Merged revisions 73343 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r73343 | tarek.ziade | 2009-06-11 10:31:17 +0200 (Thu, 11 Jun 2009) | 9 lines Merged revisions 73341 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r73341 | tarek.ziade | 2009-06-11 10:12:20 +0200 (Thu, 11 Jun 2009) | 1 line Fixed #5201: now distutils.sysconfig.parse_makefile() understands '53264' in Makefiles ........ ................ --- Lib/distutils/sysconfig.py | 15 +++++++++++---- Lib/distutils/tests/test_sysconfig.py | 25 ++++++++++++++++++++++++- Misc/NEWS | 4 ++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py index 466194cd3fca..eee9746d77a0 100644 --- a/Lib/distutils/sysconfig.py +++ b/Lib/distutils/sysconfig.py @@ -276,12 +276,19 @@ def parse_makefile(fn, g=None): if m: n, v = m.group(1, 2) v = v.strip() - if "$" in v: + # `$$' 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: diff --git a/Lib/distutils/tests/test_sysconfig.py b/Lib/distutils/tests/test_sysconfig.py index 1934abaf9608..3b32de946d7f 100644 --- a/Lib/distutils/tests/test_sysconfig.py +++ b/Lib/distutils/tests/test_sysconfig.py @@ -2,11 +2,20 @@ from distutils import sysconfig import os +import test import unittest -from test.support import TESTFN +from test.support import TESTFN, run_unittest class SysconfigTestCase(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() @@ -51,8 +60,22 @@ class SysconfigTestCase(unittest.TestCase): self.assert_(isinstance(cvars, dict)) self.assert_(cvars) + def test_parse_makefile_literal_dollar(self): + self.makefile = 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__': + run_unittest(test_suite()) diff --git a/Misc/NEWS b/Misc/NEWS index 94e074d86293..e2bb2f3ba501 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -323,6 +323,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 #6062: In distutils, fixed the package option of build_ext. Feedback and tests on pywin32 by Tim Golden. -- 2.47.3