sanity/lib: Replace usage if LooseVersion with bb.utils.vercmp_string_op

Message ID 20211126163423.166644-1-richard.purdie@linuxfoundation.org
State New
Headers show
Series sanity/lib: Replace usage if LooseVersion with bb.utils.vercmp_string_op | expand

Commit Message

Richard Purdie Nov. 26, 2021, 4:34 p.m. UTC
distutils is going away and we have functionality in bitbake which can
handle these comparisions so switch to the bb.utils function.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/classes/sanity.bbclass | 18 ++++++------------
 meta/lib/oe/distro_check.py |  2 +-
 meta/lib/oe/terminal.py     |  7 +++----
 3 files changed, 10 insertions(+), 17 deletions(-)

Comments

Tim Orling Nov. 26, 2021, 7:56 p.m. UTC | #1
On Fri, Nov 26, 2021 at 8:34 AM Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> distutils is going away and we have functionality in bitbake which can
> handle these comparisions so switch to the bb.utils function.
>

Looks good. I will refactor the distutils deprecation series to follow suit.


> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
>  meta/classes/sanity.bbclass | 18 ++++++------------
>  meta/lib/oe/distro_check.py |  2 +-
>  meta/lib/oe/terminal.py     |  7 +++----
>  3 files changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
> index 9fbc9c18e7c..0e20589b22d 100644
> --- a/meta/classes/sanity.bbclass
> +++ b/meta/classes/sanity.bbclass
> @@ -462,13 +462,12 @@ def check_sanity_validmachine(sanity_data):
>  # Patch before 2.7 can't handle all the features in git-style diffs.  Some
>  # patches may incorrectly apply, and others won't apply at all.
>  def check_patch_version(sanity_data):
> -    from distutils.version import LooseVersion
>      import re, subprocess
>
>      try:
>          result = subprocess.check_output(["patch", "--version"],
> stderr=subprocess.STDOUT).decode('utf-8')
>          version = re.search(r"[0-9.]+", result.splitlines()[0]).group()
> -        if LooseVersion(version) < LooseVersion("2.7"):
> +        if bb.utils.vercmp_string_op(version, "2.7", "<"):
>              return "Your version of patch is older than 2.7 and has bugs
> which will break builds. Please install a newer version of patch.\n"
>          else:
>              return None
> @@ -478,7 +477,6 @@ def check_patch_version(sanity_data):
>  # Unpatched versions of make 3.82 are known to be broken.  See GNU
> Savannah Bug 30612.
>  # Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to
> validate.
>  def check_make_version(sanity_data):
> -    from distutils.version import LooseVersion
>      import subprocess
>
>      try:
> @@ -486,7 +484,7 @@ def check_make_version(sanity_data):
>      except subprocess.CalledProcessError as e:
>          return "Unable to execute make --version, exit code %d\n%s\n" %
> (e.returncode, e.output)
>      version = result.split()[2]
> -    if LooseVersion(version) == LooseVersion("3.82"):
> +    if bb.utils.vercmp_string_op(version, "3.82", "=="):
>          # Construct a test file
>          f = open("makefile_test", "w")
>          f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c
> makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
> @@ -539,12 +537,11 @@ def check_wsl(d):
>  # built buildtools-extended-tarball)
>  #
>  def check_gcc_version(sanity_data):
> -    from distutils.version import LooseVersion
>      import subprocess
>
>      build_cc, version = oe.utils.get_host_compiler_version(sanity_data)
>      if build_cc.strip() == "gcc":
> -        if LooseVersion(version) < LooseVersion("7.5"):
> +        if bb.utils.vercmp_string_op(version, "7.5", "<"):
>              return "Your version of gcc is older than 7.5 and will break
> builds. Please install a newer version of gcc (you could use the project's
> buildtools-extended-tarball or use scripts/install-buildtools).\n"
>      return None
>
> @@ -552,14 +549,13 @@ def check_gcc_version(sanity_data):
>  # but earlier versions do not; this needs to work properly for sstate
>  # Version 1.28 is needed so opkg-build works correctly when reproducibile
> builds are enabled
>  def check_tar_version(sanity_data):
> -    from distutils.version import LooseVersion
>      import subprocess
>      try:
>          result = subprocess.check_output(["tar", "--version"],
> stderr=subprocess.STDOUT).decode('utf-8')
>      except subprocess.CalledProcessError as e:
>          return "Unable to execute tar --version, exit code %d\n%s\n" %
> (e.returncode, e.output)
>      version = result.split()[3]
> -    if LooseVersion(version) < LooseVersion("1.28"):
> +    if bb.utils.vercmp_string_op(version, "1.28", "<"):
>          return "Your version of tar is older than 1.28 and does not have
> the support needed to enable reproducible builds. Please install a newer
> version of tar (you could use the project's buildtools-tarball from our
> last release or use scripts/install-buildtools).\n"
>      return None
>
> @@ -567,14 +563,13 @@ def check_tar_version(sanity_data):
>  # The kernel tools assume git >= 1.8.3.1 (verified needed > 1.7.9.5) see
> #6162
>  # The git fetcher also had workarounds for git < 1.7.9.2 which we've
> dropped
>  def check_git_version(sanity_data):
> -    from distutils.version import LooseVersion
>      import subprocess
>      try:
>          result = subprocess.check_output(["git", "--version"],
> stderr=subprocess.DEVNULL).decode('utf-8')
>      except subprocess.CalledProcessError as e:
>          return "Unable to execute git --version, exit code %d\n%s\n" %
> (e.returncode, e.output)
>      version = result.split()[2]
> -    if LooseVersion(version) < LooseVersion("1.8.3.1"):
> +    if bb.utils.vercmp_string_op(version, "1.8.3.1", "<"):
>          return "Your version of git is older than 1.8.3.1 and has bugs
> which will break builds. Please install a newer version of git.\n"
>      return None
>
> @@ -796,9 +791,8 @@ def check_sanity_everybuild(status, d):
>          status.addresult('The system requires at least Python 3.6 to run.
> Please update your Python interpreter.\n')
>
>      # Check the bitbake version meets minimum requirements
> -    from distutils.version import LooseVersion
>      minversion = d.getVar('BB_MIN_VERSION')
> -    if (LooseVersion(bb.__version__) < LooseVersion(minversion)):
> +    if bb.utils.vercmp_string_op(bb.__version__, minversion, "<"):
>          status.addresult('Bitbake version %s is required and version %s
> was found\n' % (minversion, bb.__version__))
>
>      sanity_check_locale(d)
> diff --git a/meta/lib/oe/distro_check.py b/meta/lib/oe/distro_check.py
> index 88e46c354d2..4b2a9bec01b 100644
> --- a/meta/lib/oe/distro_check.py
> +++ b/meta/lib/oe/distro_check.py
> @@ -26,7 +26,7 @@ def find_latest_numeric_release(url, d):
>      maxstr=""
>      for link in get_links_from_url(url, d):
>          try:
> -            # TODO use LooseVersion
> +            # TODO use bb.utils.vercmp_string_op()
>              release = float(link)
>          except:
>              release = 0
> diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
> index 59aa80de669..53186c4a3ed 100644
> --- a/meta/lib/oe/terminal.py
> +++ b/meta/lib/oe/terminal.py
> @@ -5,7 +5,6 @@ import logging
>  import oe.classutils
>  import shlex
>  from bb.process import Popen, ExecutionError
> -from distutils.version import LooseVersion
>
>  logger = logging.getLogger('BitBake.OE.Terminal')
>
> @@ -86,10 +85,10 @@ class Konsole(XTerminal):
>      def __init__(self, sh_cmd, title=None, env=None, d=None):
>          # Check version
>          vernum = check_terminal_version("konsole")
> -        if vernum and LooseVersion(vernum) < '2.0.0':
> +        if vernum and bb.utils.vercmp_string_op(vernum, "2.0.0", "<"):
>              # Konsole from KDE 3.x
>              self.command = 'konsole -T "{title}" -e {command}'
> -        elif vernum and LooseVersion(vernum) < '16.08.1':
> +        elif vernum and bb.utils.vercmp_string_op(vernum, "16.08.1", "<"):
>              # Konsole pre 16.08.01 Has nofork
>              self.command = 'konsole --nofork --workdir . -p
> tabtitle="{title}" -e {command}'
>          XTerminal.__init__(self, sh_cmd, title, env, d)
> @@ -260,7 +259,7 @@ def spawn(name, sh_cmd, title=None, env=None, d=None):
>
>  def check_tmux_version(desired):
>      vernum = check_terminal_version("tmux")
> -    if vernum and LooseVersion(vernum) < desired:
> +    if vernum and bb.utils.vercmp_string_op(vernum, desired, "<"):
>          return False
>      return vernum
>
> --
> 2.32.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#158838):
> https://lists.openembedded.org/g/openembedded-core/message/158838
> Mute This Topic: https://lists.openembedded.org/mt/87322233/924729
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> ticotimo@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>

Patch

diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 9fbc9c18e7c..0e20589b22d 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -462,13 +462,12 @@  def check_sanity_validmachine(sanity_data):
 # Patch before 2.7 can't handle all the features in git-style diffs.  Some
 # patches may incorrectly apply, and others won't apply at all.
 def check_patch_version(sanity_data):
-    from distutils.version import LooseVersion
     import re, subprocess
 
     try:
         result = subprocess.check_output(["patch", "--version"], stderr=subprocess.STDOUT).decode('utf-8')
         version = re.search(r"[0-9.]+", result.splitlines()[0]).group()
-        if LooseVersion(version) < LooseVersion("2.7"):
+        if bb.utils.vercmp_string_op(version, "2.7", "<"):
             return "Your version of patch is older than 2.7 and has bugs which will break builds. Please install a newer version of patch.\n"
         else:
             return None
@@ -478,7 +477,6 @@  def check_patch_version(sanity_data):
 # Unpatched versions of make 3.82 are known to be broken.  See GNU Savannah Bug 30612.
 # Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate.
 def check_make_version(sanity_data):
-    from distutils.version import LooseVersion
     import subprocess
 
     try:
@@ -486,7 +484,7 @@  def check_make_version(sanity_data):
     except subprocess.CalledProcessError as e:
         return "Unable to execute make --version, exit code %d\n%s\n" % (e.returncode, e.output)
     version = result.split()[2]
-    if LooseVersion(version) == LooseVersion("3.82"):
+    if bb.utils.vercmp_string_op(version, "3.82", "=="):
         # Construct a test file
         f = open("makefile_test", "w")
         f.write("makefile_test.a: makefile_test_a.c makefile_test_b.c makefile_test.a( makefile_test_a.c makefile_test_b.c)\n")
@@ -539,12 +537,11 @@  def check_wsl(d):
 # built buildtools-extended-tarball)
 #
 def check_gcc_version(sanity_data):
-    from distutils.version import LooseVersion
     import subprocess
     
     build_cc, version = oe.utils.get_host_compiler_version(sanity_data)
     if build_cc.strip() == "gcc":
-        if LooseVersion(version) < LooseVersion("7.5"):
+        if bb.utils.vercmp_string_op(version, "7.5", "<"):
             return "Your version of gcc is older than 7.5 and will break builds. Please install a newer version of gcc (you could use the project's buildtools-extended-tarball or use scripts/install-buildtools).\n"
     return None
 
@@ -552,14 +549,13 @@  def check_gcc_version(sanity_data):
 # but earlier versions do not; this needs to work properly for sstate
 # Version 1.28 is needed so opkg-build works correctly when reproducibile builds are enabled
 def check_tar_version(sanity_data):
-    from distutils.version import LooseVersion
     import subprocess
     try:
         result = subprocess.check_output(["tar", "--version"], stderr=subprocess.STDOUT).decode('utf-8')
     except subprocess.CalledProcessError as e:
         return "Unable to execute tar --version, exit code %d\n%s\n" % (e.returncode, e.output)
     version = result.split()[3]
-    if LooseVersion(version) < LooseVersion("1.28"):
+    if bb.utils.vercmp_string_op(version, "1.28", "<"):
         return "Your version of tar is older than 1.28 and does not have the support needed to enable reproducible builds. Please install a newer version of tar (you could use the project's buildtools-tarball from our last release or use scripts/install-buildtools).\n"
     return None
 
@@ -567,14 +563,13 @@  def check_tar_version(sanity_data):
 # The kernel tools assume git >= 1.8.3.1 (verified needed > 1.7.9.5) see #6162 
 # The git fetcher also had workarounds for git < 1.7.9.2 which we've dropped
 def check_git_version(sanity_data):
-    from distutils.version import LooseVersion
     import subprocess
     try:
         result = subprocess.check_output(["git", "--version"], stderr=subprocess.DEVNULL).decode('utf-8')
     except subprocess.CalledProcessError as e:
         return "Unable to execute git --version, exit code %d\n%s\n" % (e.returncode, e.output)
     version = result.split()[2]
-    if LooseVersion(version) < LooseVersion("1.8.3.1"):
+    if bb.utils.vercmp_string_op(version, "1.8.3.1", "<"):
         return "Your version of git is older than 1.8.3.1 and has bugs which will break builds. Please install a newer version of git.\n"
     return None
 
@@ -796,9 +791,8 @@  def check_sanity_everybuild(status, d):
         status.addresult('The system requires at least Python 3.6 to run. Please update your Python interpreter.\n')
 
     # Check the bitbake version meets minimum requirements
-    from distutils.version import LooseVersion
     minversion = d.getVar('BB_MIN_VERSION')
-    if (LooseVersion(bb.__version__) < LooseVersion(minversion)):
+    if bb.utils.vercmp_string_op(bb.__version__, minversion, "<"):
         status.addresult('Bitbake version %s is required and version %s was found\n' % (minversion, bb.__version__))
 
     sanity_check_locale(d)
diff --git a/meta/lib/oe/distro_check.py b/meta/lib/oe/distro_check.py
index 88e46c354d2..4b2a9bec01b 100644
--- a/meta/lib/oe/distro_check.py
+++ b/meta/lib/oe/distro_check.py
@@ -26,7 +26,7 @@  def find_latest_numeric_release(url, d):
     maxstr=""
     for link in get_links_from_url(url, d):
         try:
-            # TODO use LooseVersion
+            # TODO use bb.utils.vercmp_string_op()
             release = float(link)
         except:
             release = 0
diff --git a/meta/lib/oe/terminal.py b/meta/lib/oe/terminal.py
index 59aa80de669..53186c4a3ed 100644
--- a/meta/lib/oe/terminal.py
+++ b/meta/lib/oe/terminal.py
@@ -5,7 +5,6 @@  import logging
 import oe.classutils
 import shlex
 from bb.process import Popen, ExecutionError
-from distutils.version import LooseVersion
 
 logger = logging.getLogger('BitBake.OE.Terminal')
 
@@ -86,10 +85,10 @@  class Konsole(XTerminal):
     def __init__(self, sh_cmd, title=None, env=None, d=None):
         # Check version
         vernum = check_terminal_version("konsole")
-        if vernum and LooseVersion(vernum) < '2.0.0':
+        if vernum and bb.utils.vercmp_string_op(vernum, "2.0.0", "<"):
             # Konsole from KDE 3.x
             self.command = 'konsole -T "{title}" -e {command}'
-        elif vernum and LooseVersion(vernum) < '16.08.1':
+        elif vernum and bb.utils.vercmp_string_op(vernum, "16.08.1", "<"):
             # Konsole pre 16.08.01 Has nofork
             self.command = 'konsole --nofork --workdir . -p tabtitle="{title}" -e {command}'
         XTerminal.__init__(self, sh_cmd, title, env, d)
@@ -260,7 +259,7 @@  def spawn(name, sh_cmd, title=None, env=None, d=None):
 
 def check_tmux_version(desired):
     vernum = check_terminal_version("tmux")
-    if vernum and LooseVersion(vernum) < desired:
+    if vernum and bb.utils.vercmp_string_op(vernum, desired, "<"):
         return False
     return vernum