eclass/python-utils-r1: Sync with Gentoo

It's from Gentoo commit cf582a6d842973915d1cec5c05a8b4c311b78288.
This commit is contained in:
Flatcar Buildbot 2023-08-07 07:12:54 +00:00 committed by Krzesimir Nowak
parent eb1df1a05e
commit 650ff58100

View File

@ -238,12 +238,11 @@ _python_impl_matches() {
fi
return 0
;;
3.9|3.10)
# <pypy3-7.3.12 is 3.9, >=7.3.12 is 3.10
3.10)
[[ ${impl} == python${pattern/./_} || ${impl} == pypy3 ]] &&
return 0
;;
3.8|3.1[1-2])
3.8|3.9|3.1[1-2])
[[ ${impl} == python${pattern/./_} ]] && return 0
;;
*)
@ -339,7 +338,7 @@ _python_export() {
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
;;
PYTHON)
export PYTHON=${BROOT-${EPREFIX}}/usr/bin/${impl}
export PYTHON=${BROOT}/usr/bin/${impl}
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
;;
PYTHON_SITEDIR)
@ -447,14 +446,12 @@ _python_export() {
PYTHON_PKG_DEP)
local d
case ${impl} in
python3.10)
PYTHON_PKG_DEP=">=dev-lang/python-3.10.12:3.10";;
python3.11)
PYTHON_PKG_DEP=">=dev-lang/python-3.11.4:3.11";;
python3.12)
PYTHON_PKG_DEP=">=dev-lang/python-3.12.0_beta3:3.12";;
python*)
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
;;
pypy3)
PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.11_p1:0=';;
PYTHON_PKG_DEP="dev-python/${impl}:="
;;
*)
die "Invalid implementation: ${impl}"
esac
@ -1026,8 +1023,6 @@ python_fix_shebang() {
debug-print-function ${FUNCNAME} "${@}"
[[ ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)"
local PYTHON
_python_export "${EPYTHON}" PYTHON
local force quiet
while [[ ${@} ]]; do
@ -1100,7 +1095,7 @@ python_fix_shebang() {
if [[ ! ${error} ]]; then
debug-print "${FUNCNAME}: in file ${f#${D%/}}"
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}"
sed -i -e "1s@${from}@#!${PYTHON}@" "${f}" || die
sed -i -e "1s@${from}@#!${EPREFIX}/usr/bin/${EPYTHON}@" "${f}" || die
any_fixed=1
else
eerror "The file has incompatible shebang:"
@ -1236,6 +1231,55 @@ _python_check_EPYTHON() {
fi
}
# @FUNCTION: _python_check_occluded_packages
# @INTERNAL
# @DESCRIPTION:
# Check if the current directory does not contain any incomplete
# package sources that would block installed packages from being used
# (and effectively e.g. make it impossible to load compiled extensions).
_python_check_occluded_packages() {
debug-print-function ${FUNCNAME} "${@}"
# DO NOT ENABLE THIS unless you're going to check for false
# positives before filing bugs.
[[ ! ${PYTHON_EXPERIMENTAL_QA} ]] && return
type -P diff &>/dev/null || return
[[ -z ${BUILD_DIR} || ! -d ${BUILD_DIR}/install ]] && return
local sitedir="${BUILD_DIR}/install$(python_get_sitedir)"
# avoid unnecessarily checking if we are inside install dir
[[ ${sitedir} -ef . ]] && return
local f fn diff
for f in "${sitedir}"/*/; do
f=${f%/}
fn=${f##*/}
# skip metadata directories
[[ ${fn} == *.dist-info || ${fn} == *.egg-info ]] && continue
if [[ -d ${fn} ]]; then
diff=$(diff -dupr -x "__pycache__" "${fn}" "${sitedir}/${fn}")
if [[ -n ${diff} ]]; then
eqawarn "The directory ${fn} occludes package installed for ${EPYTHON}."
echo
echo ">>> Diff:"
echo "${diff}"
echo "<<< End-of-diff"
echo
if [[ ! ${_PYTHON_WARNED_OCCLUDED_PACKAGES} ]]; then
eqawarn "The complete build log includes diffs."
eqawarn "For more information on occluded packages, please see:"
eqawarn "https://projects.gentoo.org/python/guide/test.html#importerrors-for-c-extensions"
_PYTHON_WARNED_OCCLUDED_PACKAGES=1
fi
fi
fi
done
}
# @VARIABLE: EPYTEST_DESELECT
# @DEFAULT_UNSET
# @DESCRIPTION:
@ -1266,6 +1310,7 @@ epytest() {
debug-print-function ${FUNCNAME} "${@}"
_python_check_EPYTHON
_python_check_occluded_packages
local color
case ${NOCOLOR} in
@ -1350,6 +1395,7 @@ eunittest() {
debug-print-function ${FUNCNAME} "${@}"
_python_check_EPYTHON
_python_check_occluded_packages
# unittest fails with "no tests" correctly since Python 3.12
local runner=unittest