From 849482955f70eb1adc47a20dcbce3b4add47d864 Mon Sep 17 00:00:00 2001 From: Mazay0 Date: Wed, 8 Nov 2017 22:48:48 +0700 Subject: [PATCH] bpo-31955: Fix distutils CCompiler.set_executable() for Unicode (GH-4316) Fix CCompiler.set_executable() of distutils to handle properly Unicode strings. --- Lib/distutils/ccompiler.py | 2 +- Lib/distutils/tests/test_ccompiler.py | 24 +++++++++++++++++++ .../2017-11-07-19-12-25.bpo-31955.1DWu-S.rst | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2017-11-07-19-12-25.bpo-31955.1DWu-S.rst diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py index 62506a6e6f..88a910c681 100644 --- a/Lib/distutils/ccompiler.py +++ b/Lib/distutils/ccompiler.py @@ -160,7 +160,7 @@ class CCompiler: self.set_executable(key, args[key]) def set_executable(self, key, value): - if isinstance(value, str): + if isinstance(value, basestring): setattr(self, key, split_quoted(value)) else: setattr(self, key, value) diff --git a/Lib/distutils/tests/test_ccompiler.py b/Lib/distutils/tests/test_ccompiler.py index 446eac2cda..4976098b8d 100644 --- a/Lib/distutils/tests/test_ccompiler.py +++ b/Lib/distutils/tests/test_ccompiler.py @@ -24,6 +24,30 @@ class FakeCompiler(object): class CCompilerTestCase(support.EnvironGuard, unittest.TestCase): + def test_set_executables(self): + class MyCCompiler(CCompiler): + executables = {'compiler': '', 'compiler_cxx': '', 'linker': ''} + + compiler = MyCCompiler() + + # set executable as list + compiler.set_executables(compiler=['env', 'OMPI_MPICC=clang', 'mpicc']) + self.assertEqual(compiler.compiler, ['env', + 'OMPI_MPICC=clang', + 'mpicc']) + + # set executable as string + compiler.set_executables(compiler_cxx='env OMPI_MPICXX=clang++ mpicxx') + self.assertEqual(compiler.compiler_cxx, ['env', + 'OMPI_MPICXX=clang++', + 'mpicxx']) + + # set executable as unicode string + compiler.set_executables(linker=u'env OMPI_MPICXX=clang++ mpiCC') + self.assertEqual(compiler.linker, [u'env', + u'OMPI_MPICXX=clang++', + u'mpiCC']) + def test_gen_lib_options(self): compiler = FakeCompiler() libdirs = ['lib1', 'lib2'] diff --git a/Misc/NEWS.d/next/Library/2017-11-07-19-12-25.bpo-31955.1DWu-S.rst b/Misc/NEWS.d/next/Library/2017-11-07-19-12-25.bpo-31955.1DWu-S.rst new file mode 100644 index 0000000000..62f24492a8 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-11-07-19-12-25.bpo-31955.1DWu-S.rst @@ -0,0 +1 @@ +Fix CCompiler.set_executable() of distutils to handle properly Unicode strings. -- 2.50.0