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.
This commit is contained in:
Victor Stinner 2025-03-13 10:33:46 +01:00 committed by GitHub
parent 2ed671b5e3
commit 68922ace4d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 1 deletions

View File

@ -3015,3 +3015,22 @@ def is_libssl_fips_mode():
except ImportError:
return False # more of a maybe, unless we add this to the _ssl module.
return get_fips_mode() != 0
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

@ -2769,7 +2769,8 @@ def test_fma_infinities(self):
# properly: it doesn't use the right sign when the result is zero.
@unittest.skipIf(
sys.platform.startswith(("freebsd", "wasi", "netbsd", "emscripten"))
or (sys.platform == "android" and platform.machine() == "x86_64"),
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

@ -744,6 +744,10 @@ def test_get_signal_name(self):
self.assertEqual(support.get_signal_name(exitcode), expected,
exitcode)
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