diff options
author | Victor Stinner <vstinner@python.org> | 2025-03-13 09:33:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-13 09:33:46 (GMT) |
commit | 68922ace4dabb6635e6d5b51bbe6485ef2e9dad2 (patch) | |
tree | e8c8645b13f5505783d9218062bd6b15ca5d44a0 | |
parent | 2ed671b5e3a64183ed2af220dd37c6b5182f52d3 (diff) | |
download | cpython-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__.py | 19 | ||||
-rw-r--r-- | Lib/test/test_math.py | 3 | ||||
-rw-r--r-- | Lib/test/test_support.py | 4 |
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 |