From 438de10c160c188fced64317df9118100c329ffe Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 19 Mar 2024 22:58:13 +0100 Subject: [PATCH] gh-116869: Fix test_cext on RHEL7 (#117010) Remove -std option from CC command line. Skip C++14 test for now on non-Windows platforms (like RHEL7). --- Lib/test/test_cext/setup.py | 23 +++++++++++++---------- Lib/test/test_cppext/__init__.py | 3 +++ Lib/test/test_cppext/setup.py | 24 ++++++++++++++---------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Lib/test/test_cext/setup.py b/Lib/test/test_cext/setup.py index d6c4410fa5f..17a90caa98b 100644 --- a/Lib/test/test_cext/setup.py +++ b/Lib/test/test_cext/setup.py @@ -39,19 +39,22 @@ def main(): if std: if support.MS_WINDOWS: cflags.append(f'/std:{std}') - std_prefix = '/std' else: cflags.append(f'-std={std}') - std_prefix = '-std' - # Remove existing -std options to only test ours - cmd = (sysconfig.get_config_var('CC') or '') - if cmd is not None: - cmd = shlex.split(cmd) - cmd = [arg for arg in cmd if not arg.startswith(std_prefix)] - cmd = shlex.join(cmd) - # CC env var overrides sysconfig CC variable in setuptools - os.environ['CC'] = cmd + # Remove existing -std or /std options from CC command line. + # Python adds -std=c11 option. + cmd = (sysconfig.get_config_var('CC') or '') + if cmd is not None: + if support.MS_WINDOWS: + std_prefix = '/std' + else: + std_prefix = '-std' + cmd = shlex.split(cmd) + cmd = [arg for arg in cmd if not arg.startswith(std_prefix)] + cmd = shlex.join(cmd) + # CC env var overrides sysconfig CC variable in setuptools + os.environ['CC'] = cmd # Define Py_LIMITED_API macro if limited: diff --git a/Lib/test/test_cppext/__init__.py b/Lib/test/test_cppext/__init__.py index b8414f217c7..00a2840d49c 100644 --- a/Lib/test/test_cppext/__init__.py +++ b/Lib/test/test_cppext/__init__.py @@ -35,6 +35,9 @@ class TestCPPExt(unittest.TestCase): def test_build_cpp11(self): self.check_build('_testcpp11ext', std='c++11') + # Only test C++14 on MSVC. + # On s390x RHEL7, GCC 4.8.5 doesn't support C++14. + @unittest.skipIf(not support.MS_WINDOWS, "need Windows") def test_build_cpp14(self): self.check_build('_testcpp14ext', std='c++14') diff --git a/Lib/test/test_cppext/setup.py b/Lib/test/test_cppext/setup.py index 77e47bcd0cb..80b3e0d5212 100644 --- a/Lib/test/test_cppext/setup.py +++ b/Lib/test/test_cppext/setup.py @@ -35,19 +35,23 @@ def main(): if std: if support.MS_WINDOWS: cppflags.append(f'/std:{std}') - std_prefix = '/std' else: cppflags.append(f'-std={std}') - std_prefix = '-std' - # Remove existing -std options to only test ours - cmd = (sysconfig.get_config_var('CC') or '') - if cmd is not None: - cmd = shlex.split(cmd) - cmd = [arg for arg in cmd if not arg.startswith(std_prefix)] - cmd = shlex.join(cmd) - # CC env var overrides sysconfig CC variable in setuptools - os.environ['CC'] = cmd + # gh-105776: When "gcc -std=11" is used as the C++ compiler, -std=c11 + # option emits a C++ compiler warning. Remove "-std11" option from the + # CC command. + cmd = (sysconfig.get_config_var('CC') or '') + if cmd is not None: + if support.MS_WINDOWS: + std_prefix = '/std' + else: + std_prefix = '-std' + cmd = shlex.split(cmd) + cmd = [arg for arg in cmd if not arg.startswith(std_prefix)] + cmd = shlex.join(cmd) + # CC env var overrides sysconfig CC variable in setuptools + os.environ['CC'] = cmd # On Windows, add PCbuild\amd64\ to include and library directories include_dirs = []