Skip to content

Commit

Permalink
[lldb] Migrate distutils.version.LooseVersion to packaging (#82066)
Browse files Browse the repository at this point in the history
The distutils package has been deprecated and was removed from Python
3.12. The migration page [1] advises to use the packaging module
instead. Since Python 3.6 that's vendored into pkg_resources.

[1] https://peps.python.org/pep-0632/#migration-advice
  • Loading branch information
JDevlieghere committed Feb 20, 2024
1 parent 8c5c4d9 commit 0c02329
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 36 deletions.
12 changes: 7 additions & 5 deletions lldb/packages/Python/lldbsuite/test/decorators.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# System modules
from distutils.version import LooseVersion
from functools import wraps
from pkg_resources import packaging
import ctypes
import locale
import os
Expand Down Expand Up @@ -65,10 +65,10 @@ def fn_neq(x, y):
">=": fn_geq,
"<=": fn_leq,
}
expected_str = ".".join([str(x) for x in expected])
actual_str = ".".join([str(x) for x in actual])

return op_lookup[comparison](LooseVersion(actual_str), LooseVersion(expected_str))
return op_lookup[comparison](
packaging.version.parse(actual), packaging.version.parse(expected)
)


def _match_decorator_property(expected, actual):
Expand Down Expand Up @@ -238,7 +238,9 @@ def fn(actual_debug_info=None):
)
)
skip_for_py_version = (py_version is None) or _check_expected_version(
py_version[0], py_version[1], sys.version_info
py_version[0],
py_version[1],
"{}.{}".format(sys.version_info.major, sys.version_info.minor),
)
skip_for_macos_version = (macos_version is None) or (
(platform.mac_ver()[0] != "")
Expand Down
25 changes: 14 additions & 11 deletions lldb/packages/Python/lldbsuite/test/lldbplatformutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import subprocess
import sys
import os
from distutils.version import LooseVersion
from urllib.parse import urlparse
from pkg_resources import packaging

# LLDB modules
import lldb
Expand Down Expand Up @@ -297,27 +297,30 @@ def expectedCompilerVersion(compiler_version):
if compiler_version is None:
return True
operator = str(compiler_version[0])
version = compiler_version[1]
version_str = str(compiler_version[1])

if version is None:
if not version_str:
return True

test_compiler_version = getCompilerVersion()
if test_compiler_version == "unknown":
test_compiler_version_str = getCompilerVersion()
if test_compiler_version_str == "unknown":
# Assume the compiler version is at or near the top of trunk.
return operator in [">", ">=", "!", "!=", "not"]

version = packaging.version.parse(version_str)
test_compiler_version = packaging.version.parse(test_compiler_version_str)

if operator == ">":
return LooseVersion(test_compiler_version) > LooseVersion(version)
return test_compiler_version > version
if operator == ">=" or operator == "=>":
return LooseVersion(test_compiler_version) >= LooseVersion(version)
return test_compiler_version >= version
if operator == "<":
return LooseVersion(test_compiler_version) < LooseVersion(version)
return test_compiler_version < version
if operator == "<=" or operator == "=<":
return LooseVersion(test_compiler_version) <= LooseVersion(version)
return test_compiler_version <= version
if operator == "!=" or operator == "!" or operator == "not":
return str(version) not in str(test_compiler_version)
return str(version) in str(test_compiler_version)
return version_str not in test_compiler_version_str
return version_str in test_compiler_version_str


def expectedCompiler(compilers):
Expand Down
31 changes: 15 additions & 16 deletions lldb/test/API/sanity/TestSettingSkipping.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
"""
This is a sanity check that verifies that test can be sklipped based on settings.
This is a sanity check that verifies that test can be skipped based on settings.
"""


import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *


class SettingSkipSanityTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
CURRENT_PYTHON_VERSION = "3.0"

@skipIf(py_version=(">=", (3, 0)))
@skipIf(py_version=(">=", CURRENT_PYTHON_VERSION))
def testSkip(self):
"""This setting is on by default"""
self.assertTrue(False, "This test should not run!")

@skipIf(py_version=("<", (3, 0)))
def testNoMatch(self):
self.assertTrue(True, "This test should run!")
self.assertTrue(False, "This test should not run and fail (SKIPPED)")

@skipIf(setting=("target.i-made-this-one-up", "true"))
def testNotExisting(self):
self.assertTrue(True, "This test should run!")
@skipIf(py_version=("<", CURRENT_PYTHON_VERSION))
def testNoSKip(self):
self.assertTrue(True, "This test should run and pass(PASS)")

@expectedFailureAll(py_version=(">=", (3, 0)))
@expectedFailureAll(py_version=(">=", CURRENT_PYTHON_VERSION))
def testXFAIL(self):
self.assertTrue(False, "This test should run and fail!")
self.assertTrue(False, "This test should expectedly fail (XFAIL)")

@expectedFailureAll(py_version=("<", (3, 0)))
@expectedFailureAll(py_version=("<", CURRENT_PYTHON_VERSION))
def testNotXFAIL(self):
self.assertTrue(True, "This test should run and succeed!")
self.assertTrue(True, "This test should pass (PASS)")

@skipIf(setting=("target.i-made-this-one-up", "true"))
def testNotExisting(self):
self.assertTrue(True, "This test should run!")
4 changes: 2 additions & 2 deletions lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ def check_simulator_ostype(self, sdk, platform_name, arch=platform.machine()):

# Older versions of watchOS (<7.0) only support i386
if platform_name == "watchos":
from distutils.version import LooseVersion
from pkg_resources import packaging

if LooseVersion(vers) < LooseVersion("7.0"):
if packaging.version.parse(vers) < packaging.version.parse("7.0"):
arch = "i386"

triple = "-".join([arch, "apple", platform_name + vers, "simulator"])
Expand Down
4 changes: 2 additions & 2 deletions lldb/test/Shell/helper/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -519,9 +519,9 @@ def _find_windows_sdk_in_registry_view(self, view):

# Windows SDK version numbers consist of 4 dotted components, so we
# have to use LooseVersion, as StrictVersion supports 3 or fewer.
from distutils.version import LooseVersion
from pkg_resources import packaging

sdk_versions.sort(key=lambda x: LooseVersion(x), reverse=True)
sdk_versions.sort(key=lambda x: packaging.version.parse(x), reverse=True)
option_value_name = "OptionId.DesktopCPP" + self.msvc_arch_str
for v in sdk_versions:
try:
Expand Down

0 comments on commit 0c02329

Please sign in to comment.