commit:     4986eb8eece688f596bbf6e2cbcbe532df07c95f
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Apr  9 21:55:50 2022 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Apr 11 19:58:39 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4986eb8e

distutils-r1.eclass: Skip build_ext when there no .c/.pyx files

Skip issuing build_ext when there appears to be no .c/.pyx files.
Since starting setuptools is expensive, this gives a major speedup
to building pure Python packages.  If the check misfires, the worst
that can happen is that C extensions will be built serialized.

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/distutils-r1.eclass | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 1a0097647c41..f9cb41aa3d42 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -1133,7 +1133,17 @@ distutils-r1_python_compile() {
                fi
 
                if [[ ${DISTUTILS_USE_PEP517} && ${GPEP517_TESTING} ]]; then
-                       esetup.py build_ext -j "${jobs}" "${@}"
+                       # issue build_ext only if it looks like we have 
something
+                       # to build; setuptools is expensive to start
+                       # see extension.py for list of suffixes
+                       # .pyx is added for Cython
+                       if [[ -n $(
+                               find '(' -name '*.c' -o -name '*.cc' -o -name 
'*.cpp' \
+                                       -o -name '*.cxx' -o -name '*.c++' -o 
-name '*.m' \
+                                       -o -name '*.mm' -o -name '*.pyx' ')' 
-print -quit
+                       ) ]]; then
+                               esetup.py build_ext -j "${jobs}" "${@}"
+                       fi
                else
                        esetup.py build -j "${jobs}" "${@}"
                fi

Reply via email to