diff options
author | Michał Górny <mgorny@gentoo.org> | 2019-12-07 16:29:22 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-12-07 16:29:55 +0100 |
commit | a4d2a8bfd8059ea7502c11baeec0503b0fc01987 (patch) | |
tree | 229f80f42e16a7da5bf13f9b26504510debc4b24 /eclass | |
parent | python-single-r1.eclass: Revert "Remove unused PYTHON_TARGETS" (diff) | |
download | gentoo-a4d2a8bfd8059ea7502c11baeec0503b0fc01987.tar.gz gentoo-a4d2a8bfd8059ea7502c11baeec0503b0fc01987.tar.bz2 gentoo-a4d2a8bfd8059ea7502c11baeec0503b0fc01987.zip |
python-single-r1.eclass: Revert "Remove deprecated PYTHON_USEDEP..."
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/python-single-r1.eclass | 122 |
1 files changed, 109 insertions, 13 deletions
diff --git a/eclass/python-single-r1.eclass b/eclass/python-single-r1.eclass index 438f25134c34..f042bf4e1167 100644 --- a/eclass/python-single-r1.eclass +++ b/eclass/python-single-r1.eclass @@ -139,6 +139,29 @@ EXPORT_FUNCTIONS pkg_setup # python_single_target_pypy? ( virtual/pypy[gdbm] ) # @CODE +# @ECLASS-VARIABLE: PYTHON_USEDEP +# @DESCRIPTION: +# DEPRECATED. Use PYTHON_SINGLE_USEDEP or python_gen_cond_dep with +# PYTHON_MULTI_USEDEP placeholder instead. +# +# This is an eclass-generated USE-dependency string which can be used to +# depend on another Python package being built for the same Python +# implementations. +# +# The generate USE-flag list is compatible with packages using python-r1, +# python-single-r1 and python-distutils-ng eclasses. It must not be used +# on packages using python.eclass. +# +# Example use: +# @CODE +# RDEPEND="dev-python/foo[${PYTHON_USEDEP}]" +# @CODE +# +# Example value: +# @CODE +# python_targets_python2_7(-)?,python_single_target_python3_4(+)? +# @CODE + # @ECLASS-VARIABLE: PYTHON_SINGLE_USEDEP # @DESCRIPTION: # This is an eclass-generated USE-dependency string which can be used to @@ -203,6 +226,7 @@ _python_single_set_globals() { local flags_mt=( "${_PYTHON_SUPPORTED_IMPLS[@]/#/python_targets_}" ) local flags=( "${_PYTHON_SUPPORTED_IMPLS[@]/#/python_single_target_}" ) + local unflags=( "${_PYTHON_UNSUPPORTED_IMPLS[@]/#/-python_single_target_}" ) if [[ ${#_PYTHON_SUPPORTED_IMPLS[@]} -eq 1 ]]; then # if only one implementation is supported, use IUSE defaults @@ -213,6 +237,8 @@ _python_single_set_globals() { fi local requse="^^ ( ${flags[*]} )" + local optflags="${flags_mt[@]/%/(-)?},${unflags[@]/%/(-)},${flags[@]/%/(+)?}" + local usedep="${optflags// /,}" local single_flags="${flags[@]/%/(-)?}" local single_usedep=${single_flags// /,} @@ -250,6 +276,13 @@ _python_single_set_globals() { die "PYTHON_REQUIRED_USE integrity check failed" fi + if [[ ${PYTHON_USEDEP} != "${usedep}" ]]; then + eerror "PYTHON_USEDEP have changed between inherits!" + eerror "Before: ${PYTHON_USEDEP}" + eerror "Now : ${usedep}" + die "PYTHON_USEDEP integrity check failed" + fi + if [[ ${PYTHON_SINGLE_USEDEP} != "${single_usedep}" ]]; then eerror "PYTHON_SINGLE_USEDEP have changed between inherits!" eerror "Before: ${PYTHON_SINGLE_USEDEP}" @@ -259,8 +292,10 @@ _python_single_set_globals() { else PYTHON_DEPS=${deps} PYTHON_REQUIRED_USE=${requse} + PYTHON_USEDEP=${usedep} PYTHON_SINGLE_USEDEP=${single_usedep} - readonly PYTHON_DEPS PYTHON_REQUIRED_USE PYTHON_SINGLE_USEDEP + readonly PYTHON_DEPS PYTHON_REQUIRED_USE PYTHON_USEDEP \ + PYTHON_SINGLE_USEDEP fi } _python_single_set_globals @@ -270,29 +305,45 @@ if [[ ! ${_PYTHON_SINGLE_R1} ]]; then # @FUNCTION: _python_gen_usedep # @INTERNAL -# @USAGE: [<pattern>...] +# @USAGE: <-s|-u> [<pattern>...] # @DESCRIPTION: # Output a USE dependency string for Python implementations which # are both in PYTHON_COMPAT and match any of the patterns passed # as parameters to the function. # +# The first argument specifies USE-dependency type: '-s' for new-style +# PYTHON_SINGLE_USEDEP, '-u' for backwards-compatible PYTHON_USEDEP. +# # The patterns can be either fnmatch-style patterns (matched via bash # == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate # appropriately all enabled Python 2/3 implementations (alike # python_is_python3). Remember to escape or quote the fnmatch patterns # to prevent accidental shell filename expansion. # -# This is an internal function used to implement python_gen_cond_dep. +# This is an internal function used to implement python_gen_cond_dep +# and deprecated python_gen_usedep. _python_gen_usedep() { debug-print-function ${FUNCNAME} "${@}" + local mode=${1} + shift local impl matches=() for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then - matches+=( - "python_single_target_${impl}(-)?" - ) + case ${mode} in + -s) + matches+=( + "python_single_target_${impl}(-)?" + ) + ;; + -u) + matches+=( + "python_targets_${impl}(-)?" + "python_single_target_${impl}(+)?" + ) + ;; + esac fi done @@ -302,6 +353,46 @@ _python_gen_usedep() { echo "${out// /,}" } +# @FUNCTION: python_gen_usedep +# @USAGE: <pattern> [...] +# @DESCRIPTION: +# DEPRECATED. Please use python_gen_cond_dep instead. +# +# Output a USE dependency string for Python implementations which +# are both in PYTHON_COMPAT and match any of the patterns passed +# as parameters to the function. +# +# The patterns can be either fnmatch-style patterns (matched via bash +# == operator against PYTHON_COMPAT values) or '-2' / '-3' to indicate +# appropriately all enabled Python 2/3 implementations (alike +# python_is_python3). Remember to escape or quote the fnmatch patterns +# to prevent accidental shell filename expansion. +# +# When all implementations are requested, please use ${PYTHON_USEDEP} +# instead. Please also remember to set an appropriate REQUIRED_USE +# to avoid ineffective USE flags. +# +# Example: +# @CODE +# PYTHON_COMPAT=( python{2_7,3_4} ) +# DEPEND="doc? ( dev-python/epydoc[$(python_gen_usedep 'python2*')] )" +# @CODE +# +# It will cause the dependency to look like: +# @CODE +# DEPEND="doc? ( dev-python/epydoc[python_targets_python2_7(-)?,...] )" +# @CODE +python_gen_usedep() { + debug-print-function ${FUNCNAME} "${@}" + + # output only once, during some reasonable phase + # (avoid spamming cache regen runs) + if [[ ${EBUILD_PHASE} == setup ]]; then + eqawarn "python_gen_usedep() is deprecated. Please use python_gen_cond_dep instead." + fi + _python_gen_usedep -u "${@}" +} + # @FUNCTION: python_gen_useflags # @USAGE: [<pattern>...] # @DESCRIPTION: @@ -353,9 +444,10 @@ python_gen_useflags() { # to prevent accidental shell filename expansion. # # In order to enforce USE constraints on the packages, verbatim -# '${PYTHON_SINGLE_USEDEP}' and '${PYTHON_MULTI_USEDEP}' (quoted!) may -# be placed in the dependency specification. It will get expanded within -# the function into a proper USE dependency string. +# '${PYTHON_USEDEP}', '${PYTHON_SINGLE_USEDEP}' +# and '${PYTHON_MULTI_USEDEP}' (quoted!) may be placed in the dependency +# specification. It will get expanded within the function into a proper +# USE dependency string. # # Example: # @CODE @@ -381,11 +473,15 @@ python_gen_cond_dep() { for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then - # substitute ${PYTHON_SINGLE_USEDEP} if used - # (since python_gen_usedep() will not return - # ${PYTHON_SINGLE_USEDEP}, the code is run at most once) + # substitute ${PYTHON_USEDEP} if used + # (since python_gen_usedep() will not return ${PYTHON_USEDEP} + # the code is run at most once) + if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then + local usedep=$(_python_gen_usedep -u "${@}") + dep=${dep//\$\{PYTHON_USEDEP\}/${usedep}} + fi if [[ ${dep} == *'${PYTHON_SINGLE_USEDEP}'* ]]; then - local usedep=$(_python_gen_usedep "${@}") + local usedep=$(_python_gen_usedep -s "${@}") dep=${dep//\$\{PYTHON_SINGLE_USEDEP\}/${usedep}} fi local multi_usedep="python_targets_${impl}(-)" |