summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2025-03-13 09:33:46 (GMT)
committerGitHub <noreply@github.com>2025-03-13 09:33:46 (GMT)
commit68922ace4dabb6635e6d5b51bbe6485ef2e9dad2 (patch)
treee8c8645b13f5505783d9218062bd6b15ca5d44a0
parent2ed671b5e3a64183ed2af220dd37c6b5182f52d3 (diff)
downloadcpython-68922ace4dabb6635e6d5b51bbe6485ef2e9dad2.zip
cpython-68922ace4dabb6635e6d5b51bbe6485ef2e9dad2.tar.gz
cpython-68922ace4dabb6635e6d5b51bbe6485ef2e9dad2.tar.bz2
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.
-rw-r--r--Lib/test/support/__init__.py19
-rw-r--r--Lib/test/test_math.py3
-rw-r--r--Lib/test/test_support.py4
3 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 37a69fd..b9ccf7b 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -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)
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index ba94a29..2649be8 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -2769,7 +2769,8 @@ class FMATests(unittest.TestCase):
# 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]
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index d900db5..46d7963 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -744,6 +744,10 @@ class TestSupport(unittest.TestCase):
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