python-utils-r1.eclass: Enable parallel bytecompile compilation

Python 3.5 added support for compileall to run parallel workers for
performing bytecode compilation. Make use of it to the extent
possible without refactoring the code too much to get different
paths into the same call for best possible parallelization.

Signed-off-by: Mart Raudsepp <leio@gentoo.org>
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Mart Raudsepp
2021-08-12 19:04:20 +02:00
committed by Michał Górny
parent 7a9b4f552e
commit c412d29682
+8 -5
View File
@@ -35,7 +35,7 @@ fi
if [[ ! ${_PYTHON_UTILS_R1} ]]; then
[[ ${EAPI} == [67] ]] && inherit eapi8-dosym
inherit toolchain-funcs
inherit multiprocessing toolchain-funcs
# @ECLASS-VARIABLE: _PYTHON_ALL_IMPLS
# @INTERNAL
@@ -590,6 +590,9 @@ python_optimize() {
debug-print "${FUNCNAME}: using sys.path: ${*/%/;}"
fi
local jobs=$(makeopts_jobs "${MAKEOPTS}" INF)
[[ ${jobs} == INF ]] && jobs=$(get_nproc)
local d
for d; do
# make sure to get a nice path without //
@@ -603,12 +606,12 @@ python_optimize() {
;;
python3.[5678]|pypy3)
# both levels of optimization are separate since 3.5
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
"${PYTHON}" -O -m compileall -q -f -d "${instpath}" "${d}"
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
"${PYTHON}" -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}"
"${PYTHON}" -O -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}"
"${PYTHON}" -OO -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}"
;;
python*)
"${PYTHON}" -m compileall -o 0 -o 1 -o 2 --hardlink-dupes -q -f -d "${instpath}" "${d}"
"${PYTHON}" -m compileall -j "${jobs}" -o 0 -o 1 -o 2 --hardlink-dupes -q -f -d "${instpath}" "${d}"
;;
*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"