commit:     0fabf3873a258d76a14a74475ef185d8b51741a0
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu May  3 13:41:10 2018 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon May  7 07:43:29 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0fabf387

python-utils-r1.eclass: Initial EAPI 7 support

Add initial EAPI 7 support.  Handle trailing slash in D/ED correctly.
Support new has_version switches.

This does not provide proper cross support.  In particular, the PYTHON
variable (full path to the interpreter) is used both in contexts
of BDEPEND and DEPEND, so we need to clean the uses first.

 eclass/python-utils-r1.eclass | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index 68fb9ba2578..3a462e34614 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: python-utils-r1.eclass
@@ -19,7 +19,7 @@
 # https://wiki.gentoo.org/wiki/Project:Python/python-utils-r1
 
 case "${EAPI:-0}" in
-       0|1|2|3|4|5|6)
+       0|1|2|3|4|5|6|7)
                ;;
        *)
                die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}"
@@ -688,8 +688,8 @@ python_optimize() {
                        # 2) skip paths which do not exist
                        #    (python2.6 complains about them verbosely)
 
-                       if [[ ${f} == /* && -d ${D}${f} ]]; then
-                               set -- "${D}${f}" "${@}"
+                       if [[ ${f} == /* && -d ${D%/}${f} ]]; then
+                               set -- "${D%/}${f}" "${@}"
                        fi
                done < <("${PYTHON}" -c 'import sys; 
print("\0".join(sys.path))' || die)
 
@@ -699,7 +699,7 @@ python_optimize() {
        local d
        for d; do
                # make sure to get a nice path without //
-               local instpath=${d#${D}}
+               local instpath=${d#${D%/}}
                instpath=/${instpath##/}
 
                case "${EPYTHON}" in
@@ -924,7 +924,7 @@ python_domodule() {
                doins -r "${@}" || return ${?}
        )
 
-       python_optimize "${ED}/${d}"
+       python_optimize "${ED%/}/${d}"
 }
 
 # @FUNCTION: python_doheader
@@ -1086,9 +1086,20 @@ python_is_python3() {
 python_is_installed() {
        local impl=${1:-${EPYTHON}}
        [[ ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON"
+       local hasv_args=()
+
+       case ${EAPI:-0} in
+               0|1|2|3|4)
+                       local -x ROOT=/
+                       ;;
+               5|6)
+                       hasv_args+=( --host-root )
+                       ;;
+               *)
+                       hasv_args+=( -b )
+                       ;;
+       esac
 
-       # for has_version
-       local -x ROOT=/
        case "${impl}" in
                pypy|pypy3)
                        local append=
@@ -1097,13 +1108,13 @@ python_is_installed() {
                        fi
 
                        # be happy with just the interpeter, no need for the 
virtual
-                       has_version "dev-python/${impl}${append}" \
-                               || has_version "dev-python/${impl}-bin${append}"
+                       has_version "${hasv_args[@]}" 
"dev-python/${impl}${append}" \
+                               || has_version "${hasv_args[@]}" 
"dev-python/${impl}-bin${append}"
                        ;;
                *)
                        local PYTHON_PKG_DEP
                        python_export "${impl}" PYTHON_PKG_DEP
-                       has_version "${PYTHON_PKG_DEP}"
+                       has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"
                        ;;
        esac
 }
@@ -1167,7 +1178,7 @@ python_fix_shebang() {
                                for i in "${split_shebang[@]}"; do
                                        case "${i}" in
                                                *"${EPYTHON}")
-                                                       debug-print 
"${FUNCNAME}: in file ${f#${D}}"
+                                                       debug-print 
"${FUNCNAME}: in file ${f#${D%/}}"
                                                        debug-print 
"${FUNCNAME}: shebang matches EPYTHON: ${shebang}"
 
                                                        # Nothing to do, move 
along.
@@ -1176,7 +1187,7 @@ python_fix_shebang() {
                                                        break
                                                        ;;
                                                *python|*python[23])
-                                                       debug-print 
"${FUNCNAME}: in file ${f#${D}}"
+                                                       debug-print 
"${FUNCNAME}: in file ${f#${D%/}}"
                                                        debug-print 
"${FUNCNAME}: rewriting shebang: ${shebang}"
 
                                                        if [[ ${i} == *python2 
]]; then
@@ -1226,7 +1237,7 @@ python_fix_shebang() {
                        fi
 
                        if [[ ! ${quiet} ]]; then
-                               einfo "Fixing shebang in ${f#${D}}."
+                               einfo "Fixing shebang in ${f#${D%/}}."
                        fi
 
                        if [[ ! ${error} ]]; then
@@ -1240,7 +1251,7 @@ python_fix_shebang() {
                                any_fixed=1
                        else
                                eerror "The file has incompatible shebang:"
-                               eerror "  file: ${f#${D}}"
+                               eerror "  file: ${f#${D%/}}"
                                eerror "  current shebang: ${shebang}"
                                eerror "  requested impl: ${EPYTHON}"
                                die "${FUNCNAME}: conversion of incompatible 
shebang requested"
@@ -1251,7 +1262,7 @@ python_fix_shebang() {
                        local cmd=eerror
                        [[ ${EAPI:-0} == [012345] ]] && cmd=eqawarn
 
-                       "${cmd}" "QA warning: ${FUNCNAME}, ${path#${D}} did not 
match any fixable files."
+                       "${cmd}" "QA warning: ${FUNCNAME}, ${path#${D%/}} did 
not match any fixable files."
                        if [[ ${any_correct} ]]; then
                                "${cmd}" "All files have ${EPYTHON} shebang 
already."
                        else

Reply via email to