[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 68922ace4d)
This commit is contained in:
Victor Stinner 2025-03-13 10:59:57 +01:00 committed by GitHub
parent 589382bd04
commit 050813c026
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 2 deletions

View file

@ -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)

View file

@ -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]

View file

@ -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