From 457c73f83753c32d8955137603133abe03fc3533 Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Fri, 5 May 2017 23:08:37 +0200 Subject: 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(+) (limited to 'eclass/distutils-r1.eclass') diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index 3be67bbf2a21..5df7234332d3 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 -- -- cgit v1.2.3-65-gdbad