124 lines
3.3 KiB
Text
124 lines
3.3 KiB
Text
# Copyright 2019-2022 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>
|
|
|
|
python_pyc_check() {
|
|
local save=$(shopt -p nullglob)
|
|
shopt -s nullglob
|
|
local progs=( "${EPREFIX}"/usr/lib/python-exec/*/gpep517 )
|
|
${save}
|
|
|
|
local invalid=()
|
|
local mismatched_timestamp=()
|
|
local mismatched_data=()
|
|
local missing=()
|
|
local stray=()
|
|
|
|
# Avoid running the check if sufficiently new gpep517 is not installed
|
|
# yet. It's valid to schedule (for merge order) >=gpep517-8 after
|
|
# packages which have this check run if they don't use distutils-r1.
|
|
if [[ ${EAPI} == [0123] ]] || ! nonfatal has_version ">=dev-python/gpep517-8" ; then
|
|
return
|
|
fi
|
|
|
|
for prog in "${progs[@]}"; do
|
|
local impl=${prog%/*}
|
|
impl=${impl##*/}
|
|
|
|
[[ -d "${ED}"/usr/lib/${impl}/site-packages ]] || continue
|
|
|
|
einfo "Verifying compiled files for ${impl}"
|
|
local kind pyc py
|
|
while IFS=: read -r kind pyc py extra; do
|
|
case ${kind} in
|
|
invalid)
|
|
invalid+=( "${pyc}" )
|
|
;;
|
|
mismatched)
|
|
case ${extra} in
|
|
timestamp)
|
|
mismatched_timestamp+=( "${pyc}" )
|
|
;;
|
|
*)
|
|
mismatched_data+=( "${pyc}" )
|
|
;;
|
|
esac
|
|
;;
|
|
missing)
|
|
missing+=( "${pyc}" )
|
|
;;
|
|
older)
|
|
# older warnings were produced by earlier version
|
|
# of gpep517 but the check was incorrect, so we just
|
|
# ignore them
|
|
;;
|
|
stray)
|
|
stray+=( "${pyc}" )
|
|
;;
|
|
esac
|
|
done < <("${prog}" verify-pyc --destdir "${D}" --prefix "${EPREFIX}"/usr)
|
|
done
|
|
|
|
local found=
|
|
if [[ ${missing[@]} ]]; then
|
|
eqawarn
|
|
eqawarn "QA Notice: This package installs one or more Python modules that are"
|
|
eqawarn "not byte-compiled."
|
|
eqawarn "The following files are missing:"
|
|
eqawarn
|
|
eqatag -v python-pyc.missing "${missing[@]}"
|
|
found=1
|
|
fi
|
|
|
|
if [[ ${invalid[@]} ]]; then
|
|
eqawarn
|
|
eqawarn "QA Notice: This package installs one or more compiled Python modules"
|
|
eqawarn "that seem to be invalid (do not have the correct header)."
|
|
eqawarn "The following files are invalid:"
|
|
eqawarn
|
|
eqatag -v python-pyc.invalid "${invalid[@]}"
|
|
found=1
|
|
fi
|
|
|
|
if [[ ${mismatched_data[@]} ]]; then
|
|
eqawarn
|
|
eqawarn "QA Notice: This package installs one or more compiled Python modules whose"
|
|
eqawarn ".py files have different content (size or hash) than recorded:"
|
|
eqawarn
|
|
eqatag -v python-pyc.mismatched.data "${mismatched_data[@]}"
|
|
found=1
|
|
fi
|
|
|
|
if [[ ${mismatched_timestamp[@]} ]]; then
|
|
eqawarn
|
|
eqawarn "QA Notice: This package installs one or more compiled Python modules whose"
|
|
eqawarn ".py files have different timestamps than recorded:"
|
|
eqawarn
|
|
eqatag -v python-pyc.mismatched.timestamp "${mismatched_timestamp[@]}"
|
|
found=1
|
|
fi
|
|
|
|
if [[ ${stray[@]} ]]; then
|
|
eqawarn
|
|
eqawarn "QA Notice: This package installs one or more compiled Python modules"
|
|
eqawarn "that do not match installed modules (or their implementation)."
|
|
eqawarn "The following files are stray:"
|
|
eqawarn
|
|
eqatag -v python-pyc.stray "${stray[@]}"
|
|
found=1
|
|
fi
|
|
|
|
if [[ ${found} ]]; then
|
|
eqawarn
|
|
eqawarn "For more information on bytecode files and related issues, please see:"
|
|
eqawarn " https://projects.gentoo.org/python/guide/qawarn.html#compiled-bytecode-related-warnings"
|
|
fi
|
|
}
|
|
|
|
python_pyc_check
|
|
|
|
: # guarantee successful exit
|
|
|
|
# vim:ft=ebuild
|