You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/metadata/install-qa-check.d/60python-pyc

88 lines
2.3 KiB

# Copyright 2019-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# QA check: ensure that Python modules are compiled after installing
# Maintainer: Python project <python@gentoo.org>
if [[ ${EAPI} == [6-7] ]]; then
inherit python-utils-r1
python_pyc_check() {
local impl missing=() outdated=()
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do
_python_export "${impl}" EPYTHON PYTHON
[[ -x ${PYTHON} ]] || continue
local sitedir=$(python_get_sitedir "${impl}")
if [[ -d ${D}${sitedir} ]]; then
local suffixes=() subdir=
case ${EPYTHON} in
python2*)
suffixes=( .py{c,o} )
;;
pypy)
suffixes=( .pyc )
;;
python3*|pypy3*)
local tag=$("${PYTHON}" -c 'import sys; print(sys.implementation.cache_tag)')
suffixes=( ".${tag}"{,.opt-{1,2}}.pyc )
subdir=__pycache__/
;;
*)
# skip testing unknown impl
continue
;;
esac
einfo "Verifying compiled files in ${sitedir}"
local f s
while read -d $'\0' -r f; do
local dir=${f%/*}
local basename=${f##*/}
basename=${basename%.py}
for s in "${suffixes[@]}"; do
local cache=${dir}/${subdir}${basename}${s}
if [[ ! -f ${cache} ]]; then
missing+=( "${cache}" )
elif [[ ${f} -nt ${cache} ]]; then
outdated+=( "${cache}" )
fi
done
done < <(find "${D}${sitedir}" -name '*.py' -print0)
fi
done
if [[ ${missing[@]} ]]; then
eqawarn
eqawarn "This package installs one or more Python modules that are not byte-compiled."
eqawarn "The following files are missing:"
eqawarn
eqatag -v python-pyc.missing "${missing[@]#${D}}"
fi
if [[ ${outdated[@]} ]]; then
eqawarn
eqawarn "This package installs one or more compiled Python modules that have older"
eqawarn "timestamps than the corresponding source files:"
eqawarn
eqatag -v python-pyc.outdated "${outdated[@]#${D}}"
fi
if [[ ${missing[@]} || ${outdated[@]} ]]; then
eqawarn
eqawarn "Please either fix the upstream build system to byte-compile Python modules"
eqawarn "correctly, or call python_optimize after installing them. For more"
eqawarn "information, see:"
eqawarn "https://wiki.gentoo.org/wiki/Project:Python/Byte_compiling"
eqawarn
fi
}
python_pyc_check
fi
: # guarantee successful exit
# vim:ft=ebuild