From: Victor Stinner Date: Thu, 13 Mar 2025 09:59:57 +0000 (+0100) Subject: [3.13] gh-131032: Add support.linked_to_musl() function (#131071) (#131179) X-Git-Tag: v3.13.3~132 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=050813c026c742f2cbdcfefc3a062d0105e2195c;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-131032: Add support.linked_to_musl() function (#131071) (#131179) gh-131032: Add support.linked_to_musl() function (#131071) Skip test_math.test_fma_zero_result() if Python is linked to the musl C library. (cherry picked from commit 68922ace4dabb6635e6d5b51bbe6485ef2e9dad2) --- diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index ff450c7f9142..f5036dd18b64 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2767,3 +2767,22 @@ class BrokenIter: if self.iter_raises: 1/0 return self + + +def linked_to_musl(): + """ + Test if the Python executable is linked to the musl C library. + """ + if sys.platform != 'linux': + return False + + import subprocess + exe = getattr(sys, '_base_executable', sys.executable) + cmd = ['ldd', exe] + try: + stdout = subprocess.check_output(cmd, + text=True, + stderr=subprocess.STDOUT) + except (OSError, subprocess.CalledProcessError): + return False + return ('musl' in stdout) diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 36b96b4c31d6..d309e8c1c41f 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -2712,8 +2712,9 @@ class FMATests(unittest.TestCase): # gh-73468: On some platforms, libc fma() doesn't implement IEE 754-2008 # properly: it doesn't use the right sign when the result is zero. @unittest.skipIf( - sys.platform.startswith(("freebsd", "wasi", "netbsd")) - or (sys.platform == "android" and platform.machine() == "x86_64"), + sys.platform.startswith(("freebsd", "wasi", "netbsd", "emscripten")) + or (sys.platform == "android" and platform.machine() == "x86_64") + or support.linked_to_musl(), # gh-131032 f"this platform doesn't implement IEE 754-2008 properly") def test_fma_zero_result(self): nonnegative_finites = [0.0, 1e-300, 2.3, 1e300] diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 4310f06924a8..11670b06fb76 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -733,6 +733,10 @@ class TestSupport(unittest.TestCase): self.assertEqual(support.copy_python_src_ignore(path, os.listdir(path)), ignored) + def test_linked_to_musl(self): + linked = support.linked_to_musl() + self.assertIsInstance(linked, bool) + # XXX -follows a list of untested API # make_legacy_pyc # is_resource_enabled