diff options
author | Michał Górny <mgorny@gentoo.org> | 2018-07-17 10:36:52 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2018-07-20 23:26:17 +0200 |
commit | 414438e131c22baf6db0c65437e28149f6f2640a (patch) | |
tree | 99747d569134559e229fb413cb101d3acf7fc4b6 /eclass | |
parent | games-engines/love: Update maintainers (diff) | |
download | gentoo-414438e131c22baf6db0c65437e28149f6f2640a.tar.gz gentoo-414438e131c22baf6db0c65437e28149f6f2640a.tar.bz2 gentoo-414438e131c22baf6db0c65437e28149f6f2640a.zip |
distutils-r1.eclass: Enable parallel builds in py3.5+
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.
In order to avoid breaking stable systems, introduce the new behavior
only for EAPI 7 ebuilds, or older EAPI ebuilds with unstable
implementations (Python 3.7 and PyPy 3).
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/distutils-r1.eclass | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass index 975383acc09b..85f8f4cb3be9 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,23 @@ distutils-r1_python_compile() { _distutils-r1_copy_egg_info - esetup.py build "${@}" + local build_args=() + # distutils is parallel-capable since py3.5 + # to avoid breaking stable ebuilds, enable it only if either: + # a. we're dealing with EAPI 7 + # b. we're dealing with Python 3.7 or PyPy3 + if python_is_python3 && [[ ${EPYTHON} != python3.4 ]]; then + if [[ ${EAPI} != [56] || ${EPYTHON} != python3.[56] ]]; then + local jobs=$(makeopts_jobs "${MAKEOPTS}" INF) + if [[ ${jobs} == INF ]]; then + local nproc=$(get_nproc) + jobs=$(( nproc + 1 )) + fi + build_args+=( -j "${jobs}" ) + fi + fi + + esetup.py build "${build_args[@]}" "${@}" } # @FUNCTION: _distutils-r1_wrap_scripts |