python-utils-r1.eclass: _python_impl_matches, handle both forms of impl
authorMichał Górny <mgorny@gentoo.org>
Sat, 20 May 2017 07:04:06 +0000 (09:04 +0200)
committerMichał Górny <mgorny@gentoo.org>
Mon, 29 May 2017 21:53:27 +0000 (23:53 +0200)
Make the pattern matching code in _python_impl_matches() more lax,
allowing (accidental) mixing of PYTHON_COMPAT-style values with
EPYTHON-style values. This is trivial to do, and solves the problem
introduced by complexity-by-limitation of other eclasses -- where
patterns for dependency strings are using PYTHON_COMPAT syntax,
and patterns for python_setup are using EPYTHON syntax.

eclass/python-utils-r1.eclass

index 0bf7e7ec1a3e35dde616c3a02736e3d49c38e174..68fb9ba2578d8bf0c6b4385c21688569df5e5187 100644 (file)
@@ -169,7 +169,8 @@ _python_set_impls() {
 # Check whether the specified <impl> matches at least one
 # of the patterns following it. Return 0 if it does, 1 otherwise.
 #
-# <impl> should be in PYTHON_COMPAT form. The patterns can be either:
+# <impl> can be in PYTHON_COMPAT or EPYTHON form. The patterns can be
+# either:
 # a) fnmatch-style patterns, e.g. 'python2*', 'pypy'...
 # b) '-2' to indicate all Python 2 variants (= !python_is_python3)
 # c) '-3' to indicate all Python 3 variants (= python_is_python3)
@@ -186,7 +187,8 @@ _python_impl_matches() {
                elif [[ ${pattern} == -3 ]]; then
                        python_is_python3 "${impl}"
                        return
-               elif [[ ${impl} == ${pattern} ]]; then
+               # unify value style to allow lax matching
+               elif [[ ${impl/./_} == ${pattern/./_} ]]; then
                        return 0
                fi
        done