mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-24 23:21:17 +02:00
eclass/python-utils-r1: Sync with Gentoo
It's from Gentoo commit cf582a6d842973915d1cec5c05a8b4c311b78288.
This commit is contained in:
parent
eb1df1a05e
commit
650ff58100
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user