commit: 457c73f83753c32d8955137603133abe03fc3533
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri May 5 21:08:37 2017 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue May 16 17:11:29 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=457c73f8
distutils-r1.eclass: Warn if *-nspkg.pth files are installed
Add a check for *-nspkg.pth files indicating implicit setuptools
namespace hack. While they kept namespaces somewhat working without
requiring explicit support in ebuilds, they were unreliable. They
frequently required additional hacks (distutils_install_for_testing) to
get the tests working, and they have proven even more broken for Python
3.5+.
For this reason, those files were deprecated in favor of proper,
explicit namespace support. If they are found to exist, the developer
should ensure to remove them to avoid issues.
eclass/distutils-r1.eclass | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 3be67bbf2a2..5df7234332d 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -789,6 +789,33 @@ distutils-r1_src_test() {
fi
}
+# @FUNCTION: _distutils-r1_check_namespace_pth
+# @INTERNAL
+# @DESCRIPTION:
+# Check if any *-nspkg.pth files were installed (by setuptools)
+# and warn about the policy non-conformance if they were.
+_distutils-r1_check_namespace_pth() {
+ local f pth=()
+
+ while IFS= read -r -d '' f; do
+ pth+=( "${f}" )
+ done < <(find "${ED}" -name '*-nspkg.pth' -print0)
+
+ if [[ ${pth[@]} ]]; then
+ ewarn "The following *-nspkg.pth files were found installed:"
+ ewarn
+ for f in "${pth[@]}"; do
+ ewarn " ${f#${ED%/}}"
+ done
+ ewarn
+ ewarn "The presence of those files may break namespaces in
Python 3.5+. Please"
+ ewarn "read our documentation on reliable handling of
namespaces and update"
+ ewarn "the ebuild accordingly:"
+ ewarn
+ ewarn "
https://wiki.gentoo.org/wiki/Project:Python/Namespace_packages"
+ fi
+}
+
distutils-r1_src_install() {
debug-print-function ${FUNCNAME} "${@}"
@@ -812,6 +839,8 @@ distutils-r1_src_install() {
"${cmd}" "QA: python_install_all() didn't call
distutils-r1_python_install_all"
fi
+
+ _distutils-r1_check_namespace_pth
}
# -- distutils.eclass functions --