commit:     460987b8f0458a2f5102ad3bffc646bf9b492954
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 21 11:28:33 2023 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Feb 25 06:09:00 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=460987b8

distutils-r1.eclass: Strip pkg_resources namespaces automatically

Closes: https://github.com/gentoo/gentoo/pull/29701
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/distutils-r1.eclass | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 426de7200957..9ef8342486b4 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -1980,6 +1980,36 @@ distutils-r1_src_test() {
        return ${ret}
 }
 
+# @FUNCTION: _distutils-r1_strip_namespace_packages
+# @USAGE: <sitedir>
+# @INTERNAL
+# @DESCRIPTION:
+# Find and remove setuptools-style namespaces in the specified
+# directory.
+_distutils-r1_strip_namespace_packages() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       local sitedir=${1}
+       local f ns had_any=
+       while IFS= read -r -d '' f; do
+               while read -r ns; do
+                       einfo "Stripping pkg_resources-style namespace ${ns}"
+                       had_any=1
+               done < "${f}"
+
+               rm "${f}" || die
+       done < <(
+               # NB: this deliberately does not include .egg-info, in order
+               # to limit this to PEP517 mode.
+               find "${sitedir}" -path '*.dist-info/namespace_packages.txt' 
-print0
+       )
+
+       # If we had any namespace packages, remove .pth files as well.
+       if [[ ${had_any} ]]; then
+               find "${sitedir}" -name '*-nspkg.pth' -delete || die
+       fi
+}
+
 # @FUNCTION: _distutils-r1_post_python_install
 # @INTERNAL
 # @DESCRIPTION:
@@ -1990,6 +2020,8 @@ _distutils-r1_post_python_install() {
 
        local sitedir=${D%/}$(python_get_sitedir)
        if [[ -d ${sitedir} ]]; then
+               _distutils-r1_strip_namespace_packages "${sitedir}"
+
                local forbidden_package_names=(
                        examples test tests
                        .pytest_cache .hypothesis _trial_temp

Reply via email to