mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-25 07:31:01 +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
|
fi
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
3.9|3.10)
|
3.10)
|
||||||
# <pypy3-7.3.12 is 3.9, >=7.3.12 is 3.10
|
|
||||||
[[ ${impl} == python${pattern/./_} || ${impl} == pypy3 ]] &&
|
[[ ${impl} == python${pattern/./_} || ${impl} == pypy3 ]] &&
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
3.8|3.1[1-2])
|
3.8|3.9|3.1[1-2])
|
||||||
[[ ${impl} == python${pattern/./_} ]] && return 0
|
[[ ${impl} == python${pattern/./_} ]] && return 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -339,7 +338,7 @@ _python_export() {
|
|||||||
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
|
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
|
||||||
;;
|
;;
|
||||||
PYTHON)
|
PYTHON)
|
||||||
export PYTHON=${BROOT-${EPREFIX}}/usr/bin/${impl}
|
export PYTHON=${BROOT}/usr/bin/${impl}
|
||||||
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
|
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
|
||||||
;;
|
;;
|
||||||
PYTHON_SITEDIR)
|
PYTHON_SITEDIR)
|
||||||
@ -447,14 +446,12 @@ _python_export() {
|
|||||||
PYTHON_PKG_DEP)
|
PYTHON_PKG_DEP)
|
||||||
local d
|
local d
|
||||||
case ${impl} in
|
case ${impl} in
|
||||||
python3.10)
|
python*)
|
||||||
PYTHON_PKG_DEP=">=dev-lang/python-3.10.12:3.10";;
|
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
|
||||||
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";;
|
|
||||||
pypy3)
|
pypy3)
|
||||||
PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.11_p1:0=';;
|
PYTHON_PKG_DEP="dev-python/${impl}:="
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
die "Invalid implementation: ${impl}"
|
die "Invalid implementation: ${impl}"
|
||||||
esac
|
esac
|
||||||
@ -1026,8 +1023,6 @@ python_fix_shebang() {
|
|||||||
debug-print-function ${FUNCNAME} "${@}"
|
debug-print-function ${FUNCNAME} "${@}"
|
||||||
|
|
||||||
[[ ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)"
|
[[ ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)"
|
||||||
local PYTHON
|
|
||||||
_python_export "${EPYTHON}" PYTHON
|
|
||||||
|
|
||||||
local force quiet
|
local force quiet
|
||||||
while [[ ${@} ]]; do
|
while [[ ${@} ]]; do
|
||||||
@ -1100,7 +1095,7 @@ python_fix_shebang() {
|
|||||||
if [[ ! ${error} ]]; then
|
if [[ ! ${error} ]]; then
|
||||||
debug-print "${FUNCNAME}: in file ${f#${D%/}}"
|
debug-print "${FUNCNAME}: in file ${f#${D%/}}"
|
||||||
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}"
|
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
|
any_fixed=1
|
||||||
else
|
else
|
||||||
eerror "The file has incompatible shebang:"
|
eerror "The file has incompatible shebang:"
|
||||||
@ -1236,6 +1231,55 @@ _python_check_EPYTHON() {
|
|||||||
fi
|
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
|
# @VARIABLE: EPYTEST_DESELECT
|
||||||
# @DEFAULT_UNSET
|
# @DEFAULT_UNSET
|
||||||
# @DESCRIPTION:
|
# @DESCRIPTION:
|
||||||
@ -1266,6 +1310,7 @@ epytest() {
|
|||||||
debug-print-function ${FUNCNAME} "${@}"
|
debug-print-function ${FUNCNAME} "${@}"
|
||||||
|
|
||||||
_python_check_EPYTHON
|
_python_check_EPYTHON
|
||||||
|
_python_check_occluded_packages
|
||||||
|
|
||||||
local color
|
local color
|
||||||
case ${NOCOLOR} in
|
case ${NOCOLOR} in
|
||||||
@ -1350,6 +1395,7 @@ eunittest() {
|
|||||||
debug-print-function ${FUNCNAME} "${@}"
|
debug-print-function ${FUNCNAME} "${@}"
|
||||||
|
|
||||||
_python_check_EPYTHON
|
_python_check_EPYTHON
|
||||||
|
_python_check_occluded_packages
|
||||||
|
|
||||||
# unittest fails with "no tests" correctly since Python 3.12
|
# unittest fails with "no tests" correctly since Python 3.12
|
||||||
local runner=unittest
|
local runner=unittest
|
||||||
|
Loading…
x
Reference in New Issue
Block a user