diff options
author | Michał Górny <mgorny@gentoo.org> | 2020-03-17 11:37:02 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2020-08-07 12:39:56 +0200 |
commit | 639e36f7af044be17849c1067a8cd9f831df9095 (patch) | |
tree | 3d463e514bc5881c65b7b13d36a49d7a2f339b4e /eclass | |
parent | package.mask: Last rite app-i18n/sunpinyin & revdeps (diff) | |
download | gentoo-639e36f7af044be17849c1067a8cd9f831df9095.tar.gz gentoo-639e36f7af044be17849c1067a8cd9f831df9095.tar.bz2 gentoo-639e36f7af044be17849c1067a8cd9f831df9095.zip |
python*-r1.eclass: Check for invalid impl patterns
Check for invalid implementation patterns passed to python_gen*
functions, python_setup, etc. Currently the functions silently ignore
pattern mismatches which is fine for patterns matching historical
implementations but also hides errors in patterns.
After this change, each pattern must match at least one current or
historical implementation. If no match is found, the function dies
indicating developer's mistake.
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/python-r1.eclass | 6 | ||||
-rw-r--r-- | eclass/python-single-r1.eclass | 4 | ||||
-rw-r--r-- | eclass/python-utils-r1.eclass | 34 |
3 files changed, 44 insertions, 0 deletions
diff --git a/eclass/python-r1.eclass b/eclass/python-r1.eclass index 8c3ff5b08095..40944684ec8b 100644 --- a/eclass/python-r1.eclass +++ b/eclass/python-r1.eclass @@ -297,6 +297,7 @@ _python_gen_usedep() { local impl matches=() + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=( @@ -380,6 +381,7 @@ python_gen_useflags() { local impl matches=() + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=( "python_targets_${impl}" ) @@ -428,6 +430,7 @@ python_gen_cond_dep() { local dep=${1} shift + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then # substitute ${PYTHON_USEDEP} if used @@ -486,6 +489,7 @@ python_gen_impl_dep() { local PYTHON_REQ_USE=${1} shift + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then local PYTHON_PKG_DEP @@ -564,6 +568,7 @@ python_gen_any_dep() { shift local i PYTHON_PKG_DEP out= + _python_verify_patterns "${@}" for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${i}" "${@}"; then local PYTHON_USEDEP="python_targets_${i}(-),python_single_target_${i}(+)" @@ -751,6 +756,7 @@ python_setup() { # (reverse iteration -- newest impl first) local found + _python_verify_patterns "${@}" for (( i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- )); do local impl=${_PYTHON_SUPPORTED_IMPLS[i]} diff --git a/eclass/python-single-r1.eclass b/eclass/python-single-r1.eclass index 6fedc7cdf4e0..dc032379cd84 100644 --- a/eclass/python-single-r1.eclass +++ b/eclass/python-single-r1.eclass @@ -291,6 +291,7 @@ _python_gen_usedep() { local impl matches=() + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=( @@ -333,6 +334,7 @@ python_gen_useflags() { local impl matches=() + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=( "python_single_target_${impl}" ) @@ -382,6 +384,7 @@ python_gen_cond_dep() { local dep=${1} shift + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then # substitute ${PYTHON_SINGLE_USEDEP} if used @@ -445,6 +448,7 @@ python_gen_impl_dep() { local PYTHON_REQ_USE=${1} shift + _python_verify_patterns "${@}" for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then local PYTHON_PKG_DEP diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass index 9bad72a77e98..87cb662c64fd 100644 --- a/eclass/python-utils-r1.eclass +++ b/eclass/python-utils-r1.eclass @@ -45,6 +45,18 @@ _PYTHON_ALL_IMPLS=( ) readonly _PYTHON_ALL_IMPLS +# @ECLASS-VARIABLE: _PYTHON_HISTORICAL_IMPLS +# @INTERNAL +# @DESCRIPTION: +# All historical Python implementations that are no longer supported. +_PYTHON_HISTORICAL_IMPLS=( + jython2_7 + pypy pypy1_{8,9} pypy2_0 + python2_{5,6} + python3_{1,2,3,4,5} +) +readonly _PYTHON_HISTORICAL_IMPLS + # @ECLASS-VARIABLE: PYTHON_COMPAT_NO_STRICT # @INTERNAL # @DESCRIPTION: @@ -89,6 +101,28 @@ _python_impl_supported() { esac } +# @FUNCTION: _python_verify_patterns +# @USAGE: <pattern>... +# @INTERNAL +# @DESCRIPTION: +# Verify whether the patterns passed to the eclass function are correct +# (i.e. can match any valid implementation). Dies on wrong pattern. +_python_verify_patterns() { + debug-print-function ${FUNCNAME} "${@}" + + local impl pattern + for pattern; do + [[ ${pattern} == -[23] ]] && continue + + for impl in "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}" + do + [[ ${impl} == ${pattern/./_} ]] && continue 2 + done + + die "Invalid implementation pattern: ${pattern}" + done +} + # @FUNCTION: _python_set_impls # @INTERNAL # @DESCRIPTION: |