# Copyright 2019 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 if [[ ${EAPI} == [5-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