]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Correct a flaw in the Python 3 version checking
authorRich Ercolani <214141+rincebrain@users.noreply.github.com>
Wed, 9 Jun 2021 00:20:16 +0000 (20:20 -0400)
committerGitHub <noreply@github.com>
Wed, 9 Jun 2021 00:20:16 +0000 (18:20 -0600)
It turns out the ax_python_devel.m4 version check assumes that
("3.X+1.0" >= "3.X.0") is True in Python, which is not when X+1
is 10 or above and X is not. (Also presumably X+1=100 and ...)

So let's remake the check to behave consistently, using the
"packaging" or (if absent) the "distlib" modules.

(Also, update the Github workflows to use the new packages.)

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes: #12073
.github/workflows/zfs-tests-functional.yml
.github/workflows/zfs-tests-sanity.yml
.github/workflows/zloop.yml
config/always-pyzfs.m4
config/ax_python_devel.m4
rpm/generic/zfs.spec.in

index d2b5764dbf80d4e01a5ca8a9cdb094727bbe233e..eacc95ae1617315b81bfae52b00833de496c044b 100644 (file)
@@ -26,7 +26,8 @@ jobs:
           xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
           libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
           libpam0g-dev pamtester python-dev python-setuptools python-cffi \
-          python3 python3-dev python3-setuptools python3-cffi libcurl4-openssl-dev
+          python-packaging python3 python3-dev python3-setuptools python3-cffi \
+          libcurl4-openssl-dev python3-packaging
     - name: Autogen.sh
       run: |
         sh autogen.sh
index 9e2ed1b2f7cfc163d0bbd25a1dde87f95536f670..40a7f8ba511c80af41843f7f1bd7f513f6214328 100644 (file)
@@ -22,7 +22,8 @@ jobs:
           xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
           libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
           libpam0g-dev pamtester python-dev python-setuptools python-cffi \
-          python3 python3-dev python3-setuptools python3-cffi libcurl4-openssl-dev
+          python-packaging python3 python3-dev python3-setuptools python3-cffi \
+          python3-packaging libcurl4-openssl-dev
     - name: Autogen.sh
       run: |
         sh autogen.sh
index 30785b14507a0764b51f6301941eadb086b80173..b3679e7f7f20f1755e6e7f62cc0baff7540ab4e2 100644 (file)
@@ -22,8 +22,8 @@ jobs:
           xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
           libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
           libpam0g-dev \
-          python-dev python-setuptools python-cffi \
-          python3 python3-dev python3-setuptools python3-cffi
+          python-dev python-setuptools python-cffi python-packaging \
+          python3 python3-dev python3-setuptools python3-cffi python3-packaging
     - name: Autogen.sh
       run: |
         sh autogen.sh
index 76e07b593df2749259e13f96e3fee5780c7697b6..fa39fd88519cd3a83a476d759cbeca334cb144a8 100644 (file)
@@ -46,6 +46,21 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYZFS], [
        ])
        AC_SUBST(DEFINE_PYZFS)
 
+       dnl #
+       dnl # Python "packaging" (or, failing that, "distlib") module is required to build and install pyzfs
+       dnl #
+       AS_IF([test "x$enable_pyzfs" = xcheck -o "x$enable_pyzfs" = xyes], [
+               ZFS_AC_PYTHON_MODULE([packaging], [], [
+                       ZFS_AC_PYTHON_MODULE([distlib], [], [
+                               AS_IF([test "x$enable_pyzfs" = xyes], [
+                                       AC_MSG_ERROR("Python $PYTHON_VERSION packaging and distlib modules are not installed")
+                               ], [test "x$enable_pyzfs" != xno], [
+                                       enable_pyzfs=no
+                               ])
+                       ])
+               ])
+       ])
+
        dnl #
        dnl # Require python-devel libraries
        dnl #
index faf6c2b0d7efc576a8526f4560ac044773cd0e28..fcf73dc20880adf3352a2152baf8472a96b25899 100644 (file)
@@ -97,9 +97,18 @@ AC_DEFUN([AX_PYTHON_DEVEL],[
        # Check for a version of Python >= 2.1.0
        #
        AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
-       ac_supports_python_ver=`$PYTHON -c "import sys; \
-               ver = sys.version.split ()[[0]]; \
-               print (ver >= '2.1.0')"`
+       ac_supports_python_ver=`cat<<EOD | $PYTHON -
+from __future__ import print_function;
+import sys;
+try:
+       from packaging import version;
+except ImportError:
+       from distlib import version;
+ver = sys.version.split ()[[0]];
+(tst_cmp, tst_ver) = ">= '2.1.0'".split ();
+tst_ver = tst_ver.strip ("'");
+eval ("print (version.LegacyVersion (ver)"+ tst_cmp +"version.LegacyVersion (tst_ver))")
+EOD`
        if test "$ac_supports_python_ver" != "True"; then
                if test -z "$PYTHON_NOVERSIONCHECK"; then
                        AC_MSG_RESULT([no])
@@ -126,9 +135,21 @@ to something else than an empty string.
        #
        if test -n "$1"; then
                AC_MSG_CHECKING([for a version of Python $1])
-               ac_supports_python_ver=`$PYTHON -c "import sys; \
-                       ver = sys.version.split ()[[0]]; \
-                       print (ver $1)"`
+               # Why the strip ()?  Because if we don't, version.parse
+               # will, for example, report 3.10.0 >= '3.11.0'
+               ac_supports_python_ver=`cat<<EOD | $PYTHON -
+
+from __future__ import print_function;
+import sys;
+try:
+       from packaging import version;
+except ImportError:
+       from distlib import version;
+ver = sys.version.split ()[[0]];
+(tst_cmp, tst_ver) = "$1".split ();
+tst_ver = tst_ver.strip ("'");
+eval ("print (version.LegacyVersion (ver)"+ tst_cmp +"version.LegacyVersion (tst_ver))")
+EOD`
                if test "$ac_supports_python_ver" = "True"; then
                   AC_MSG_RESULT([yes])
                else
index b1750942f53f2c0448bac24d5c729e9b2beaa675..b073d68a46cfb2fb81e6efed74a441dc54da13e3 100644 (file)
@@ -306,6 +306,11 @@ Requires:       libffi
 Requires:       python%{__python_pkg_version}
 Requires:       %{__python_cffi_pkg}
 %if 0%{?rhel}%{?fedora}%{?suse_version}
+%if 0%{?rhel} >= 8 || 0%{?centos} >= 8 || 0%{?fedora} >= 28
+BuildRequires:  python3-packaging
+%else
+BuildRequires:  python-packaging
+%endif
 BuildRequires:  python%{__python_pkg_version}-devel
 BuildRequires:  %{__python_cffi_pkg}
 BuildRequires:  %{__python_setuptools_pkg}