diff options
author | Rich Ercolani <214141+rincebrain@users.noreply.github.com> | 2021-11-01 17:54:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 14:54:47 -0700 |
commit | 8cd9f20a34c72f57d1748f27a79230fcdc41e9b8 (patch) | |
tree | 32fd7fb7bef87ca495888d1021fee35a44736daa | |
parent | 71c6098526c6d5fbfa84a58cefe6cdc403488d8c (diff) |
Correct a flaw in the Python 3 version checking (#12636)
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
-rw-r--r-- | .github/workflows/zfs-tests-functional.yml | 2 | ||||
-rw-r--r-- | .github/workflows/zfs-tests-sanity.yml | 2 | ||||
-rw-r--r-- | .github/workflows/zloop.yml | 4 | ||||
-rw-r--r-- | config/always-pyzfs.m4 | 15 | ||||
-rw-r--r-- | config/ax_python_devel.m4 | 33 | ||||
-rw-r--r-- | rpm/generic/zfs.spec.in | 5 |
6 files changed, 51 insertions, 10 deletions
diff --git a/.github/workflows/zfs-tests-functional.yml b/.github/workflows/zfs-tests-functional.yml index 79973123f..aa93013d9 100644 --- a/.github/workflows/zfs-tests-functional.yml +++ b/.github/workflows/zfs-tests-functional.yml @@ -26,7 +26,7 @@ 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 + python3 python3-dev python3-setuptools python3-cffi python3-packaging - name: Autogen.sh run: | sh autogen.sh diff --git a/.github/workflows/zfs-tests-sanity.yml b/.github/workflows/zfs-tests-sanity.yml index df089c81f..36d4de130 100644 --- a/.github/workflows/zfs-tests-sanity.yml +++ b/.github/workflows/zfs-tests-sanity.yml @@ -22,7 +22,7 @@ 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 + python3 python3-dev python3-setuptools python3-cffi python3-packaging - name: Autogen.sh run: | sh autogen.sh diff --git a/.github/workflows/zloop.yml b/.github/workflows/zloop.yml index 22c02b76e..cf81ad4bc 100644 --- a/.github/workflows/zloop.yml +++ b/.github/workflows/zloop.yml @@ -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 diff --git a/config/always-pyzfs.m4 b/config/always-pyzfs.m4 index 76e07b593..fa39fd885 100644 --- a/config/always-pyzfs.m4 +++ b/config/always-pyzfs.m4 @@ -47,6 +47,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 # AS_IF([test "x$enable_pyzfs" = xcheck -o "x$enable_pyzfs" = xyes], [ diff --git a/config/ax_python_devel.m4 b/config/ax_python_devel.m4 index faf6c2b0d..fcf73dc20 100644 --- a/config/ax_python_devel.m4 +++ b/config/ax_python_devel.m4 @@ -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 diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in index 7fa28ac72..4a37ae8ce 100644 --- a/rpm/generic/zfs.spec.in +++ b/rpm/generic/zfs.spec.in @@ -311,6 +311,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} |