Python 3.5+ introduces parallel build support in distutils.  Take
advantage of that by passing appropriate -j option.  Since distutils
does not support an equivalent of --load-average, default to the number
of CPUs+1 when unspecified.
---
 eclass/distutils-r1.eclass | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 975383acc09b..4d8aa3ca6677 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -80,10 +80,10 @@ if [[ ! ${_DISTUTILS_R1} ]]; then
 
 [[ ${EAPI} == [45] ]] && inherit eutils
 [[ ${EAPI} == [56] ]] && inherit xdg-utils
-inherit toolchain-funcs
+inherit multiprocessing toolchain-funcs
 
 if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then
-       inherit multiprocessing python-r1
+       inherit python-r1
 else
        inherit python-single-r1
 fi
@@ -454,7 +454,18 @@ distutils-r1_python_compile() {
 
        _distutils-r1_copy_egg_info
 
-       esetup.py build "${@}"
+       local build_args=()
+       # distutils is parallel-capable since py3.5
+       if python_is_python3 && [[ ${EPYTHON} != python3.4 ]]; then
+               local jobs=$(makeopts_jobs "${MAKEOPTS}" INF)
+               if [[ ${jobs} == INF ]]; then
+                       local nproc=$(get_nproc)
+                       jobs=$(( nproc + 1 ))
+               fi
+               build_args+=( -j "${jobs}" )
+       fi
+
+       esetup.py build "${build_args[@]}" "${@}"
 }
 
 # @FUNCTION: _distutils-r1_wrap_scripts
-- 
2.18.0


Reply via email to