Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 metadata/install-qa-check.d/60python-site | 45 ++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/metadata/install-qa-check.d/60python-site 
b/metadata/install-qa-check.d/60python-site
index 5f812ecd01e1..459509f8a136 100644
--- a/metadata/install-qa-check.d/60python-site
+++ b/metadata/install-qa-check.d/60python-site
@@ -11,12 +11,21 @@ python_site_check() {
        local progs=( "${EPREFIX}"/usr/lib/python-exec/*/gpep517 )
        ${save}
 
+       local forbidden_package_names=(
+               # NB: setuptools/discovery.py is a good source of ideas
+               benchmark benchmarks dist doc docs examples scripts tasks
+               test tests tools util utils
+               .pytest_cache .hypothesis _trial_temp
+       )
+
        local invalid=()
        local mismatched_timestamp=()
        local mismatched_data=()
        local missing=()
        local stray=()
 
+       local stray_packages=()
+
        # 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.
@@ -24,12 +33,33 @@ python_site_check() {
                return
        fi
 
+       local f prog
        for prog in "${progs[@]}"; do
                local impl=${prog%/*}
                impl=${impl##*/}
 
                # NB: using ${impl}* to catch pypy3.* for pypy3
-               [[ -d "${ED}"/usr/lib/${impl}*/site-packages ]] || continue
+               local sitedir=( "${ED}"/usr/lib/${impl}*/site-packages )
+               [[ -d ${sitedir} ]] || continue
+
+               # check for stray files in site-packages
+               while IFS= read -d $'\0' -r f; do
+                       stray_packages+=( "${f#${ED}}" )
+               done < <(
+                       find "${sitedir}" -maxdepth 1 -type f '!' '(' \
+                                       -name '*.egg-info' -o \
+                                       -name '*.pth' -o \
+                                       -name '*.py' -o \
+                                       -name '*.pyi' -o \
+                                       -name "*$(get_modname)" \
+                               ')' -print0
+               )
+               # check for forbidden packages
+               for f in "${forbidden_package_names[@]}"; do
+                       [[ -d ${sitedir}/${f} ]] && stray_packages+=(
+                               "${sitedir#${ED}}/${f}"
+                       )
+               done
 
                einfo "Verifying compiled files for ${impl}"
                local kind pyc py
@@ -117,6 +147,19 @@ python_site_check() {
                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
+
+       if [[ ${stray_packages[@]} ]]; then
+               eqawarn
+               eqawarn "QA Notice: The following unexpected files/directories 
were found"
+               eqawarn "top-level in the site-packages directory:"
+               eqawarn
+               eqatag -v python-site.stray "${stray_packages[@]}"
+               eqawarn
+               eqawarn "This is most likely a bug in the build system.  More 
information"
+               eqawarn "can be found in the Python Guide:"
+               eqawarn 
"https://projects.gentoo.org/python/guide/qawarn.html#stray-top-level-files-in-site-packages";
+               die "Failing install because of stray top-level files in 
site-packages"
+       fi
 }
 
 python_site_check
-- 
2.43.0


Reply via email to