commit:     f202e56a0ead3feba43041ee4d5cc45f93c86d85
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 17 22:23:53 2015 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Dec 31 14:52:03 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f202e56a

python-r1.eclass: Introduce python_gen_impl_dep

Add a python_gen_impl_dep() that serves the purpose of generating custom
dependencies on the Python interpreter (like PYTHON_DEPS). The function
provides ability to request dependencies with another USE dependency
string (different than global PYTHON_REQ_USE) and limit the dependencies
to subset of supported implementations.

 eclass/python-r1.eclass | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/eclass/python-r1.eclass b/eclass/python-r1.eclass
index 76fd944..6106577 100644
--- a/eclass/python-r1.eclass
+++ b/eclass/python-r1.eclass
@@ -383,6 +383,58 @@ python_gen_cond_dep() {
        echo "${matches[@]}"
 }
 
+# @FUNCTION: python_gen_impl_dep
+# @USAGE: [<requested-use-flags> [<impl-pattern>...]]
+# @DESCRIPTION:
+# Output a dependency on Python implementations with the specified USE
+# dependency string appended, or no USE dependency string if called
+# without the argument (or with empty argument). If any implementation
+# patterns are passed, the output dependencies will be generated only
+# for the implementations matching them.
+#
+# Use this function when you need to request different USE flags
+# on the Python interpreter depending on package's USE flags. If you
+# only need a single set of interpreter USE flags, just set
+# PYTHON_REQ_USE and use ${PYTHON_DEPS} globally.
+#
+# Example:
+# @CODE
+# PYTHON_COMPAT=( python{2_7,3_{3,4}} pypy )
+# RDEPEND="foo? ( $(python_gen_impl_dep 'xml(+)') )"
+# @CODE
+#
+# It will cause the variable to look like:
+# @CODE
+# RDEPEND="foo? (
+#   python_targets_python2_7? (
+#     dev-lang/python:2.7[xml(+)] )
+#      python_targets_pypy? (
+#     dev-python/pypy[xml(+)] ) )"
+# @CODE
+python_gen_impl_dep() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       local impl pattern
+       local matches=()
+
+       local PYTHON_REQ_USE=${1}
+       shift
+
+       local patterns=( "${@-*}" )
+       for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
+               for pattern in "${patterns[@]}"; do
+                       if [[ ${impl} == ${pattern} ]]; then
+                               local PYTHON_PKG_DEP
+                               python_export "${impl}" PYTHON_PKG_DEP
+                               matches+=( "python_targets_${impl}? ( 
${PYTHON_PKG_DEP} )" )
+                               break
+                       fi
+               done
+       done
+
+       echo "${matches[@]}"
+}
+
 # @ECLASS-VARIABLE: BUILD_DIR
 # @DESCRIPTION:
 # The current build directory. In global scope, it is supposed to

Reply via email to